Commit 64b7907f authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge kroah.com:/home/greg/linux/BK/bleed-2.6

into kroah.com:/home/greg/linux/BK/pci-2.6
parents 7b51a623 694924e4
......@@ -20,6 +20,10 @@ Part I - pci_ and dma_ Equivalent API
To get the pci_ API, you must #include <linux/pci.h>
To get the dma_ API, you must #include <linux/dma-mapping.h>
Part Ia - Using large dma-coherent buffers
------------------------------------------
void *
dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, int flag)
......@@ -42,6 +46,7 @@ address space) or NULL if the allocation failed.
Note: consistent memory can be expensive on some platforms, and the
minimum allocation length may be as big as a page, so you should
consolidate your requests for consistent memory as much as possible.
The simplest way to do that is to use the dma_pool calls (see below).
The flag parameter (dma_alloc_coherent only) allows the caller to
specify the GFP_ flags (see kmalloc) for the allocation (the
......@@ -61,6 +66,77 @@ size and dma_handle must all be the same as those passed into the
consistent allocate. cpu_addr must be the virtual address returned by
the consistent allocate
Part Ib - Using small dma-coherent buffers
------------------------------------------
To get this part of the dma_ API, you must #include <linux/dmapool.h>
Many drivers need lots of small dma-coherent memory regions for DMA
descriptors or I/O buffers. Rather than allocating in units of a page
or more using dma_alloc_coherent(), you can use DMA pools. These work
much like a kmem_cache_t, except that they use the dma-coherent allocator
not __get_free_pages(). Also, they understand common hardware constraints
for alignment, like queue heads needing to be aligned on N byte boundaries.
struct dma_pool *
dma_pool_create(const char *name, struct device *dev,
size_t size, size_t align, size_t alloc);
struct pci_pool *
pci_pool_create(const char *name, struct pci_device *dev,
size_t size, size_t align, size_t alloc);
The pool create() routines initialize a pool of dma-coherent buffers
for use with a given device. It must be called in a context which
can sleep.
The "name" is for diagnostics (like a kmem_cache_t name); dev and size
are like what you'd pass to dma_alloc_coherent(). The device's hardware
alignment requirement for this type of data is "align" (which is expressed
in bytes, and must be a power of two). If your device has no boundary
crossing restrictions, pass 0 for alloc; passing 4096 says memory allocated
from this pool must not cross 4KByte boundaries.
void *dma_pool_alloc(struct dma_pool *pool, int gfp_flags,
dma_addr_t *dma_handle);
void *pci_pool_alloc(struct pci_pool *pool, int gfp_flags,
dma_addr_t *dma_handle);
This allocates memory from the pool; the returned memory will meet the size
and alignment requirements specified at creation time. Pass GFP_ATOMIC to
prevent blocking, or if it's permitted (not in_interrupt, not holding SMP locks)
pass GFP_KERNEL to allow blocking. Like dma_alloc_coherent(), this returns
two values: an address usable by the cpu, and the dma address usable by the
pool's device.
void dma_pool_free(struct dma_pool *pool, void *vaddr,
dma_addr_t addr);
void pci_pool_free(struct pci_pool *pool, void *vaddr,
dma_addr_t addr);
This puts memory back into the pool. The pool is what was passed to
the the pool allocation routine; the cpu and dma addresses are what
were returned when that routine allocated the memory being freed.
void dma_pool_destroy(struct dma_pool *pool);
void pci_pool_destroy(struct pci_pool *pool);
The pool destroy() routines free the resources of the pool. They must be
called in a context which can sleep. Make sure you've freed all allocated
memory back to the pool before you destroy it.
Part Ic - DMA addressing limitations
------------------------------------
int
dma_supported(struct device *dev, u64 mask)
int
......@@ -86,6 +162,10 @@ parameters if it is.
Returns: 1 if successful and 0 if not
Part Id - Streaming DMA mappings
--------------------------------
dma_addr_t
dma_map_single(struct device *dev, void *cpu_addr, size_t size,
enum dma_data_direction direction)
......@@ -254,6 +334,7 @@ Notes: You must do this:
See also dma_map_single().
Part II - Advanced dma_ usage
-----------------------------
......
......@@ -943,12 +943,50 @@ int pirq_enable_irq(struct pci_dev *dev)
{
u8 pin;
extern int interrupt_line_quirk;
struct pci_dev *temp_dev;
pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
if (pin && !pcibios_lookup_irq(dev, 1) && !dev->irq) {
char *msg;
if (io_apic_assign_pci_irqs)
msg = " Probably buggy MP table.";
else if (pci_probe & PCI_BIOS_IRQ_SCAN)
msg = "";
if (io_apic_assign_pci_irqs) {
int irq;
if (pin) {
pin--; /* interrupt pins are numbered starting from 1 */
irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, PCI_SLOT(dev->devfn), pin);
/*
* Busses behind bridges are typically not listed in the MP-table.
* In this case we have to look up the IRQ based on the parent bus,
* parent slot, and pin number. The SMP code detects such bridged
* busses itself so we should get into this branch reliably.
*/
temp_dev = dev;
while (irq < 0 && dev->bus->parent) { /* go back to the bridge */
struct pci_dev * bridge = dev->bus->self;
pin = (pin + PCI_SLOT(dev->devfn)) % 4;
irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number,
PCI_SLOT(bridge->devfn), pin);
if (irq >= 0)
printk(KERN_WARNING "PCI: using PPB(B%d,I%d,P%d) to get irq %d\n",
bridge->bus->number, PCI_SLOT(bridge->devfn), pin, irq);
dev = bridge;
}
dev = temp_dev;
if (irq >= 0) {
#ifdef CONFIG_PCI_USE_VECTOR
if (!platform_legacy_irq(irq))
irq = IO_APIC_VECTOR(irq);
#endif
printk(KERN_INFO "PCI->APIC IRQ transform: (B%d,I%d,P%d) -> %d\n",
dev->bus->number, PCI_SLOT(dev->devfn), pin, irq);
dev->irq = irq;
return 0;
} else
msg = " Probably buggy MP table.";
}
} else if (pci_probe & PCI_BIOS_IRQ_SCAN)
msg = "";
else
msg = " Please try using pci=biosirq.";
......
......@@ -2,7 +2,7 @@
obj-y := core.o sys.o interface.o bus.o \
driver.o class.o class_simple.o platform.o \
cpu.o firmware.o init.o map.o
cpu.o firmware.o init.o map.o dmapool.o
obj-y += power/
obj-$(CONFIG_FW_LOADER) += firmware_class.o
obj-$(CONFIG_NUMA) += node.o
......@@ -197,6 +197,7 @@ void device_initialize(struct device *dev)
INIT_LIST_HEAD(&dev->children);
INIT_LIST_HEAD(&dev->driver_list);
INIT_LIST_HEAD(&dev->bus_list);
INIT_LIST_HEAD(&dev->dma_pools);
}
/**
......
#include <linux/pci.h>
#include <linux/device.h>
#include <linux/mm.h>
#include <asm/io.h> /* Needed for i386 to build */
#include <asm/scatterlist.h> /* Needed for i386 to build */
#include <linux/dma-mapping.h>
#include <linux/dmapool.h>
#include <linux/slab.h>
#include <linux/module.h>
/*
* Pool allocator ... wraps the pci_alloc_consistent page allocator, so
* Pool allocator ... wraps the dma_alloc_coherent page allocator, so
* small blocks are easily used by drivers for bus mastering controllers.
* This should probably be sharing the guts of the slab allocator.
*/
struct pci_pool { /* the pool */
struct dma_pool { /* the pool */
struct list_head page_list;
spinlock_t lock;
size_t blocks_per_page;
size_t size;
struct pci_dev *dev;
struct device *dev;
size_t allocation;
char name [32];
wait_queue_head_t waitq;
struct list_head pools;
};
struct pci_page { /* cacheable header for 'allocation' bytes */
struct dma_page { /* cacheable header for 'allocation' bytes */
struct list_head page_list;
void *vaddr;
dma_addr_t dma;
......@@ -37,12 +43,10 @@ static DECLARE_MUTEX (pools_lock);
static ssize_t
show_pools (struct device *dev, char *buf)
{
struct pci_dev *pdev;
unsigned temp, size;
char *next;
struct list_head *i, *j;
pdev = container_of (dev, struct pci_dev, dev);
next = buf;
size = PAGE_SIZE;
......@@ -51,16 +55,16 @@ show_pools (struct device *dev, char *buf)
next += temp;
down (&pools_lock);
list_for_each (i, &pdev->pools) {
struct pci_pool *pool;
list_for_each (i, &dev->dma_pools) {
struct dma_pool *pool;
unsigned pages = 0, blocks = 0;
pool = list_entry (i, struct pci_pool, pools);
pool = list_entry (i, struct dma_pool, pools);
list_for_each (j, &pool->page_list) {
struct pci_page *page;
struct dma_page *page;
page = list_entry (j, struct pci_page, page_list);
page = list_entry (j, struct dma_page, page_list);
pages++;
blocks += page->in_use;
}
......@@ -80,31 +84,31 @@ show_pools (struct device *dev, char *buf)
static DEVICE_ATTR (pools, S_IRUGO, show_pools, NULL);
/**
* pci_pool_create - Creates a pool of pci consistent memory blocks, for dma.
* dma_pool_create - Creates a pool of consistent memory blocks, for dma.
* @name: name of pool, for diagnostics
* @pdev: pci device that will be doing the DMA
* @dev: device that will be doing the DMA
* @size: size of the blocks in this pool.
* @align: alignment requirement for blocks; must be a power of two
* @allocation: returned blocks won't cross this boundary (or zero)
* Context: !in_interrupt()
*
* Returns a pci allocation pool with the requested characteristics, or
* null if one can't be created. Given one of these pools, pci_pool_alloc()
* Returns a dma allocation pool with the requested characteristics, or
* null if one can't be created. Given one of these pools, dma_pool_alloc()
* may be used to allocate memory. Such memory will all have "consistent"
* DMA mappings, accessible by the device and its driver without using
* cache flushing primitives. The actual size of blocks allocated may be
* larger than requested because of alignment.
*
* If allocation is nonzero, objects returned from pci_pool_alloc() won't
* If allocation is nonzero, objects returned from dma_pool_alloc() won't
* cross that size boundary. This is useful for devices which have
* addressing restrictions on individual DMA transfers, such as not crossing
* boundaries of 4KBytes.
*/
struct pci_pool *
pci_pool_create (const char *name, struct pci_dev *pdev,
struct dma_pool *
dma_pool_create (const char *name, struct device *dev,
size_t size, size_t align, size_t allocation)
{
struct pci_pool *retval;
struct dma_pool *retval;
if (align == 0)
align = 1;
......@@ -131,7 +135,7 @@ pci_pool_create (const char *name, struct pci_dev *pdev,
strlcpy (retval->name, name, sizeof retval->name);
retval->dev = pdev;
retval->dev = dev;
INIT_LIST_HEAD (&retval->page_list);
spin_lock_init (&retval->lock);
......@@ -140,12 +144,12 @@ pci_pool_create (const char *name, struct pci_dev *pdev,
retval->blocks_per_page = allocation / size;
init_waitqueue_head (&retval->waitq);
if (pdev) {
if (dev) {
down (&pools_lock);
if (list_empty (&pdev->pools))
device_create_file (&pdev->dev, &dev_attr_pools);
if (list_empty (&dev->dma_pools))
device_create_file (dev, &dev_attr_pools);
/* note: not currently insisting "name" be unique */
list_add (&retval->pools, &pdev->pools);
list_add (&retval->pools, &dev->dma_pools);
up (&pools_lock);
} else
INIT_LIST_HEAD (&retval->pools);
......@@ -154,22 +158,23 @@ pci_pool_create (const char *name, struct pci_dev *pdev,
}
static struct pci_page *
pool_alloc_page (struct pci_pool *pool, int mem_flags)
static struct dma_page *
pool_alloc_page (struct dma_pool *pool, int mem_flags)
{
struct pci_page *page;
struct dma_page *page;
int mapsize;
mapsize = pool->blocks_per_page;
mapsize = (mapsize + BITS_PER_LONG - 1) / BITS_PER_LONG;
mapsize *= sizeof (long);
page = (struct pci_page *) kmalloc (mapsize + sizeof *page, mem_flags);
page = (struct dma_page *) kmalloc (mapsize + sizeof *page, mem_flags);
if (!page)
return 0;
page->vaddr = pci_alloc_consistent (pool->dev,
page->vaddr = dma_alloc_coherent (pool->dev,
pool->allocation,
&page->dma);
&page->dma,
mem_flags);
if (page->vaddr) {
memset (page->bitmap, 0xff, mapsize); // bit set == free
#ifdef CONFIG_DEBUG_SLAB
......@@ -197,44 +202,47 @@ is_page_busy (int blocks, unsigned long *bitmap)
}
static void
pool_free_page (struct pci_pool *pool, struct pci_page *page)
pool_free_page (struct dma_pool *pool, struct dma_page *page)
{
dma_addr_t dma = page->dma;
#ifdef CONFIG_DEBUG_SLAB
memset (page->vaddr, POOL_POISON_FREED, pool->allocation);
#endif
pci_free_consistent (pool->dev, pool->allocation, page->vaddr, dma);
dma_free_coherent (pool->dev, pool->allocation, page->vaddr, dma);
list_del (&page->page_list);
kfree (page);
}
/**
* pci_pool_destroy - destroys a pool of pci memory blocks.
* @pool: pci pool that will be destroyed
* dma_pool_destroy - destroys a pool of dma memory blocks.
* @pool: dma pool that will be destroyed
* Context: !in_interrupt()
*
* Caller guarantees that no more memory from the pool is in use,
* and that nothing will try to use the pool after this call.
*/
void
pci_pool_destroy (struct pci_pool *pool)
dma_pool_destroy (struct dma_pool *pool)
{
down (&pools_lock);
list_del (&pool->pools);
if (pool->dev && list_empty (&pool->dev->pools))
device_remove_file (&pool->dev->dev, &dev_attr_pools);
if (pool->dev && list_empty (&pool->dev->dma_pools))
device_remove_file (pool->dev, &dev_attr_pools);
up (&pools_lock);
while (!list_empty (&pool->page_list)) {
struct pci_page *page;
struct dma_page *page;
page = list_entry (pool->page_list.next,
struct pci_page, page_list);
struct dma_page, page_list);
if (is_page_busy (pool->blocks_per_page, page->bitmap)) {
printk (KERN_ERR "pci_pool_destroy %s/%s, %p busy\n",
pool->dev ? pci_name(pool->dev) : NULL,
pool->name, page->vaddr);
if (pool->dev)
dev_err(pool->dev, "dma_pool_destroy %s, %p busy\n",
pool->name, page->vaddr);
else
printk (KERN_ERR "dma_pool_destroy %s, %p busy\n",
pool->name, page->vaddr);
/* leak the still-in-use consistent memory */
list_del (&page->page_list);
kfree (page);
......@@ -247,9 +255,9 @@ pci_pool_destroy (struct pci_pool *pool)
/**
* pci_pool_alloc - get a block of consistent memory
* @pool: pci pool that will produce the block
* @mem_flags: SLAB_KERNEL or SLAB_ATOMIC
* dma_pool_alloc - get a block of consistent memory
* @pool: dma pool that will produce the block
* @mem_flags: GFP_* bitmask
* @handle: pointer to dma address of block
*
* This returns the kernel virtual address of a currently unused block,
......@@ -257,11 +265,11 @@ pci_pool_destroy (struct pci_pool *pool)
* If such a memory block can't be allocated, null is returned.
*/
void *
pci_pool_alloc (struct pci_pool *pool, int mem_flags, dma_addr_t *handle)
dma_pool_alloc (struct dma_pool *pool, int mem_flags, dma_addr_t *handle)
{
unsigned long flags;
struct list_head *entry;
struct pci_page *page;
struct dma_page *page;
int map, block;
size_t offset;
void *retval;
......@@ -270,7 +278,7 @@ pci_pool_alloc (struct pci_pool *pool, int mem_flags, dma_addr_t *handle)
spin_lock_irqsave (&pool->lock, flags);
list_for_each (entry, &pool->page_list) {
int i;
page = list_entry (entry, struct pci_page, page_list);
page = list_entry (entry, struct dma_page, page_list);
/* only cachable accesses here ... */
for (map = 0, i = 0;
i < pool->blocks_per_page;
......@@ -287,7 +295,7 @@ pci_pool_alloc (struct pci_pool *pool, int mem_flags, dma_addr_t *handle)
}
}
if (!(page = pool_alloc_page (pool, SLAB_ATOMIC))) {
if (mem_flags == SLAB_KERNEL) {
if (mem_flags & __GFP_WAIT) {
DECLARE_WAITQUEUE (wait, current);
current->state = TASK_INTERRUPTIBLE;
......@@ -318,16 +326,16 @@ pci_pool_alloc (struct pci_pool *pool, int mem_flags, dma_addr_t *handle)
}
static struct pci_page *
pool_find_page (struct pci_pool *pool, dma_addr_t dma)
static struct dma_page *
pool_find_page (struct dma_pool *pool, dma_addr_t dma)
{
unsigned long flags;
struct list_head *entry;
struct pci_page *page;
struct dma_page *page;
spin_lock_irqsave (&pool->lock, flags);
list_for_each (entry, &pool->page_list) {
page = list_entry (entry, struct pci_page, page_list);
page = list_entry (entry, struct dma_page, page_list);
if (dma < page->dma)
continue;
if (dma < (page->dma + pool->allocation))
......@@ -341,8 +349,8 @@ pool_find_page (struct pci_pool *pool, dma_addr_t dma)
/**
* pci_pool_free - put block back into pci pool
* @pool: the pci pool holding the block
* dma_pool_free - put block back into dma pool
* @pool: the dma pool holding the block
* @vaddr: virtual address of block
* @dma: dma address of block
*
......@@ -350,16 +358,19 @@ pool_find_page (struct pci_pool *pool, dma_addr_t dma)
* unless it is first re-allocated.
*/
void
pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
dma_pool_free (struct dma_pool *pool, void *vaddr, dma_addr_t dma)
{
struct pci_page *page;
struct dma_page *page;
unsigned long flags;
int map, block;
if ((page = pool_find_page (pool, dma)) == 0) {
printk (KERN_ERR "pci_pool_free %s/%s, %p/%lx (bad dma)\n",
pool->dev ? pci_name(pool->dev) : NULL,
pool->name, vaddr, (unsigned long) dma);
if (pool->dev)
dev_err(pool->dev, "dma_pool_free %s, %p/%lx (bad dma)\n",
pool->name, vaddr, (unsigned long) dma);
else
printk (KERN_ERR "dma_pool_free %s, %p/%lx (bad dma)\n",
pool->name, vaddr, (unsigned long) dma);
return;
}
......@@ -370,15 +381,21 @@ pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
#ifdef CONFIG_DEBUG_SLAB
if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%Lx\n",
pool->dev ? pci_name(pool->dev) : NULL,
pool->name, vaddr, (unsigned long long) dma);
if (pool->dev)
dev_err(pool->dev, "dma_pool_free %s, %p (bad vaddr)/%Lx\n",
pool->name, vaddr, (unsigned long long) dma);
else
printk (KERN_ERR "dma_pool_free %s, %p (bad vaddr)/%Lx\n",
pool->name, vaddr, (unsigned long long) dma);
return;
}
if (page->bitmap [map] & (1UL << block)) {
printk (KERN_ERR "pci_pool_free %s/%s, dma %Lx already free\n",
pool->dev ? pci_name(pool->dev) : NULL,
pool->name, (unsigned long long)dma);
if (pool->dev)
dev_err(pool->dev, "dma_pool_free %s, dma %Lx already free\n",
pool->name, (unsigned long long)dma);
else
printk (KERN_ERR "dma_pool_free %s, dma %Lx already free\n",
pool->name, (unsigned long long)dma);
return;
}
memset (vaddr, POOL_POISON_FREED, pool->size);
......@@ -392,13 +409,13 @@ pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
/*
* Resist a temptation to do
* if (!is_page_busy(bpp, page->bitmap)) pool_free_page(pool, page);
* it is not interrupt safe. Better have empty pages hang around.
* Better have a few empty pages hang around.
*/
spin_unlock_irqrestore (&pool->lock, flags);
}
EXPORT_SYMBOL (pci_pool_create);
EXPORT_SYMBOL (pci_pool_destroy);
EXPORT_SYMBOL (pci_pool_alloc);
EXPORT_SYMBOL (pci_pool_free);
EXPORT_SYMBOL (dma_pool_create);
EXPORT_SYMBOL (dma_pool_destroy);
EXPORT_SYMBOL (dma_pool_alloc);
EXPORT_SYMBOL (dma_pool_free);
......@@ -2,7 +2,7 @@
# Makefile for the PCI bus specific drivers.
#
obj-y += access.o bus.o probe.o remove.o pci.o pool.o quirks.o \
obj-y += access.o bus.o probe.o remove.o pci.o quirks.o \
names.o pci-driver.o search.o pci-sysfs.o
obj-$(CONFIG_PROC_FS) += proc.o
......
......@@ -116,7 +116,7 @@ static int pci_visit_bridge (struct pci_visit * fn,
}
bus = wrapped_dev->dev->subordinate;
if(bus) {
if (bus) {
memset(&wrapped_bus, 0, sizeof(struct pci_bus_wrapped));
wrapped_bus.bus = bus;
......@@ -130,8 +130,8 @@ static int pci_visit_bridge (struct pci_visit * fn,
* Every bus and every function is presented to a custom
* function that can act upon it.
*/
int pci_visit_dev (struct pci_visit *fn, struct pci_dev_wrapped *wrapped_dev,
struct pci_bus_wrapped *wrapped_parent)
int pci_visit_dev(struct pci_visit *fn, struct pci_dev_wrapped *wrapped_dev,
struct pci_bus_wrapped *wrapped_parent)
{
struct pci_dev* dev = wrapped_dev ? wrapped_dev->dev : NULL;
int result = 0;
......
......@@ -374,7 +374,7 @@ static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_sp
}
static int init_acpi (void)
static int __init init_acpi (void)
{
int retval;
......@@ -426,7 +426,7 @@ static void release_slot(struct hotplug_slot *hotplug_slot)
* init_slots - initialize 'struct slot' structures for each slot
*
*/
static int init_slots (void)
static int __init init_slots (void)
{
struct slot *slot;
int retval = 0;
......@@ -492,7 +492,7 @@ static int init_slots (void)
}
static void cleanup_slots (void)
static void __exit cleanup_slots (void)
{
struct list_head *tmp, *n;
struct slot *slot;
......
......@@ -87,7 +87,7 @@ static int is_ejectable (acpi_handle handle)
/* callback routine to check the existence of ejectable slots */
static acpi_status
is_ejectable_slot (acpi_handle handle, u32 lvl, void *context, void **rv)
is_ejectable_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
{
int *count = (int *)context;
......@@ -103,7 +103,7 @@ is_ejectable_slot (acpi_handle handle, u32 lvl, void *context, void **rv)
/* callback routine to register each ACPI PCI slot object */
static acpi_status
register_slot (acpi_handle handle, u32 lvl, void *context, void **rv)
register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
{
struct acpiphp_bridge *bridge = (struct acpiphp_bridge *)context;
struct acpiphp_slot *slot;
......@@ -212,7 +212,7 @@ register_slot (acpi_handle handle, u32 lvl, void *context, void **rv)
/* see if it's worth looking at this bridge */
static int detect_ejectable_slots (acpi_handle *bridge_handle)
static int detect_ejectable_slots(acpi_handle *bridge_handle)
{
acpi_status status;
int count;
......@@ -231,7 +231,7 @@ static int detect_ejectable_slots (acpi_handle *bridge_handle)
* TBD: _TRA, etc.
*/
static acpi_status
decode_acpi_resource (struct acpi_resource *resource, void *context)
decode_acpi_resource(struct acpi_resource *resource, void *context)
{
struct acpiphp_bridge *bridge = (struct acpiphp_bridge *) context;
struct acpi_resource_address64 address;
......@@ -339,7 +339,7 @@ static void decode_hpp(struct acpiphp_bridge *bridge)
/* initialize miscellaneous stuff for both root and PCI-to-PCI bridge */
static void init_bridge_misc (struct acpiphp_bridge *bridge)
static void init_bridge_misc(struct acpiphp_bridge *bridge)
{
acpi_status status;
......@@ -371,7 +371,7 @@ static void init_bridge_misc (struct acpiphp_bridge *bridge)
/* allocate and initialize host bridge data structure */
static void add_host_bridge (acpi_handle *handle, int seg, int bus)
static void add_host_bridge(acpi_handle *handle, int seg, int bus)
{
acpi_status status;
struct acpiphp_bridge *bridge;
......@@ -423,7 +423,7 @@ static void add_host_bridge (acpi_handle *handle, int seg, int bus)
/* allocate and initialize PCI-to-PCI bridge data structure */
static void add_p2p_bridge (acpi_handle *handle, int seg, int bus, int dev, int fn)
static void add_p2p_bridge(acpi_handle *handle, int seg, int bus, int dev, int fn)
{
struct acpiphp_bridge *bridge;
u8 tmp8;
......@@ -573,7 +573,7 @@ static void add_p2p_bridge (acpi_handle *handle, int seg, int bus, int dev, int
/* callback routine to find P2P bridges */
static acpi_status
find_p2p_bridge (acpi_handle handle, u32 lvl, void *context, void **rv)
find_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
{
acpi_status status;
acpi_handle dummy_handle;
......@@ -673,13 +673,13 @@ static int add_bridge(acpi_handle handle)
}
static void remove_bridge (acpi_handle handle)
static void remove_bridge(acpi_handle handle)
{
/* No-op for now .. */
}
static int power_on_slot (struct acpiphp_slot *slot)
static int power_on_slot(struct acpiphp_slot *slot)
{
acpi_status status;
struct acpiphp_func *func;
......@@ -714,7 +714,7 @@ static int power_on_slot (struct acpiphp_slot *slot)
}
static int power_off_slot (struct acpiphp_slot *slot)
static int power_off_slot(struct acpiphp_slot *slot)
{
acpi_status status;
struct acpiphp_func *func;
......@@ -778,7 +778,7 @@ static int power_off_slot (struct acpiphp_slot *slot)
* not per each slot object in ACPI namespace.
*
*/
static int enable_device (struct acpiphp_slot *slot)
static int enable_device(struct acpiphp_slot *slot)
{
u8 bus;
struct pci_dev *dev;
......@@ -852,7 +852,7 @@ static int enable_device (struct acpiphp_slot *slot)
/**
* disable_device - disable a slot
*/
static int disable_device (struct acpiphp_slot *slot)
static int disable_device(struct acpiphp_slot *slot)
{
int retval = 0;
struct acpiphp_func *func;
......@@ -894,7 +894,7 @@ static int disable_device (struct acpiphp_slot *slot)
*
* otherwise return 0
*/
static unsigned int get_slot_status (struct acpiphp_slot *slot)
static unsigned int get_slot_status(struct acpiphp_slot *slot)
{
acpi_status status;
unsigned long sta = 0;
......@@ -939,7 +939,7 @@ static unsigned int get_slot_status (struct acpiphp_slot *slot)
* handles ACPI event notification on {host,p2p} bridges
*
*/
static void handle_hotplug_event_bridge (acpi_handle handle, u32 type, void *context)
static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *context)
{
struct acpiphp_bridge *bridge;
char objname[64];
......@@ -1005,7 +1005,7 @@ static void handle_hotplug_event_bridge (acpi_handle handle, u32 type, void *con
* handles ACPI event notification on slots
*
*/
static void handle_hotplug_event_func (acpi_handle handle, u32 type, void *context)
static void handle_hotplug_event_func(acpi_handle handle, u32 type, void *context)
{
struct acpiphp_func *func;
char objname[64];
......@@ -1056,7 +1056,7 @@ static struct acpi_pci_driver acpi_pci_hp_driver = {
* acpiphp_glue_init - initializes all PCI hotplug - ACPI glue data structures
*
*/
int acpiphp_glue_init (void)
int __init acpiphp_glue_init(void)
{
int num;
......@@ -1077,7 +1077,7 @@ int acpiphp_glue_init (void)
*
* This function frees all data allocated in acpiphp_glue_init()
*/
void acpiphp_glue_exit (void)
void __exit acpiphp_glue_exit(void)
{
struct list_head *l1, *l2, *n1, *n2;
struct acpiphp_bridge *bridge;
......@@ -1124,7 +1124,7 @@ void acpiphp_glue_exit (void)
/**
* acpiphp_get_num_slots - count number of slots in a system
*/
int acpiphp_get_num_slots (void)
int __init acpiphp_get_num_slots(void)
{
struct list_head *node;
struct acpiphp_bridge *bridge;
......@@ -1171,7 +1171,7 @@ int acpiphp_for_each_slot(acpiphp_callback fn, void *data)
/* search matching slot from id */
struct acpiphp_slot *get_slot_from_id (int id)
struct acpiphp_slot *get_slot_from_id(int id)
{
struct list_head *node;
struct acpiphp_bridge *bridge;
......@@ -1193,7 +1193,7 @@ struct acpiphp_slot *get_slot_from_id (int id)
/**
* acpiphp_enable_slot - power on slot
*/
int acpiphp_enable_slot (struct acpiphp_slot *slot)
int acpiphp_enable_slot(struct acpiphp_slot *slot)
{
int retval;
......@@ -1217,7 +1217,7 @@ int acpiphp_enable_slot (struct acpiphp_slot *slot)
/**
* acpiphp_disable_slot - power off slot
*/
int acpiphp_disable_slot (struct acpiphp_slot *slot)
int acpiphp_disable_slot(struct acpiphp_slot *slot)
{
int retval = 0;
......@@ -1249,7 +1249,7 @@ int acpiphp_disable_slot (struct acpiphp_slot *slot)
/**
* acpiphp_check_bridge - re-enumerate devices
*/
int acpiphp_check_bridge (struct acpiphp_bridge *bridge)
int acpiphp_check_bridge(struct acpiphp_bridge *bridge)
{
struct acpiphp_slot *slot;
unsigned int sta;
......@@ -1296,7 +1296,7 @@ int acpiphp_check_bridge (struct acpiphp_bridge *bridge)
* slot enabled: 1
* slot disabled: 0
*/
u8 acpiphp_get_power_status (struct acpiphp_slot *slot)
u8 acpiphp_get_power_status(struct acpiphp_slot *slot)
{
unsigned int sta;
......@@ -1314,7 +1314,7 @@ u8 acpiphp_get_power_status (struct acpiphp_slot *slot)
* no direct attention led status information via ACPI
*
*/
u8 acpiphp_get_attention_status (struct acpiphp_slot *slot)
u8 acpiphp_get_attention_status(struct acpiphp_slot *slot)
{
return 0;
}
......@@ -1324,7 +1324,7 @@ u8 acpiphp_get_attention_status (struct acpiphp_slot *slot)
* latch closed: 1
* latch open: 0
*/
u8 acpiphp_get_latch_status (struct acpiphp_slot *slot)
u8 acpiphp_get_latch_status(struct acpiphp_slot *slot)
{
unsigned int sta;
......@@ -1338,7 +1338,7 @@ u8 acpiphp_get_latch_status (struct acpiphp_slot *slot)
* adapter presence : 1
* absence : 0
*/
u8 acpiphp_get_adapter_status (struct acpiphp_slot *slot)
u8 acpiphp_get_adapter_status(struct acpiphp_slot *slot)
{
unsigned int sta;
......@@ -1351,7 +1351,7 @@ u8 acpiphp_get_adapter_status (struct acpiphp_slot *slot)
/*
* pci address (seg/bus/dev)
*/
u32 acpiphp_get_address (struct acpiphp_slot *slot)
u32 acpiphp_get_address(struct acpiphp_slot *slot)
{
u32 address;
......
......@@ -2446,7 +2446,7 @@ static int configure_new_function (struct controller * ctrl, struct pci_func * f
u8 behind_bridge, struct resource_lists * resources)
{
int cloop;
u8 IRQ;
u8 IRQ = 0;
u8 temp_byte;
u8 device;
u8 class_code;
......@@ -3021,6 +3021,7 @@ static int configure_new_function (struct controller * ctrl, struct pci_func * f
}
} // End of base register loop
#if !defined(CONFIG_X86_IO_APIC)
// Figure out which interrupt pin this function uses
rc = pci_bus_read_config_byte (pci_bus, devfn, PCI_INTERRUPT_PIN, &temp_byte);
......@@ -3045,6 +3046,7 @@ static int configure_new_function (struct controller * ctrl, struct pci_func * f
// IRQ Line
rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_INTERRUPT_LINE, IRQ);
#endif
if (!behind_bridge) {
rc = cpqhp_set_irq(func->bus, func->device, temp_byte + 0x09, IRQ);
......
......@@ -123,7 +123,7 @@ int cpqhp_unconfigure_device(struct pci_func* func)
dbg("%s: bus/dev/func = %x/%x/%x\n", __FUNCTION__, func->bus, func->device, func->function);
for (j=0; j<8 ; j++) {
struct pci_dev* temp = pci_find_slot(func->bus, (func->device << 3) | j);
struct pci_dev* temp = pci_find_slot(func->bus, PCI_DEVFN(func->device, j));
if (temp)
pci_remove_bus_device(temp);
}
......@@ -151,6 +151,7 @@ static int PCI_RefinedAccessConfig(struct pci_bus *bus, unsigned int devfn, u8 o
*/
int cpqhp_set_irq (u8 bus_num, u8 dev_num, u8 int_pin, u8 irq_num)
{
#if !defined(CONFIG_X86_IO_APIC)
int rc;
u16 temp_word;
struct pci_dev fakedev;
......@@ -175,6 +176,7 @@ int cpqhp_set_irq (u8 bus_num, u8 dev_num, u8 int_pin, u8 irq_num)
// This should only be for x86 as it sets the Edge Level Control Register
outb((u8) (temp_word & 0xFF), 0x4d0);
outb((u8) ((temp_word & 0xFF00) >> 8), 0x4d1);
#endif
return 0;
}
......@@ -545,10 +547,10 @@ int cpqhp_save_slot_config (struct controller *ctrl, struct pci_func * new_slot)
} while (function < max_functions);
} // End of IF (device in slot?)
else {
return(2);
return 2;
}
return(0);
return 0;
}
......@@ -594,9 +596,8 @@ int cpqhp_save_base_addr_length(struct controller *ctrl, struct pci_func * func)
while (next != NULL) {
rc = cpqhp_save_base_addr_length(ctrl, next);
if (rc)
return(rc);
return rc;
next = next->next;
}
......@@ -979,7 +980,6 @@ int cpqhp_configure_board(struct controller *ctrl, struct pci_func * func)
while (next != NULL) {
rc = cpqhp_configure_board(ctrl, next);
if (rc)
return rc;
......@@ -1076,9 +1076,8 @@ int cpqhp_valid_replace(struct controller *ctrl, struct pci_func * func)
while (next != NULL) {
rc = cpqhp_valid_replace(ctrl, next);
if (rc)
return(rc);
return rc;
next = next->next;
}
......@@ -1144,7 +1143,7 @@ int cpqhp_valid_replace(struct controller *ctrl, struct pci_func * func)
}
return(0);
return 0;
}
......@@ -1229,9 +1228,8 @@ int cpqhp_find_available_resources (struct controller *ctrl, void *rom_start)
i = readb(rom_resource_table + NUMBER_OF_ENTRIES);
dbg("number_of_entries = %d\n", i);
if (!readb(one_slot + SECONDARY_BUS)) {
return(1);
}
if (!readb(one_slot + SECONDARY_BUS))
return 1;
dbg("dev|IO base|length|Mem base|length|Pre base|length|PB SB MB\n");
......@@ -1391,7 +1389,7 @@ int cpqhp_find_available_resources (struct controller *ctrl, void *rom_start)
rc &= cpqhp_resource_sort_and_combine(&(ctrl->io_head));
rc &= cpqhp_resource_sort_and_combine(&(ctrl->bus_head));
return(rc);
return rc;
}
......@@ -1411,7 +1409,7 @@ int cpqhp_return_board_resources(struct pci_func * func, struct resource_lists *
dbg("%s\n", __FUNCTION__);
if (!func)
return(1);
return 1;
node = func->io_head;
func->io_head = NULL;
......@@ -1450,7 +1448,7 @@ int cpqhp_return_board_resources(struct pci_func * func, struct resource_lists *
rc |= cpqhp_resource_sort_and_combine(&(resources->io_head));
rc |= cpqhp_resource_sort_and_combine(&(resources->bus_head));
return(rc);
return rc;
}
......
......@@ -104,7 +104,7 @@ static inline int slot_update (struct slot **sl)
if (rc)
return rc;
if (!init_flag)
return get_cur_bus_info (sl);
rc = get_cur_bus_info(sl);
return rc;
}
......@@ -116,7 +116,7 @@ static int __init get_max_slots (void)
list_for_each (tmp, &ibmphp_slot_head) {
slot_cur = list_entry (tmp, struct slot, ibm_slot_list);
/* sometimes the hot-pluggable slots start with 4 (not always from 1 */
/* sometimes the hot-pluggable slots start with 4 (not always from 1) */
slot_count = max (slot_count, slot_cur->number);
}
return slot_count;
......@@ -187,7 +187,7 @@ static inline int power_on (struct slot *slot_cur)
return retval;
}
if (CTLR_RESULT (slot_cur->ctrl->status)) {
err ("command not completed successfully in power_on \n");
err ("command not completed successfully in power_on\n");
return -EIO;
}
long_delay (3 * HZ); /* For ServeRAID cards, and some 66 PCI */
......@@ -201,14 +201,14 @@ static inline int power_off (struct slot *slot_cur)
retval = ibmphp_hpc_writeslot (slot_cur, cmd);
if (retval) {
err ("power off failed \n");
err ("power off failed\n");
return retval;
}
if (CTLR_RESULT (slot_cur->ctrl->status)) {
err ("command not completed successfully in power_off \n");
return -EIO;
err ("command not completed successfully in power_off\n");
retval = -EIO;
}
return 0;
return retval;
}
static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 value)
......@@ -216,7 +216,6 @@ static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 value)
int rc = 0;
struct slot *pslot;
u8 cmd;
int hpcrc = 0;
debug ("set_attention_status - Entry hotplug_slot[%lx] value[%x]\n", (ulong) hotplug_slot, value);
ibmphp_lock_operations ();
......@@ -241,16 +240,13 @@ static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 value)
if (rc == 0) {
pslot = (struct slot *) hotplug_slot->private;
if (pslot)
hpcrc = ibmphp_hpc_writeslot (pslot, cmd);
rc = ibmphp_hpc_writeslot(pslot, cmd);
else
rc = -ENODEV;
}
} else
rc = -ENODEV;
if (hpcrc)
rc = hpcrc;
ibmphp_unlock_operations ();
debug ("set_attention_status - Exit rc[%d]\n", rc);
......@@ -261,7 +257,6 @@ static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 * value)
{
int rc = -ENODEV;
struct slot *pslot;
int hpcrc = 0;
struct slot myslot;
debug ("get_attention_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", (ulong) hotplug_slot, (ulong) value);
......@@ -271,22 +266,16 @@ static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 * value)
pslot = (struct slot *) hotplug_slot->private;
if (pslot) {
memcpy ((void *) &myslot, (void *) pslot, sizeof (struct slot));
hpcrc = ibmphp_hpc_readslot (pslot, READ_SLOTSTATUS, &(myslot.status));
if (!hpcrc)
hpcrc = ibmphp_hpc_readslot (pslot, READ_EXTSLOTSTATUS, &(myslot.ext_status));
if (!hpcrc) {
rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, &(myslot.status));
if (!rc)
rc = ibmphp_hpc_readslot(pslot, READ_EXTSLOTSTATUS, &(myslot.ext_status));
if (!rc)
*value = SLOT_ATTN (myslot.status, myslot.ext_status);
rc = 0;
}
}
} else
rc = -ENODEV;
if (hpcrc)
rc = hpcrc;
}
ibmphp_unlock_operations ();
debug ("get_attention_status - Exit rc[%d] hpcrc[%x] value[%x]\n", rc, hpcrc, *value);
debug("get_attention_status - Exit rc[%d] value[%x]\n", rc, *value);
return rc;
}
......@@ -294,7 +283,6 @@ static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 * value)
{
int rc = -ENODEV;
struct slot *pslot;
int hpcrc = 0;
struct slot myslot;
debug ("get_latch_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", (ulong) hotplug_slot, (ulong) value);
......@@ -303,20 +291,14 @@ static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 * value)
pslot = (struct slot *) hotplug_slot->private;
if (pslot) {
memcpy ((void *) &myslot, (void *) pslot, sizeof (struct slot));
hpcrc = ibmphp_hpc_readslot (pslot, READ_SLOTSTATUS, &(myslot.status));
if (!hpcrc) {
rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, &(myslot.status));
if (!rc)
*value = SLOT_LATCH (myslot.status);
rc = 0;
}
}
} else
rc = -ENODEV;
if (hpcrc)
rc = hpcrc;
}
ibmphp_unlock_operations ();
debug ("get_latch_status - Exit rc[%d] hpcrc[%x] value[%x]\n", rc, hpcrc, *value);
debug("get_latch_status - Exit rc[%d] rc[%x] value[%x]\n", rc, rc, *value);
return rc;
}
......@@ -325,7 +307,6 @@ static int get_power_status (struct hotplug_slot *hotplug_slot, u8 * value)
{
int rc = -ENODEV;
struct slot *pslot;
int hpcrc = 0;
struct slot myslot;
debug ("get_power_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", (ulong) hotplug_slot, (ulong) value);
......@@ -334,20 +315,14 @@ static int get_power_status (struct hotplug_slot *hotplug_slot, u8 * value)
pslot = (struct slot *) hotplug_slot->private;
if (pslot) {
memcpy ((void *) &myslot, (void *) pslot, sizeof (struct slot));
hpcrc = ibmphp_hpc_readslot (pslot, READ_SLOTSTATUS, &(myslot.status));
if (!hpcrc) {
rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, &(myslot.status));
if (!rc)
*value = SLOT_PWRGD (myslot.status);
rc = 0;
}
}
} else
rc = -ENODEV;
if (hpcrc)
rc = hpcrc;
}
ibmphp_unlock_operations ();
debug ("get_power_status - Exit rc[%d] hpcrc[%x] value[%x]\n", rc, hpcrc, *value);
debug("get_power_status - Exit rc[%d] rc[%x] value[%x]\n", rc, rc, *value);
return rc;
}
......@@ -356,7 +331,6 @@ static int get_adapter_present (struct hotplug_slot *hotplug_slot, u8 * value)
int rc = -ENODEV;
struct slot *pslot;
u8 present;
int hpcrc = 0;
struct slot myslot;
debug ("get_adapter_status - Entry hotplug_slot[%lx] pvalue[%lx]\n", (ulong) hotplug_slot, (ulong) value);
......@@ -365,23 +339,19 @@ static int get_adapter_present (struct hotplug_slot *hotplug_slot, u8 * value)
pslot = (struct slot *) hotplug_slot->private;
if (pslot) {
memcpy ((void *) &myslot, (void *) pslot, sizeof (struct slot));
hpcrc = ibmphp_hpc_readslot (pslot, READ_SLOTSTATUS, &(myslot.status));
if (!hpcrc) {
rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, &(myslot.status));
if (!rc) {
present = SLOT_PRESENT (myslot.status);
if (present == HPC_SLOT_EMPTY)
*value = 0;
else
*value = 1;
rc = 0;
}
}
} else
rc = -ENODEV;
if (hpcrc)
rc = hpcrc;
}
ibmphp_unlock_operations ();
debug ("get_adapter_present - Exit rc[%d] hpcrc[%x] value[%x]\n", rc, hpcrc, *value);
debug("get_adapter_present - Exit rc[%d] value[%x]\n", rc, *value);
return rc;
}
......@@ -418,8 +388,7 @@ static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_sp
rc = -ENODEV;
}
}
} else
rc = -ENODEV;
}
ibmphp_unlock_operations ();
debug ("%s - Exit rc[%d] value[%x]\n", __FUNCTION__, rc, *value);
......@@ -465,8 +434,7 @@ static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_sp
}
}
}
} else
rc = -ENODEV;
}
ibmphp_unlock_operations ();
debug ("%s - Exit rc[%d] value[%x]\n", __FUNCTION__, rc, *value);
......@@ -477,7 +445,6 @@ static int get_max_adapter_speed_1 (struct hotplug_slot *hotplug_slot, u8 * valu
{
int rc = -ENODEV;
struct slot *pslot;
int hpcrc = 0;
struct slot myslot;
debug ("get_max_adapter_speed_1 - Entry hotplug_slot[%lx] pvalue[%lx]\n", (ulong)hotplug_slot, (ulong) value);
......@@ -489,29 +456,21 @@ static int get_max_adapter_speed_1 (struct hotplug_slot *hotplug_slot, u8 * valu
pslot = (struct slot *) hotplug_slot->private;
if (pslot) {
memcpy ((void *) &myslot, (void *) pslot, sizeof (struct slot));
hpcrc = ibmphp_hpc_readslot (pslot, READ_SLOTSTATUS, &(myslot.status));
rc = ibmphp_hpc_readslot(pslot, READ_SLOTSTATUS, &(myslot.status));
if (!(SLOT_LATCH (myslot.status)) && (SLOT_PRESENT (myslot.status))) {
hpcrc = ibmphp_hpc_readslot (pslot, READ_EXTSLOTSTATUS, &(myslot.ext_status));
if (!hpcrc) {
rc = ibmphp_hpc_readslot(pslot, READ_EXTSLOTSTATUS, &(myslot.ext_status));
if (!rc)
*value = SLOT_SPEED (myslot.ext_status);
rc = 0;
}
} else {
} else
*value = MAX_ADAPTER_NONE;
rc = 0;
}
}
} else
rc = -ENODEV;
if (hpcrc)
rc = hpcrc;
}
if (flag)
ibmphp_unlock_operations ();
debug ("get_max_adapter_speed_1 - Exit rc[%d] hpcrc[%x] value[%x]\n", rc, hpcrc, *value);
debug("get_max_adapter_speed_1 - Exit rc[%d] value[%x]\n", rc, *value);
return rc;
}
......@@ -520,7 +479,7 @@ static int get_bus_name (struct hotplug_slot *hotplug_slot, char * value)
int rc = -ENODEV;
struct slot *pslot = NULL;
debug ("get_bus_name - Entry hotplug_slot[%lx] \n", (ulong)hotplug_slot);
debug ("get_bus_name - Entry hotplug_slot[%lx]\n", (ulong)hotplug_slot);
ibmphp_lock_operations ();
......@@ -654,7 +613,7 @@ int ibmphp_update_slot_info (struct slot *slot_cur)
info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL);
if (!info) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
......@@ -745,21 +704,20 @@ static void free_slots (void)
debug ("%s -- exit\n", __FUNCTION__);
}
static int ibm_unconfigure_device (struct pci_func *func)
static void ibm_unconfigure_device(struct pci_func *func)
{
struct pci_dev *temp;
u8 j;
debug ("inside %s\n", __FUNCTION__);
debug ("func->device = %x, func->function = %x\n", func->device, func->function);
debug ("func->device << 3 | 0x0 = %x\n", func->device << 3 | 0x0);
debug("inside %s\n", __FUNCTION__);
debug("func->device = %x, func->function = %x\n", func->device, func->function);
debug("func->device << 3 | 0x0 = %x\n", func->device << 3 | 0x0);
for (j = 0; j < 0x08; j++) {
temp = pci_find_slot (func->busno, (func->device << 3) | j);
temp = pci_find_slot(func->busno, (func->device << 3) | j);
if (temp)
pci_remove_bus_device(temp);
}
return 0;
}
/*
......@@ -794,7 +752,7 @@ static u8 bus_structure_fixup (u8 busno)
dev->bus = bus;
for (dev->devfn = 0; dev->devfn < 256; dev->devfn += 8) {
if (!pci_read_config_word (dev, PCI_VENDOR_ID, &l) && l != 0x0000 && l != 0xffff) {
debug ("%s - Inside bus_struture_fixup() \n", __FUNCTION__);
debug ("%s - Inside bus_struture_fixup()\n", __FUNCTION__);
pci_scan_bus (busno, ibmphp_pci_bus->ops, NULL);
break;
}
......@@ -829,7 +787,7 @@ static int ibm_configure_device (struct pci_func *func)
func->dev = pci_find_slot(func->busno, PCI_DEVFN(func->device, func->function));
if (func->dev == NULL) {
err ("ERROR... : pci_dev still NULL \n");
err ("ERROR... : pci_dev still NULL\n");
return 0;
}
}
......@@ -883,7 +841,7 @@ static int set_bus (struct slot * slot_cur)
struct pci_dev *dev = NULL;
int retval;
debug ("%s - entry slot # %d \n", __FUNCTION__, slot_cur->number);
debug ("%s - entry slot # %d\n", __FUNCTION__, slot_cur->number);
if (SET_BUS_STATUS (slot_cur->ctrl) && is_bus_empty (slot_cur)) {
rc = slot_update (&slot_cur);
if (rc)
......@@ -934,12 +892,12 @@ static int set_bus (struct slot * slot_cur)
cmd = HPC_BUS_133PCIXMODE;
break;
default:
err ("Wrong bus speed \n");
err ("Wrong bus speed\n");
return -ENODEV;
}
break;
default:
err ("wrong slot speed \n");
err ("wrong slot speed\n");
return -ENODEV;
}
debug ("setting bus speed for slot %d, cmd %x\n", slot_cur->number, cmd);
......@@ -949,14 +907,14 @@ static int set_bus (struct slot * slot_cur)
return retval;
}
if (CTLR_RESULT (slot_cur->ctrl->status)) {
err ("command not completed successfully in set_bus \n");
err ("command not completed successfully in set_bus\n");
return -EIO;
}
}
/* This is for x440, once Brandon fixes the firmware,
will not need this delay */
long_delay (1 * HZ);
debug ("%s -Exit \n", __FUNCTION__);
debug ("%s -Exit\n", __FUNCTION__);
return 0;
}
......@@ -1009,13 +967,13 @@ static inline void print_card_capability (struct slot *slot_cur)
{
info ("capability of the card is ");
if ((slot_cur->ext_status & CARD_INFO) == PCIX133)
info (" 133 MHz PCI-X \n");
info (" 133 MHz PCI-X\n");
else if ((slot_cur->ext_status & CARD_INFO) == PCIX66)
info (" 66 MHz PCI-X \n");
info (" 66 MHz PCI-X\n");
else if ((slot_cur->ext_status & CARD_INFO) == PCI66)
info (" 66 MHz PCI \n");
info (" 66 MHz PCI\n");
else
info (" 33 MHz PCI \n");
info (" 33 MHz PCI\n");
}
......@@ -1033,11 +991,11 @@ static int enable_slot (struct hotplug_slot *hs)
ibmphp_lock_operations ();
debug ("ENABLING SLOT........ \n");
debug ("ENABLING SLOT........\n");
slot_cur = (struct slot *) hs->private;
if ((rc = validate (slot_cur, ENABLE))) {
err ("validate function failed \n");
err ("validate function failed\n");
goto error_nopower;
}
......@@ -1045,13 +1003,13 @@ static int enable_slot (struct hotplug_slot *hs)
rc = set_bus (slot_cur);
if (rc) {
err ("was not able to set the bus \n");
err ("was not able to set the bus\n");
goto error_nopower;
}
/*-----------------debugging------------------------------*/
get_cur_bus_info (&slot_cur);
debug ("the current bus speed right after set_bus = %x \n", slot_cur->bus_on->current_speed);
debug ("the current bus speed right after set_bus = %x\n", slot_cur->bus_on->current_speed);
/*----------------------------------------------------------*/
rc = check_limitations (slot_cur);
......@@ -1059,7 +1017,7 @@ static int enable_slot (struct hotplug_slot *hs)
err ("Adding this card exceeds the limitations of this bus.\n");
err ("(i.e., >1 133MHz cards running on same bus, or "
">2 66 PCI cards running on same bus\n.");
err ("Try hot-adding into another bus \n");
err ("Try hot-adding into another bus\n");
rc = -EINVAL;
goto error_nopower;
}
......@@ -1079,12 +1037,12 @@ static int enable_slot (struct hotplug_slot *hs)
}
/* Check to see the error of why it failed */
if ((SLOT_POWER (slot_cur->status)) && !(SLOT_PWRGD (slot_cur->status)))
err ("power fault occurred trying to power up \n");
err ("power fault occurred trying to power up\n");
else if (SLOT_BUS_SPEED (slot_cur->status)) {
err ("bus speed mismatch occurred. please check current bus speed and card capability \n");
err ("bus speed mismatch occurred. please check current bus speed and card capability\n");
print_card_capability (slot_cur);
} else if (SLOT_BUS_MODE (slot_cur->ext_status)) {
err ("bus mode mismatch occurred. please check current bus mode and card capability \n");
err ("bus mode mismatch occurred. please check current bus mode and card capability\n");
print_card_capability (slot_cur);
}
ibmphp_update_slot_info (slot_cur);
......@@ -1093,7 +1051,7 @@ static int enable_slot (struct hotplug_slot *hs)
debug ("after power_on\n");
/*-----------------------debugging---------------------------*/
get_cur_bus_info (&slot_cur);
debug ("the current bus speed right after power_on = %x \n", slot_cur->bus_on->current_speed);
debug ("the current bus speed right after power_on = %x\n", slot_cur->bus_on->current_speed);
/*----------------------------------------------------------*/
rc = slot_update (&slot_cur);
......@@ -1102,17 +1060,17 @@ static int enable_slot (struct hotplug_slot *hs)
rc = -EINVAL;
if (SLOT_POWER (slot_cur->status) && !(SLOT_PWRGD (slot_cur->status))) {
err ("power fault occurred trying to power up... \n");
err ("power fault occurred trying to power up...\n");
goto error_power;
}
if (SLOT_POWER (slot_cur->status) && (SLOT_BUS_SPEED (slot_cur->status))) {
err ("bus speed mismatch occurred. please check current bus speed and card capability \n");
err ("bus speed mismatch occurred. please check current bus speed and card capability\n");
print_card_capability (slot_cur);
goto error_power;
}
/* Don't think this case will happen after above checks... but just in case, for paranoia sake */
if (!(SLOT_POWER (slot_cur->status))) {
err ("power on failed... \n");
err ("power on failed...\n");
goto error_power;
}
......@@ -1120,7 +1078,7 @@ static int enable_slot (struct hotplug_slot *hs)
if (!slot_cur->func) {
/* We cannot do update_slot_info here, since no memory for
* kmalloc n.e.ways, and update_slot_info allocates some */
err ("out of system memory \n");
err ("out of system memory\n");
rc = -ENOMEM;
goto error_power;
}
......@@ -1133,7 +1091,7 @@ static int enable_slot (struct hotplug_slot *hs)
debug ("b4 configure_card, slot_cur->bus = %x, slot_cur->device = %x\n", slot_cur->bus, slot_cur->device);
if (ibmphp_configure_card (slot_cur->func, slot_cur->number)) {
err ("configure_card was unsuccessful... \n");
err ("configure_card was unsuccessful...\n");
ibmphp_unconfigure_card (&slot_cur, 1); /* true because don't need to actually deallocate resources, just remove references */
debug ("after unconfigure_card\n");
slot_cur->func = NULL;
......@@ -1204,7 +1162,7 @@ int ibmphp_do_disable_slot (struct slot *slot_cur)
int rc;
u8 flag;
debug ("DISABLING SLOT... \n");
debug ("DISABLING SLOT...\n");
if ((slot_cur == NULL) || (slot_cur->ctrl == NULL)) {
return -ENODEV;
......@@ -1224,7 +1182,7 @@ int ibmphp_do_disable_slot (struct slot *slot_cur)
/* We need this for fncs's that were there on bootup */
slot_cur->func = (struct pci_func *) kmalloc (sizeof (struct pci_func), GFP_KERNEL);
if (!slot_cur->func) {
err ("out of system memory \n");
err ("out of system memory\n");
rc = -ENOMEM;
goto error;
}
......@@ -1233,12 +1191,7 @@ int ibmphp_do_disable_slot (struct slot *slot_cur)
slot_cur->func->device = slot_cur->device;
}
if ((rc = ibm_unconfigure_device (slot_cur->func))) {
err ("removing from kernel failed... \n");
err ("Please check to see if it was statically linked or is "
"in use otherwise. (perhaps the driver is not 'hot-removable')\n");
goto error;
}
ibm_unconfigure_device(slot_cur->func);
/* If we got here from latch suddenly opening on operating card or
a power fault, there's no power to the card, so cannot
......@@ -1306,15 +1259,15 @@ struct hotplug_slot_ops ibmphp_hotplug_slot_ops = {
static void ibmphp_unload (void)
{
free_slots ();
debug ("after slots \n");
debug ("after slots\n");
ibmphp_free_resources ();
debug ("after resources \n");
debug ("after resources\n");
ibmphp_free_bus_info_queue ();
debug ("after bus info \n");
debug ("after bus info\n");
ibmphp_free_ebda_hpc_queue ();
debug ("after ebda hpc \n");
debug ("after ebda hpc\n");
ibmphp_free_ebda_pci_rsrc_queue ();
debug ("after ebda pci rsrc \n");
debug ("after ebda pci rsrc\n");
kfree (ibmphp_pci_bus);
}
......
......@@ -89,36 +89,34 @@ static struct controller *alloc_ebda_hpc (u32 slot_count, u32 bus_count)
controller = kmalloc (sizeof (struct controller), GFP_KERNEL);
if (!controller)
return NULL;
goto error;
memset (controller, 0, sizeof (*controller));
slots = kmalloc (sizeof (struct ebda_hpc_slot) * slot_count, GFP_KERNEL);
if (!slots) {
kfree (controller);
return NULL;
}
if (!slots)
goto error_contr;
memset (slots, 0, sizeof (*slots) * slot_count);
controller->slots = slots;
buses = kmalloc (sizeof (struct ebda_hpc_bus) * bus_count, GFP_KERNEL);
if (!buses) {
kfree (controller->slots);
kfree (controller);
return NULL;
}
if (!buses)
goto error_slots;
memset (buses, 0, sizeof (*buses) * bus_count);
controller->buses = buses;
return controller;
error_slots:
kfree(controller->slots);
error_contr:
kfree(controller);
error:
return NULL;
}
static void free_ebda_hpc (struct controller *controller)
{
kfree (controller->slots);
controller->slots = NULL;
kfree (controller->buses);
controller->buses = NULL;
controller->ctrl_dev = NULL;
kfree (controller);
}
......@@ -171,7 +169,7 @@ static void print_lo_info (void)
{
struct rio_detail *ptr;
struct list_head *ptr1;
debug ("print_lo_info ---- \n");
debug ("print_lo_info ----\n");
list_for_each (ptr1, &rio_lo_head) {
ptr = list_entry (ptr1, struct rio_detail, rio_detail_list);
debug ("%s - rio_node_id = %x\n", __FUNCTION__, ptr->rio_node_id);
......@@ -188,7 +186,7 @@ static void print_vg_info (void)
{
struct rio_detail *ptr;
struct list_head *ptr1;
debug ("%s --- \n", __FUNCTION__);
debug ("%s ---\n", __FUNCTION__);
list_for_each (ptr1, &rio_vg_head) {
ptr = list_entry (ptr1, struct rio_detail, rio_detail_list);
debug ("%s - rio_node_id = %x\n", __FUNCTION__, ptr->rio_node_id);
......@@ -220,7 +218,7 @@ static void __init print_ibm_slot (void)
list_for_each (ptr1, &ibmphp_slot_head) {
ptr = list_entry (ptr1, struct slot, ibm_slot_list);
debug ("%s - slot_number: %x \n", __FUNCTION__, ptr->number);
debug ("%s - slot_number: %x\n", __FUNCTION__, ptr->number);
}
}
......@@ -228,13 +226,13 @@ static void __init print_opt_vg (void)
{
struct opt_rio *ptr;
struct list_head *ptr1;
debug ("%s --- \n", __FUNCTION__);
debug ("%s ---\n", __FUNCTION__);
list_for_each (ptr1, &opt_vg_head) {
ptr = list_entry (ptr1, struct opt_rio, opt_rio_list);
debug ("%s - rio_type %x \n", __FUNCTION__, ptr->rio_type);
debug ("%s - chassis_num: %x \n", __FUNCTION__, ptr->chassis_num);
debug ("%s - first_slot_num: %x \n", __FUNCTION__, ptr->first_slot_num);
debug ("%s - middle_num: %x \n", __FUNCTION__, ptr->middle_num);
debug ("%s - rio_type %x\n", __FUNCTION__, ptr->rio_type);
debug ("%s - chassis_num: %x\n", __FUNCTION__, ptr->chassis_num);
debug ("%s - first_slot_num: %x\n", __FUNCTION__, ptr->first_slot_num);
debug ("%s - middle_num: %x\n", __FUNCTION__, ptr->middle_num);
}
}
......@@ -286,7 +284,8 @@ static void __init print_ebda_hpc (void)
int __init ibmphp_access_ebda (void)
{
u8 format, num_ctlrs, rio_complete, hs_complete;
u16 ebda_seg, num_entries, next_offset, offset, blk_id, sub_addr, rc, re, rc_id, re_id, base;
u16 ebda_seg, num_entries, next_offset, offset, blk_id, sub_addr, re, rc_id, re_id, base;
int rc = 0;
rio_complete = 0;
......@@ -324,10 +323,8 @@ int __init ibmphp_access_ebda (void)
format = readb (io_mem + offset);
offset += 1;
if (format != 4) {
iounmap (io_mem);
return -ENODEV;
}
if (format != 4)
goto error_nodev;
debug ("hot blk format: %x\n", format);
/* hot swap sub blk */
base = offset;
......@@ -339,18 +336,16 @@ int __init ibmphp_access_ebda (void)
rc_id = readw (io_mem + sub_addr); /* sub blk id */
sub_addr += 2;
if (rc_id != 0x5243) {
iounmap (io_mem);
return -ENODEV;
}
if (rc_id != 0x5243)
goto error_nodev;
/* rc sub blk signature */
num_ctlrs = readb (io_mem + sub_addr);
sub_addr += 1;
hpc_list_ptr = alloc_ebda_hpc_list ();
if (!hpc_list_ptr) {
iounmap (io_mem);
return -ENOMEM;
rc = -ENOMEM;
goto out;
}
hpc_list_ptr->format = format;
hpc_list_ptr->num_ctlrs = num_ctlrs;
......@@ -361,16 +356,15 @@ int __init ibmphp_access_ebda (void)
debug ("offset of hpc data structure enteries: %x\n ", sub_addr);
sub_addr = base + re; /* re sub blk */
/* FIXME: rc is never used/checked */
rc = readw (io_mem + sub_addr); /* next sub blk */
sub_addr += 2;
re_id = readw (io_mem + sub_addr); /* sub blk id */
sub_addr += 2;
if (re_id != 0x5245) {
iounmap (io_mem);
return -ENODEV;
}
if (re_id != 0x5245)
goto error_nodev;
/* signature of re */
num_entries = readw (io_mem + sub_addr);
......@@ -378,8 +372,8 @@ int __init ibmphp_access_ebda (void)
sub_addr += 2; /* offset of RSRC_ENTRIES blk */
rsrc_list_ptr = alloc_ebda_rsrc_list ();
if (!rsrc_list_ptr ) {
iounmap (io_mem);
return -ENOMEM;
rc = -ENOMEM;
goto out;
}
rsrc_list_ptr->format = format;
rsrc_list_ptr->num_entries = num_entries;
......@@ -391,9 +385,8 @@ int __init ibmphp_access_ebda (void)
debug ("offset of rsrc data structure enteries: %x\n ", sub_addr);
hs_complete = 1;
}
/* found rio table */
else if (blk_id == 0x4752) {
} else {
/* found rio table, blk_id == 0x4752 */
debug ("now enter io table ---\n");
debug ("rio blk id: %x\n", blk_id);
......@@ -406,41 +399,36 @@ int __init ibmphp_access_ebda (void)
rio_table_ptr->riodev_count = readb (io_mem + offset + 2);
rio_table_ptr->offset = offset +3 ;
debug ("info about rio table hdr ---\n");
debug ("ver_num: %x\nscal_count: %x\nriodev_count: %x\noffset of rio table: %x\n ", rio_table_ptr->ver_num, rio_table_ptr->scal_count, rio_table_ptr->riodev_count, rio_table_ptr->offset);
debug("info about rio table hdr ---\n");
debug("ver_num: %x\nscal_count: %x\nriodev_count: %x\noffset of rio table: %x\n ",
rio_table_ptr->ver_num, rio_table_ptr->scal_count,
rio_table_ptr->riodev_count, rio_table_ptr->offset);
rio_complete = 1;
}
}
if (!hs_complete && !rio_complete) {
iounmap (io_mem);
return -ENODEV;
}
if (!hs_complete && !rio_complete)
goto error_nodev;
if (rio_table_ptr) {
if (rio_complete == 1 && rio_table_ptr->ver_num == 3) {
if (rio_complete && rio_table_ptr->ver_num == 3) {
rc = ebda_rio_table ();
if (rc) {
iounmap (io_mem);
return rc;
}
if (rc)
goto out;
}
}
rc = ebda_rsrc_controller ();
if (rc) {
iounmap (io_mem);
return rc;
}
if (rc)
goto out;
rc = ebda_rsrc_rsrc ();
if (rc) {
iounmap (io_mem);
return rc;
}
goto out;
error_nodev:
rc = -ENODEV;
out:
iounmap (io_mem);
return 0;
return rc;
}
/*
......@@ -670,7 +658,7 @@ static char *create_file_name (struct slot * slot_cur)
u8 flag = 0;
if (!slot_cur) {
err ("Structure passed is empty \n");
err ("Structure passed is empty\n");
return NULL;
}
......@@ -1269,14 +1257,14 @@ static int ibmphp_probe (struct pci_dev * dev, const struct pci_device_id *ids)
struct controller *ctrl;
struct list_head *tmp;
debug ("inside ibmphp_probe \n");
debug ("inside ibmphp_probe\n");
list_for_each (tmp, &ebda_hpc_head) {
ctrl = list_entry (tmp, struct controller, ebda_hpc_list);
if (ctrl->ctlr_type == 1) {
if ((dev->devfn == ctrl->u.pci_ctlr.dev_fun) && (dev->bus->number == ctrl->u.pci_ctlr.bus)) {
ctrl->ctrl_dev = dev;
debug ("found device!!! \n");
debug ("found device!!!\n");
debug ("dev->device = %x, dev->subsystem_device = %x\n", dev->device, dev->subsystem_device);
return 0;
}
......
......@@ -49,7 +49,7 @@ static u8 find_sec_number (u8 primary_busno, u8 slotno);
*/
static void assign_alt_irq (struct pci_func * cur_func, u8 class_code)
{
int j = 0;
int j;
for (j = 0; j < 4; j++) {
if (cur_func->irq[j] == 0xff) {
switch (class_code) {
......@@ -92,7 +92,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
u8 flag;
u8 valid_device = 0x00; /* to see if we are able to read from card any device info at all */
debug ("inside configure_card, func->busno = %x \n", func->busno);
debug ("inside configure_card, func->busno = %x\n", func->busno);
device = func->device;
cur_func = func;
......@@ -130,7 +130,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
pci_bus_read_config_dword (ibmphp_pci_bus, devfn, PCI_CLASS_REVISION, &class);
class_code = class >> 24;
debug ("hrd_type = %x, class = %x, class_code %x \n", hdr_type, class, class_code);
debug ("hrd_type = %x, class = %x, class_code %x\n", hdr_type, class, class_code);
class >>= 8; /* to take revision out, class = class.subclass.prog i/f */
if (class == PCI_CLASS_NOT_DEFINED_VGA) {
err ("The device %x is VGA compatible and as is not supported for hot plugging. "
......@@ -147,7 +147,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
assign_alt_irq (cur_func, class_code);
if ((rc = configure_device (cur_func)) < 0) {
/* We need to do this in case some other BARs were properly inserted */
err ("was not able to configure devfunc %x on bus %x. \n",
err ("was not able to configure devfunc %x on bus %x.\n",
cur_func->device, cur_func->busno);
cleanup_count = 6;
goto error;
......@@ -166,7 +166,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
}
newfunc = (struct pci_func *) kmalloc (sizeof (struct pci_func), GFP_KERNEL);
if (!newfunc) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (newfunc, 0, sizeof (struct pci_func));
......@@ -188,7 +188,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
rc = configure_bridge (&cur_func, slotno);
if (rc == -ENODEV) {
err ("You chose to insert Single Bridge, or nested bridges, this is not supported...\n");
err ("Bus %x, devfunc %x \n", cur_func->busno, cur_func->device);
err ("Bus %x, devfunc %x\n", cur_func->busno, cur_func->device);
return rc;
}
if (rc) {
......@@ -205,7 +205,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
if (func->devices[i]) {
newfunc = (struct pci_func *) kmalloc (sizeof (struct pci_func), GFP_KERNEL);
if (!newfunc) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (newfunc, 0, sizeof (struct pci_func));
......@@ -234,7 +234,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
newfunc = (struct pci_func *) kmalloc (sizeof (struct pci_func), GFP_KERNEL);
if (!newfunc) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (newfunc, 0, sizeof (struct pci_func));
......@@ -261,7 +261,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
rc = configure_bridge (&cur_func, slotno);
if (rc == -ENODEV) {
err ("You chose to insert Single Bridge, or nested bridges, this is not supported...\n");
err ("Bus %x, devfunc %x \n", cur_func->busno, cur_func->device);
err ("Bus %x, devfunc %x\n", cur_func->busno, cur_func->device);
return rc;
}
if (rc) {
......@@ -281,7 +281,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
debug ("inside for loop, device is %x\n", i);
newfunc = (struct pci_func *) kmalloc (sizeof (struct pci_func), GFP_KERNEL);
if (!newfunc) {
err (" out of system memory \n");
err (" out of system memory\n");
return -ENOMEM;
}
memset (newfunc, 0, sizeof (struct pci_func));
......@@ -408,7 +408,7 @@ static int configure_device (struct pci_func *func)
io[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!io[count]) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (io[count], 0, sizeof (struct resource_node));
......@@ -446,7 +446,7 @@ static int configure_device (struct pci_func *func)
pfmem[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!pfmem[count]) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (pfmem[count], 0, sizeof (struct resource_node));
......@@ -461,7 +461,7 @@ static int configure_device (struct pci_func *func)
} else {
mem_tmp = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!mem_tmp) {
err ("out of system memory \n");
err ("out of system memory\n");
kfree (pfmem[count]);
return -ENOMEM;
}
......@@ -513,7 +513,7 @@ static int configure_device (struct pci_func *func)
mem[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!mem[count]) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (mem[count], 0, sizeof (struct resource_node));
......@@ -620,7 +620,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
/* in EBDA, only get allocated 1 additional bus # per slot */
sec_number = find_sec_number (func->busno, slotno);
if (sec_number == 0xff) {
err ("cannot allocate secondary bus number for the bridged device \n");
err ("cannot allocate secondary bus number for the bridged device\n");
return -EINVAL;
}
......@@ -678,7 +678,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
bus_io[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!bus_io[count]) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -710,7 +710,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
bus_pfmem[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!bus_pfmem[count]) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -726,7 +726,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
} else {
mem_tmp = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!mem_tmp) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -768,7 +768,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
bus_mem[count] = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!bus_mem[count]) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -813,7 +813,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
debug ("amount_needed->pfmem = %x\n", amount_needed->pfmem);
if (amount_needed->not_correct) {
debug ("amount_needed is not correct \n");
debug ("amount_needed is not correct\n");
for (count = 0; address[count]; count++) {
/* for 2 BARs */
if (bus_io[count]) {
......@@ -835,11 +835,11 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
debug ("it doesn't want IO?\n");
flag_io = TRUE;
} else {
debug ("it wants %x IO behind the bridge \n", amount_needed->io);
debug ("it wants %x IO behind the bridge\n", amount_needed->io);
io = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!io) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -862,7 +862,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
debug ("it wants %x memory behind the bridge\n", amount_needed->mem);
mem = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!mem) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -885,7 +885,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
debug ("it wants %x pfmemory behind the bridge\n", amount_needed->pfmem);
pfmem = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!pfmem) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -901,7 +901,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
} else {
mem_tmp = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!mem_tmp) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -933,7 +933,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
if (!bus) {
bus = kmalloc (sizeof (struct bus_node), GFP_KERNEL);
if (!bus) {
err ("out of system memory \n");
err ("out of system memory\n");
retval = -ENOMEM;
goto error;
}
......@@ -944,7 +944,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
} else if (!(bus->rangeIO) && !(bus->rangeMem) && !(bus->rangePFMem))
rc = add_new_bus (bus, io, mem, pfmem, 0xFF);
else {
err ("expected bus structure not empty? \n");
err ("expected bus structure not empty?\n");
retval = -EIO;
goto error;
}
......@@ -1050,7 +1050,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
kfree (amount_needed);
return 0;
} else {
err ("Configuring bridge was unsuccessful... \n");
err ("Configuring bridge was unsuccessful...\n");
mem_tmp = NULL;
retval = -EIO;
goto error;
......@@ -1171,7 +1171,7 @@ static struct res_needed *scan_behind_bridge (struct pci_func * func, u8 busno)
//tmp_bar = bar[count];
debug ("count %d device %x function %x wants %x resources \n", count, device, function, bar[count]);
debug ("count %d device %x function %x wants %x resources\n", count, device, function, bar[count]);
if (bar[count] & PCI_BASE_ADDRESS_SPACE_IO) {
/* This is IO */
......@@ -1522,7 +1522,7 @@ static int unconfigure_boot_card (struct slot *slot_cur)
case PCI_HEADER_TYPE_NORMAL:
rc = unconfigure_boot_device (busno, device, function);
if (rc) {
err ("was not able to unconfigure device %x func %x on bus %x. bailing out... \n",
err ("was not able to unconfigure device %x func %x on bus %x. bailing out...\n",
device, function, busno);
return rc;
}
......@@ -1531,7 +1531,7 @@ static int unconfigure_boot_card (struct slot *slot_cur)
case PCI_HEADER_TYPE_MULTIDEVICE:
rc = unconfigure_boot_device (busno, device, function);
if (rc) {
err ("was not able to unconfigure device %x func %x on bus %x. bailing out... \n",
err ("was not able to unconfigure device %x func %x on bus %x. bailing out...\n",
device, function, busno);
return rc;
}
......@@ -1567,7 +1567,7 @@ static int unconfigure_boot_card (struct slot *slot_cur)
}
break;
default:
err ("MAJOR PROBLEM!!!! Cannot read device's header \n");
err ("MAJOR PROBLEM!!!! Cannot read device's header\n");
return -1;
break;
} /* end of switch */
......@@ -1575,7 +1575,7 @@ static int unconfigure_boot_card (struct slot *slot_cur)
} /* end of for */
if (!valid_device) {
err ("Could not find device to unconfigure. Or could not read the card. \n");
err ("Could not find device to unconfigure. Or could not read the card.\n");
return -1;
}
return 0;
......@@ -1623,19 +1623,19 @@ int ibmphp_unconfigure_card (struct slot **slot_cur, int the_end)
for (i = 0; i < count; i++) {
if (cur_func->io[i]) {
debug ("io[%d] exists \n", i);
debug ("io[%d] exists\n", i);
if (the_end > 0)
ibmphp_remove_resource (cur_func->io[i]);
cur_func->io[i] = NULL;
}
if (cur_func->mem[i]) {
debug ("mem[%d] exists \n", i);
debug ("mem[%d] exists\n", i);
if (the_end > 0)
ibmphp_remove_resource (cur_func->mem[i]);
cur_func->mem[i] = NULL;
}
if (cur_func->pfmem[i]) {
debug ("pfmem[%d] exists \n", i);
debug ("pfmem[%d] exists\n", i);
if (the_end > 0)
ibmphp_remove_resource (cur_func->pfmem[i]);
cur_func->pfmem[i] = NULL;
......@@ -1682,7 +1682,7 @@ static int add_new_bus (struct bus_node *bus, struct resource_node *io, struct r
if (io) {
io_range = kmalloc (sizeof (struct range_node), GFP_KERNEL);
if (!io_range) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (io_range, 0, sizeof (struct range_node));
......@@ -1695,7 +1695,7 @@ static int add_new_bus (struct bus_node *bus, struct resource_node *io, struct r
if (mem) {
mem_range = kmalloc (sizeof (struct range_node), GFP_KERNEL);
if (!mem_range) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (mem_range, 0, sizeof (struct range_node));
......@@ -1708,7 +1708,7 @@ static int add_new_bus (struct bus_node *bus, struct resource_node *io, struct r
if (pfmem) {
pfmem_range = kmalloc (sizeof (struct range_node), GFP_KERNEL);
if (!pfmem_range) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (pfmem_range, 0, sizeof (struct range_node));
......
......@@ -52,13 +52,13 @@ static struct bus_node * __init alloc_error_bus (struct ebda_pci_rsrc * curr, u8
struct bus_node * newbus;
if (!(curr) && !(flag)) {
err ("NULL pointer passed \n");
err ("NULL pointer passed\n");
return NULL;
}
newbus = kmalloc (sizeof (struct bus_node), GFP_KERNEL);
if (!newbus) {
err ("out of system memory \n");
err ("out of system memory\n");
return NULL;
}
......@@ -76,13 +76,13 @@ static struct resource_node * __init alloc_resources (struct ebda_pci_rsrc * cur
struct resource_node *rs;
if (!curr) {
err ("NULL passed to allocate \n");
err ("NULL passed to allocate\n");
return NULL;
}
rs = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!rs) {
err ("out of system memory \n");
err ("out of system memory\n");
return NULL;
}
memset (rs, 0, sizeof (struct resource_node));
......@@ -103,7 +103,7 @@ static int __init alloc_bus_range (struct bus_node **new_bus, struct range_node
if (first_bus) {
newbus = kmalloc (sizeof (struct bus_node), GFP_KERNEL);
if (!newbus) {
err ("out of system memory. \n");
err ("out of system memory.\n");
return -ENOMEM;
}
memset (newbus, 0, sizeof (struct bus_node));
......@@ -127,7 +127,7 @@ static int __init alloc_bus_range (struct bus_node **new_bus, struct range_node
if (!newrange) {
if (first_bus)
kfree (newbus);
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (newrange, 0, sizeof (struct range_node));
......@@ -607,7 +607,7 @@ int ibmphp_add_resource (struct resource_node *res)
debug ("%s - enter\n", __FUNCTION__);
if (!res) {
err ("NULL passed to add \n");
err ("NULL passed to add\n");
return -ENODEV;
}
......@@ -634,7 +634,7 @@ int ibmphp_add_resource (struct resource_node *res)
res_start = bus_cur->firstPFMem;
break;
default:
err ("cannot read the type of the resource to add... problem \n");
err ("cannot read the type of the resource to add... problem\n");
return -EINVAL;
}
while (range_cur) {
......@@ -787,7 +787,7 @@ int ibmphp_remove_resource (struct resource_node *res)
char * type = "";
if (!res) {
err ("resource to remove is NULL \n");
err ("resource to remove is NULL\n");
return -ENODEV;
}
......@@ -813,7 +813,7 @@ int ibmphp_remove_resource (struct resource_node *res)
type = "pfmem";
break;
default:
err ("unknown type for resource to remove \n");
err ("unknown type for resource to remove\n");
return -EINVAL;
}
res_prev = NULL;
......@@ -954,7 +954,7 @@ static struct range_node * find_range (struct bus_node *bus_cur, struct resource
range = bus_cur->rangePFMem;
break;
default:
err ("cannot read resource type in find_range \n");
err ("cannot read resource type in find_range\n");
}
while (range) {
......@@ -1002,7 +1002,7 @@ int ibmphp_check_resource (struct resource_node *res, u8 bridge)
if (!bus_cur) {
/* didn't find a bus, smth's wrong!!! */
debug ("no bus in the system, either pci_dev's wrong or allocation failed \n");
debug ("no bus in the system, either pci_dev's wrong or allocation failed\n");
return -EINVAL;
}
......@@ -1027,7 +1027,7 @@ int ibmphp_check_resource (struct resource_node *res, u8 bridge)
noranges = bus_cur->noPFMemRanges;
break;
default:
err ("wrong type of resource to check \n");
err ("wrong type of resource to check\n");
return -EINVAL;
}
res_prev = NULL;
......@@ -1496,7 +1496,7 @@ int ibmphp_find_resource (struct bus_node *bus, u32 start_address, struct resour
char * type = "";
if (!bus) {
err ("The bus passed in NULL to find resource \n");
err ("The bus passed in NULL to find resource\n");
return -ENODEV;
}
......@@ -1514,7 +1514,7 @@ int ibmphp_find_resource (struct bus_node *bus, u32 start_address, struct resour
type = "pfmem";
break;
default:
err ("wrong type of flag \n");
err ("wrong type of flag\n");
return -EINVAL;
}
......@@ -1540,17 +1540,17 @@ int ibmphp_find_resource (struct bus_node *bus, u32 start_address, struct resour
res_cur = res_cur->next;
}
if (!res_cur) {
debug ("SOS...cannot find %s resource in the bus. \n", type);
debug ("SOS...cannot find %s resource in the bus.\n", type);
return -EINVAL;
}
} else {
debug ("SOS... cannot find %s resource in the bus. \n", type);
debug ("SOS... cannot find %s resource in the bus.\n", type);
return -EINVAL;
}
}
if (*res)
debug ("*res->start = %x \n", (*res)->start);
debug ("*res->start = %x\n", (*res)->start);
return 0;
}
......@@ -1708,7 +1708,7 @@ static int __init once_over (void)
mem = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!mem) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (mem, 0, sizeof (struct resource_node));
......@@ -1792,7 +1792,7 @@ void ibmphp_print_test (void)
list_for_each (tmp, &gbuses) {
bus_cur = list_entry (tmp, struct bus_node, bus_list);
debug_pci ("This is bus # %d. There are \n", bus_cur->busno);
debug_pci ("This is bus # %d. There are\n", bus_cur->busno);
debug_pci ("IORanges = %d\t", bus_cur->noIORanges);
debug_pci ("MemRanges = %d\t", bus_cur->noMemRanges);
debug_pci ("PFMemRanges = %d\n", bus_cur->noPFMemRanges);
......@@ -1903,7 +1903,7 @@ static int range_exists_already (struct range_node * range, struct bus_node * bu
range_cur = bus_cur->rangePFMem;
break;
default:
err ("wrong type passed to find out if range already exists \n");
err ("wrong type passed to find out if range already exists\n");
return -ENODEV;
}
......@@ -1948,7 +1948,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
return -ENODEV;
ibmphp_pci_bus->number = bus_cur->busno;
debug ("inside %s \n", __FUNCTION__);
debug ("inside %s\n", __FUNCTION__);
debug ("bus_cur->busno = %x\n", bus_cur->busno);
for (device = 0; device < 32; device++) {
......@@ -1997,7 +1997,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
if ((start_address) && (start_address <= end_address)) {
range = kmalloc (sizeof (struct range_node), GFP_KERNEL);
if (!range) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (range, 0, sizeof (struct range_node));
......@@ -2024,7 +2024,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
io = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!io) {
kfree (range);
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (io, 0, sizeof (struct resource_node));
......@@ -2048,7 +2048,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
range = kmalloc (sizeof (struct range_node), GFP_KERNEL);
if (!range) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (range, 0, sizeof (struct range_node));
......@@ -2076,7 +2076,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
mem = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!mem) {
kfree (range);
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (mem, 0, sizeof (struct resource_node));
......@@ -2104,7 +2104,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
range = kmalloc (sizeof (struct range_node), GFP_KERNEL);
if (!range) {
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (range, 0, sizeof (struct range_node));
......@@ -2131,7 +2131,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
pfmem = kmalloc (sizeof (struct resource_node), GFP_KERNEL);
if (!pfmem) {
kfree (range);
err ("out of system memory \n");
err ("out of system memory\n");
return -ENOMEM;
}
memset (pfmem, 0, sizeof (struct resource_node));
......
......@@ -19,9 +19,8 @@
#include <asm/io_apic.h>
#include <mach_apic.h>
#include <linux/pci_msi.h>
#include "msi.h"
_DEFINE_DBG_BUFFER
static spinlock_t msi_lock = SPIN_LOCK_UNLOCKED;
static struct msi_desc* msi_desc[NR_IRQS] = { [0 ... NR_IRQS-1] = NULL };
......
/*
* ../include/linux/pci_msi.h
* msi.h
*
*/
#ifndef _ASM_PCI_MSI_H
#define _ASM_PCI_MSI_H
#include <linux/pci.h>
#ifndef MSI_H
#define MSI_H
#define MSI_AUTO -1
#define NR_REPEATS 23
......@@ -82,29 +80,6 @@ extern void restore_ioapic_irq_handler(int irq);
#define msix_mask(address) (address | PCI_MSIX_FLAGS_BITMASK)
#define msix_is_pending(address) (address & PCI_MSIX_FLAGS_PENDMASK)
extern char __dbg_str_buf[256];
#define _DEFINE_DBG_BUFFER char __dbg_str_buf[256];
#define _DBG_K_TRACE_ENTRY ((unsigned int)0x00000001)
#define _DBG_K_TRACE_EXIT ((unsigned int)0x00000002)
#define _DBG_K_INFO ((unsigned int)0x00000004)
#define _DBG_K_ERROR ((unsigned int)0x00000008)
#define _DBG_K_TRACE (_DBG_K_TRACE_ENTRY | _DBG_K_TRACE_EXIT)
#define _DEBUG_LEVEL (_DBG_K_INFO | _DBG_K_ERROR | _DBG_K_TRACE)
#define _DBG_PRINT( dbg_flags, args... ) \
if ( _DEBUG_LEVEL & (dbg_flags) ) \
{ \
int len; \
len = sprintf(__dbg_str_buf, "%s:%d: %s ", \
__FILE__, __LINE__, __FUNCTION__ ); \
sprintf(__dbg_str_buf + len, args); \
printk(KERN_INFO "%s\n", __dbg_str_buf); \
}
#define MSI_FUNCTION_TRACE_ENTER \
_DBG_PRINT (_DBG_K_TRACE_ENTRY, "%s", "[Entry]");
#define MSI_FUNCTION_TRACE_EXIT \
_DBG_PRINT (_DBG_K_TRACE_EXIT, "%s", "[Entry]");
/*
* MSI Defined Data Structures
......@@ -190,4 +165,4 @@ struct msi_desc {
struct pci_dev *dev;
};
#endif /* _ASM_PCI_MSI_H */
#endif /* MSI_H */
......@@ -241,7 +241,7 @@ pci_device_probe_static(struct pci_driver *drv, struct pci_dev *pci_dev)
error = drv->probe(pci_dev, id);
if (error >= 0) {
pci_dev->driver = drv;
return 0;
error = 0;
}
return error;
}
......
......@@ -5871,6 +5871,11 @@
14f1 2004 Dynalink 56PMi
8234 RS8234 ATM SAR Controller [ServiceSAR Plus]
14f2 MOBILITY Electronics
0120 EV1000 bridge
0121 EV1000 Parallel port
0122 EV1000 Serial port
0123 EV1000 Keyboard controller
0124 EV1000 Mouse controller
14f3 BROADLOGIC
14f4 TOKYO Electronic Industry CO Ltd
14f5 SOPAC Ltd
......@@ -6667,6 +6672,9 @@
1040 536EP Data Fax Modem
16be 1040 V.9X DSP Data Fax Modem
1043 PRO/Wireless LAN 2100 3B Mini PCI Adapter
1048 82597EX 10GbE Ethernet Controller
8086 a01f PRO/10GbE LR Server Adapter
8086 a11f PRO/10GbE LR Server Adapter
1059 82551QM Ethernet Controller
1130 82815 815 Chipset Host Bridge and Memory Controller Hub
1025 1016 Travelmate 612 TX
......
......@@ -456,8 +456,6 @@ static int pci_setup_device(struct pci_dev * dev)
sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn));
INIT_LIST_HEAD(&dev->pools);
pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
class >>= 8; /* upper 3 bytes */
dev->class = class;
......
......@@ -83,7 +83,7 @@ void pci_remove_bus_device(struct pci_dev *dev)
list_del(&b->node);
spin_unlock(&pci_bus_lock);
kfree(b);
class_device_unregister(&b->class_dev);
dev->subordinate = NULL;
}
......
......@@ -43,20 +43,12 @@
#define FL_BASE4 0x0004
#define FL_GET_BASE(x) (x & FL_BASE_MASK)
#define FL_IRQ_MASK (0x0007 << 4)
#define FL_IRQBASE0 (0x0000 << 4)
#define FL_IRQBASE1 (0x0001 << 4)
#define FL_IRQBASE2 (0x0002 << 4)
#define FL_IRQBASE3 (0x0003 << 4)
#define FL_IRQBASE4 (0x0004 << 4)
#define FL_GET_IRQBASE(x) ((x & FL_IRQ_MASK) >> 4)
/* Use successive BARs (PCI base address registers),
else use offset into some specified BAR */
#define FL_BASE_BARS 0x0008
/* Use the irq resource table instead of dev->irq */
#define FL_IRQRESOURCE 0x0080
/* do not assign an irq */
#define FL_NOIRQ 0x0080
/* Use the Base address register size to cap number of ports */
#define FL_REGION_SZ_CAP 0x0100
......@@ -850,17 +842,10 @@ static struct pci_serial_quirk *find_quirk(struct pci_dev *dev)
static _INLINE_ int
get_pci_irq(struct pci_dev *dev, struct pci_board *board, int idx)
{
int base_idx;
if ((board->flags & FL_IRQRESOURCE) == 0)
return dev->irq;
base_idx = FL_GET_IRQBASE(board->flags);
if (base_idx > DEVICE_COUNT_IRQ)
if (board->flags & FL_NOIRQ)
return 0;
return dev->irq_resource[base_idx].start;
else
return dev->irq;
}
/*
......@@ -1314,7 +1299,7 @@ static struct pci_board pci_boards[] __devinitdata = {
.first_offset = 0x10000,
},
[pbn_sgi_ioc3] = {
.flags = FL_BASE0|FL_IRQRESOURCE,
.flags = FL_BASE0|FL_NOIRQ,
.num_ports = 1,
.base_baud = 458333,
.uart_offset = 8,
......
......@@ -284,6 +284,7 @@ struct device {
detached from its driver. */
u64 *dma_mask; /* dma mask (if dma'able device) */
struct list_head dma_pools; /* dma pools (if dma'ble) */
void (*release)(struct device * dev);
};
......
/*
* include/linux/dmapool.h
*
* Allocation pools for DMAable (coherent) memory.
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without any
* warranty of any kind, whether express or implied.
*/
#ifndef LINUX_DMAPOOL_H
#define LINUX_DMAPOOL_H
#include <asm/io.h>
#include <asm/scatterlist.h>
struct dma_pool *dma_pool_create(const char *name, struct device *dev,
size_t size, size_t align, size_t allocation);
void dma_pool_destroy(struct dma_pool *pool);
void *dma_pool_alloc(struct dma_pool *pool, int mem_flags, dma_addr_t *handle);
void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr);
#endif
......@@ -393,7 +393,6 @@ struct pci_dev {
0xffffffff. You only need to change
this if your device has broken DMA
or supports 64-bit transfers. */
struct list_head pools; /* pci_pools tied to this device */
u64 consistent_dma_mask;/* Like dma_mask, but for
pci_alloc_consistent mappings as
......@@ -416,8 +415,6 @@ struct pci_dev {
*/
unsigned int irq;
struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */
struct resource dma_resource[DEVICE_COUNT_DMA];
struct resource irq_resource[DEVICE_COUNT_IRQ];
char * slot_name; /* pointer to dev.bus_id */
......@@ -694,12 +691,15 @@ const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, co
int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass);
/* kmem_cache style wrapper around pci_alloc_consistent() */
struct pci_pool *pci_pool_create (const char *name, struct pci_dev *dev,
size_t size, size_t align, size_t allocation);
void pci_pool_destroy (struct pci_pool *pool);
void *pci_pool_alloc (struct pci_pool *pool, int flags, dma_addr_t *handle);
void pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t addr);
#include <linux/dmapool.h>
#define pci_pool dma_pool
#define pci_pool_create(name, pdev, size, align, allocation) \
dma_pool_create(name, &pdev->dev, size, align, allocation)
#define pci_pool_destroy(pool) dma_pool_destroy(pool)
#define pci_pool_alloc(pool, flags, handle) dma_pool_alloc(pool, flags, handle)
#define pci_pool_free(pool, vaddr, addr) dma_pool_free(pool, vaddr, addr)
#if defined(CONFIG_ISA) || defined(CONFIG_EISA)
extern struct pci_dev *isa_bridge;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment