ChangeSet 1.1557.49.17, 2004/02/17 17:16:30-08:00, dsaxena@plexity.net [PATCH] USB: Fix USB host code to use generic DMA API drivers/usb/core/buffer.c | 23 ++++++++++++-------- drivers/usb/core/hcd-pci.c | 31 ++++++++++++++-------------- drivers/usb/core/hcd.c | 38 ++++++++++++++++++---------------- drivers/usb/core/hcd.h | 7 +----- drivers/usb/host/ehci-dbg.c | 10 ++++----- drivers/usb/host/ehci-hcd.c | 18 +++++++++------- drivers/usb/host/ehci-mem.c | 40 ++++++++++++++++++++---------------- drivers/usb/host/ehci-q.c | 2 - drivers/usb/host/ehci-sched.c | 4 +-- drivers/usb/host/ehci.h | 10 ++++----- drivers/usb/host/ohci-hcd.c | 8 +++++-- drivers/usb/host/ohci-mem.c | 20 +++++++++--------- drivers/usb/host/ohci-omap.c | 12 +++------- drivers/usb/host/ohci-pci.c | 45 +++++++++++++++++++++-------------------- drivers/usb/host/ohci-q.c | 4 +-- drivers/usb/host/ohci-sa1111.c | 16 +++++--------- drivers/usb/host/ohci.h | 12 +++++----- drivers/usb/host/uhci-hcd.c | 45 ++++++++++++++++++++++------------------- drivers/usb/host/uhci-hcd.h | 4 +-- 19 files changed, 182 insertions(+), 167 deletions(-) diff -Nru a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c --- a/drivers/usb/core/buffer.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/core/buffer.c Thu Feb 19 17:21:42 2004 @@ -2,14 +2,19 @@ * DMA memory management for framework level HCD code (hc_driver) * * This implementation plugs in through generic "usb_bus" level methods, - * and works with real PCI, or when "pci device == null" makes sense. + * and should work with all USB controllers, regardles of bus type. */ #include #include #include #include -#include +#include +#include +#include +#include +#include +#include #ifdef CONFIG_USB_DEBUG @@ -62,7 +67,7 @@ if (!(size = pool_max [i])) continue; snprintf (name, sizeof name, "buffer-%d", size); - hcd->pool [i] = pci_pool_create (name, hcd->pdev, + hcd->pool [i] = dma_pool_create (name, hcd->self.controller, size, size, 0); if (!hcd->pool [i]) { hcd_buffer_destroy (hcd); @@ -86,9 +91,9 @@ int i; for (i = 0; i < HCD_BUFFER_POOLS; i++) { - struct pci_pool *pool = hcd->pool [i]; + struct dma_pool *pool = hcd->pool [i]; if (pool) { - pci_pool_destroy (pool); + dma_pool_destroy (pool); hcd->pool [i] = 0; } } @@ -112,9 +117,9 @@ for (i = 0; i < HCD_BUFFER_POOLS; i++) { if (size <= pool_max [i]) - return pci_pool_alloc (hcd->pool [i], mem_flags, dma); + return dma_pool_alloc (hcd->pool [i], mem_flags, dma); } - return pci_alloc_consistent (hcd->pdev, size, dma); + return dma_alloc_coherent (hcd->self.controller, size, dma, 0); } void hcd_buffer_free ( @@ -131,9 +136,9 @@ return; for (i = 0; i < HCD_BUFFER_POOLS; i++) { if (size <= pool_max [i]) { - pci_pool_free (hcd->pool [i], addr, dma); + dma_pool_free (hcd->pool [i], addr, dma); return; } } - pci_free_consistent (hcd->pdev, size, addr, dma); + dma_free_coherent (hcd->self.controller, size, addr, dma); } diff -Nru a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c --- a/drivers/usb/core/hcd-pci.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/core/hcd-pci.c Thu Feb 19 17:21:42 2004 @@ -146,12 +146,10 @@ pci_set_drvdata (dev, hcd); hcd->driver = driver; hcd->description = driver->description; - hcd->pdev = dev; hcd->self.bus_name = pci_name(dev); if (hcd->product_desc == NULL) hcd->product_desc = "USB Host Controller"; hcd->self.controller = &dev->dev; - hcd->controller = hcd->self.controller; if ((retval = hcd_buffer_create (hcd)) != 0) { clean_3: @@ -159,11 +157,11 @@ goto clean_2; } - dev_info (hcd->controller, "%s\n", hcd->product_desc); + dev_info (hcd->self.controller, "%s\n", hcd->product_desc); /* till now HC has been in an indeterminate state ... */ if (driver->reset && (retval = driver->reset (hcd)) < 0) { - dev_err (hcd->controller, "can't reset\n"); + dev_err (hcd->self.controller, "can't reset\n"); goto clean_3; } hcd->state = USB_STATE_HALT; @@ -177,13 +175,13 @@ retval = request_irq (dev->irq, usb_hcd_irq, SA_SHIRQ, hcd->description, hcd); if (retval != 0) { - dev_err (hcd->controller, + dev_err (hcd->self.controller, "request interrupt %s failed\n", bufp); goto clean_3; } hcd->irq = dev->irq; - dev_info (hcd->controller, "irq %s, %s %p\n", bufp, + dev_info (hcd->self.controller, "irq %s, %s %p\n", bufp, (driver->flags & HCD_MEMORY) ? "pci mem" : "io base", base); @@ -226,7 +224,7 @@ hcd = pci_get_drvdata(dev); if (!hcd) return; - dev_info (hcd->controller, "remove, state %x\n", hcd->state); + dev_info (hcd->self.controller, "remove, state %x\n", hcd->state); if (in_interrupt ()) BUG (); @@ -235,7 +233,7 @@ if (HCD_IS_RUNNING (hcd->state)) hcd->state = USB_STATE_QUIESCING; - dev_dbg (hcd->controller, "roothub graceful disconnect\n"); + dev_dbg (hcd->self.controller, "roothub graceful disconnect\n"); usb_disconnect (&hub); hcd->driver->stop (hcd); @@ -273,15 +271,15 @@ int retval = 0; hcd = pci_get_drvdata(dev); - dev_dbg (hcd->controller, "suspend D%d --> D%d\n", + dev_dbg (hcd->self.controller, "suspend D%d --> D%d\n", dev->current_state, state); switch (hcd->state) { case USB_STATE_HALT: - dev_dbg (hcd->controller, "halted; hcd not suspended\n"); + dev_dbg (hcd->self.controller, "halted; hcd not suspended\n"); break; case USB_STATE_SUSPENDED: - dev_dbg (hcd->controller, "hcd already suspended\n"); + dev_dbg (hcd->self.controller, "hcd already suspended\n"); break; default: /* remote wakeup needs hub->suspend() cooperation */ @@ -293,7 +291,8 @@ hcd->state = USB_STATE_QUIESCING; retval = hcd->driver->suspend (hcd, state); if (retval) - dev_dbg (hcd->controller, "suspend fail, retval %d\n", + dev_dbg (hcd->self.controller, + "suspend fail, retval %d\n", retval); else hcd->state = USB_STATE_SUSPENDED; @@ -316,11 +315,12 @@ int retval; hcd = pci_get_drvdata(dev); - dev_dbg (hcd->controller, "resume from state D%d\n", + dev_dbg (hcd->self.controller, "resume from state D%d\n", dev->current_state); if (hcd->state != USB_STATE_SUSPENDED) { - dev_dbg (hcd->controller, "can't resume, not suspended!\n"); + dev_dbg (hcd->self.controller, + "can't resume, not suspended!\n"); return -EL3HLT; } hcd->state = USB_STATE_RESUMING; @@ -333,7 +333,8 @@ retval = hcd->driver->resume (hcd); if (!HCD_IS_RUNNING (hcd->state)) { - dev_dbg (hcd->controller, "resume fail, retval %d\n", retval); + dev_dbg (hcd->self.controller, + "resume fail, retval %d\n", retval); usb_hc_died (hcd); } diff -Nru a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c --- a/drivers/usb/core/hcd.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/core/hcd.c Thu Feb 19 17:21:42 2004 @@ -351,7 +351,7 @@ /* FALLTHROUGH */ case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: case DeviceOutRequest | USB_REQ_SET_FEATURE: - dev_dbg (hcd->controller, "no device features yet yet\n"); + dev_dbg (hcd->self.controller, "no device features yet yet\n"); break; case DeviceRequest | USB_REQ_GET_CONFIGURATION: ubuf [0] = 1; @@ -394,7 +394,7 @@ break; case DeviceOutRequest | USB_REQ_SET_ADDRESS: // wValue == urb->dev->devaddr - dev_dbg (hcd->controller, "root hub device address %d\n", + dev_dbg (hcd->self.controller, "root hub device address %d\n", wValue); break; @@ -409,7 +409,7 @@ /* FALLTHROUGH */ case EndpointOutRequest | USB_REQ_CLEAR_FEATURE: case EndpointOutRequest | USB_REQ_SET_FEATURE: - dev_dbg (hcd->controller, "no endpoint features yet\n"); + dev_dbg (hcd->self.controller, "no endpoint features yet\n"); break; /* CLASS REQUESTS (and errors) */ @@ -423,12 +423,12 @@ error: /* "protocol stall" on error */ urb->status = -EPIPE; - dev_dbg (hcd->controller, "unsupported hub control message (maxchild %d)\n", + dev_dbg (hcd->self.controller, "unsupported hub control message (maxchild %d)\n", urb->dev->maxchild); } if (urb->status) { urb->actual_length = 0; - dev_dbg (hcd->controller, "CTRL: TypeReq=0x%x val=0x%x idx=0x%x len=%d ==> %d\n", + dev_dbg (hcd->self.controller, "CTRL: TypeReq=0x%x val=0x%x idx=0x%x len=%d ==> %d\n", typeReq, wValue, wIndex, wLength, urb->status); } if (bufp) { @@ -464,7 +464,7 @@ || urb->status != -EINPROGRESS || urb->transfer_buffer_length < len || !HCD_IS_RUNNING (hcd->state)) { - dev_dbg (hcd->controller, + dev_dbg (hcd->self.controller, "not queuing rh status urb, stat %d\n", urb->status); return -EINVAL; @@ -1068,18 +1068,18 @@ /* lower level hcd code should use *_dma exclusively, * unless it uses pio or talks to another transport. */ - if (hcd->controller->dma_mask) { + if (hcd->self.controller->dma_mask) { if (usb_pipecontrol (urb->pipe) && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP)) urb->setup_dma = dma_map_single ( - hcd->controller, + hcd->self.controller, urb->setup_packet, sizeof (struct usb_ctrlrequest), DMA_TO_DEVICE); if (urb->transfer_buffer_length != 0 && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) urb->transfer_dma = dma_map_single ( - hcd->controller, + hcd->self.controller, urb->transfer_buffer, urb->transfer_buffer_length, usb_pipein (urb->pipe) @@ -1125,7 +1125,7 @@ /* failures "should" be harmless */ value = hcd->driver->urb_dequeue (hcd, urb); if (value != 0) - dev_dbg (hcd->controller, + dev_dbg (hcd->self.controller, "dequeue %p --> %d\n", urb, value); } @@ -1232,7 +1232,7 @@ * finish unlinking the initial failed usb_set_address(). */ if (!hcd->saw_irq) { - dev_warn (hcd->controller, "Unlink after no-IRQ? " + dev_warn (hcd->self.controller, "Unlink after no-IRQ? " "Different ACPI or APIC settings may help." "\n"); hcd->saw_irq = 1; @@ -1244,7 +1244,8 @@ */ if (!(urb->transfer_flags & URB_ASYNC_UNLINK)) { if (in_interrupt ()) { - dev_dbg (hcd->controller, "non-async unlink in_interrupt"); + dev_dbg (hcd->self.controller, + "non-async unlink in_interrupt"); retval = -EWOULDBLOCK; goto done; } @@ -1363,7 +1364,7 @@ if (tmp == -EINPROGRESS) { tmp = urb->pipe; unlink1 (hcd, urb); - dev_dbg (hcd->controller, + dev_dbg (hcd->self.controller, "shutdown urb %p pipe %08x ep%d%s%s\n", urb, tmp, usb_pipeendpoint (tmp), (tmp & USB_DIR_IN) ? "in" : "out", @@ -1417,7 +1418,7 @@ /* device driver problem with refcounts? */ if (!list_empty (&dev->urb_list)) { - dev_dbg (hcd->controller, "free busy dev, %s devnum %d (bug!)\n", + dev_dbg (hcd->self.controller, "free busy dev, %s devnum %d (bug!)\n", hcd->self.bus_name, udev->devnum); return -EINVAL; } @@ -1474,15 +1475,16 @@ // It would catch exit/unlink paths for all urbs. /* lower level hcd code should use *_dma exclusively */ - if (hcd->controller->dma_mask) { + if (hcd->self.controller->dma_mask) { if (usb_pipecontrol (urb->pipe) && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP)) - dma_unmap_single (hcd->controller, urb->setup_dma, + dma_unmap_single (hcd->self.controller, urb->setup_dma, sizeof (struct usb_ctrlrequest), DMA_TO_DEVICE); if (urb->transfer_buffer_length != 0 && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) - dma_unmap_single (hcd->controller, urb->transfer_dma, + dma_unmap_single (hcd->self.controller, + urb->transfer_dma, urb->transfer_buffer_length, usb_pipein (urb->pipe) ? DMA_FROM_DEVICE @@ -1551,7 +1553,7 @@ */ void usb_hc_died (struct usb_hcd *hcd) { - dev_err (hcd->controller, "HC died; cleaning up\n"); + dev_err (hcd->self.controller, "HC died; cleaning up\n"); /* clean up old urbs and devices; needs a task context */ INIT_WORK (&hcd->work, hcd_panic, hcd); diff -Nru a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h --- a/drivers/usb/core/hcd.h Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/core/hcd.h Thu Feb 19 17:21:42 2004 @@ -76,17 +76,14 @@ unsigned saw_irq : 1; int irq; /* irq allocated */ void *regs; /* device memory/io */ - struct device *controller; /* handle to hardware */ - /* a few non-PCI controllers exist, mostly for OHCI */ - struct pci_dev *pdev; /* pci is typical */ #ifdef CONFIG_PCI int region; /* pci region for regs */ u32 pci_state [16]; /* for PM state save */ #endif #define HCD_BUFFER_POOLS 4 - struct pci_pool *pool [HCD_BUFFER_POOLS]; + struct dma_pool *pool [HCD_BUFFER_POOLS]; int state; # define __ACTIVE 0x01 @@ -355,7 +352,7 @@ static inline int hcd_register_root (struct usb_hcd *hcd) { return usb_register_root_hub ( - hcd_to_bus (hcd)->root_hub, hcd->controller); + hcd_to_bus (hcd)->root_hub, hcd->self.controller); } /*-------------------------------------------------------------------------*/ diff -Nru a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c --- a/drivers/usb/host/ehci-dbg.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ehci-dbg.c Thu Feb 19 17:21:42 2004 @@ -19,13 +19,13 @@ /* this file is part of ehci-hcd.c */ #define ehci_dbg(ehci, fmt, args...) \ - dev_dbg ((ehci)->hcd.controller , fmt , ## args ) + dev_dbg ((ehci)->hcd.self.controller , fmt , ## args ) #define ehci_err(ehci, fmt, args...) \ - dev_err ((ehci)->hcd.controller , fmt , ## args ) + dev_err ((ehci)->hcd.self.controller , fmt , ## args ) #define ehci_info(ehci, fmt, args...) \ - dev_info ((ehci)->hcd.controller , fmt , ## args ) + dev_info ((ehci)->hcd.self.controller , fmt , ## args ) #define ehci_warn(ehci, fmt, args...) \ - dev_warn ((ehci)->hcd.controller , fmt , ## args ) + dev_warn ((ehci)->hcd.self.controller , fmt , ## args ) #ifdef EHCI_VERBOSE_DEBUG # define vdbg dbg @@ -625,7 +625,7 @@ i = HC_VERSION(readl (&ehci->caps->hc_capbase)); temp = snprintf (next, size, "PCI device %s\nEHCI %x.%02x, hcd state %d (driver " DRIVER_VERSION ")\n", - pci_name(hcd->pdev), + pci_name(to_pci_dev(hcd->self.controller)), i >> 8, i & 0x0ff, ehci->hcd.state); size -= temp; next += temp; diff -Nru a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c --- a/drivers/usb/host/ehci-hcd.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ehci-hcd.c Thu Feb 19 17:21:42 2004 @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -67,6 +68,7 @@ * * HISTORY: * + * 2004-02-24 Replace pci_* with generic dma_* API calls (dsaxena@plexity.net) * 2003-12-29 Rewritten high speed iso transfer support (by Michal Sojka, * , updates by DB). * @@ -288,13 +290,13 @@ /* request handoff to OS */ cap &= 1 << 24; - pci_write_config_dword (ehci->hcd.pdev, where, cap); + pci_write_config_dword (to_pci_dev(ehci->hcd.self.controller), where, cap); /* and wait a while for it to happen */ do { wait_ms (10); msec -= 10; - pci_read_config_dword (ehci->hcd.pdev, where, &cap); + pci_read_config_dword (to_pci_dev(ehci->hcd.self.controller), where, &cap); } while ((cap & (1 << 16)) && msec); if (cap & (1 << 16)) { ehci_err (ehci, "BIOS handoff failed (%d, %04x)\n", @@ -339,7 +341,7 @@ while (temp) { u32 cap; - pci_read_config_dword (ehci->hcd.pdev, temp, &cap); + pci_read_config_dword (to_pci_dev(ehci->hcd.self.controller), temp, &cap); ehci_dbg (ehci, "capability %04x at %02x\n", cap, temp); switch (cap & 0xff) { case 1: /* BIOS/SMM/... handoff */ @@ -378,7 +380,7 @@ * periodic_size can shrink by USBCMD update if hcc_params allows. */ ehci->periodic_size = DEFAULT_I_TDPS; - if ((retval = ehci_mem_init (ehci, SLAB_KERNEL)) < 0) + if ((retval = ehci_mem_init (ehci, GFP_KERNEL)) < 0) return retval; /* controllers may cache some of the periodic schedule ... */ @@ -433,13 +435,13 @@ writel (0, &ehci->regs->segment); #if 0 // this is deeply broken on almost all architectures - if (!pci_set_dma_mask (ehci->hcd.pdev, 0xffffffffffffffffULL)) + if (!pci_set_dma_mask (to_pci_dev(ehci->hcd.self.controller), 0xffffffffffffffffULL)) ehci_info (ehci, "enabled 64bit PCI DMA\n"); #endif } /* help hc dma work well with cachelines */ - pci_set_mwi (ehci->hcd.pdev); + pci_set_mwi (to_pci_dev(ehci->hcd.self.controller)); /* clear interrupt enables, set irq latency */ temp = readl (&ehci->regs->command) & 0x0fff; @@ -493,7 +495,7 @@ readl (&ehci->regs->command); /* unblock posted write */ /* PCI Serial Bus Release Number is at 0x60 offset */ - pci_read_config_byte (hcd->pdev, 0x60, &tempbyte); + pci_read_config_byte(to_pci_dev(hcd->self.controller), 0x60, &tempbyte); temp = HC_VERSION(readl (&ehci->caps->hc_capbase)); ehci_info (ehci, "USB %x.%x enabled, EHCI %x.%02x, driver %s\n", @@ -758,7 +760,7 @@ * non-error returns are a promise to giveback() the urb later * we drop ownership so next owner (or urb unlink) can get it * - * urb + dev is in hcd_dev.urb_list + * urb + dev is in hcd.self.controller.urb_list * we're queueing TDs onto software and hardware lists * * hcd-specific init for hcpriv hasn't been done yet diff -Nru a/drivers/usb/host/ehci-mem.c b/drivers/usb/host/ehci-mem.c --- a/drivers/usb/host/ehci-mem.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ehci-mem.c Thu Feb 19 17:21:42 2004 @@ -24,7 +24,7 @@ * There's basically three types of memory: * - data used only by the HCD ... kmalloc is fine * - async and periodic schedules, shared by HC and HCD ... these - * need to use pci_pool or pci_alloc_consistent + * need to use dma_pool or dma_alloc_coherent * - driver buffers, read/written by HC ... single shot DMA mapped * * There's also PCI "register" data, which is memory mapped. @@ -74,7 +74,7 @@ struct ehci_qtd *qtd; dma_addr_t dma; - qtd = pci_pool_alloc (ehci->qtd_pool, flags, &dma); + qtd = dma_pool_alloc (ehci->qtd_pool, flags, &dma); if (qtd != 0) { ehci_qtd_init (qtd, dma); } @@ -83,7 +83,7 @@ static inline void ehci_qtd_free (struct ehci_hcd *ehci, struct ehci_qtd *qtd) { - pci_pool_free (ehci->qtd_pool, qtd, qtd->qtd_dma); + dma_pool_free (ehci->qtd_pool, qtd, qtd->qtd_dma); } @@ -93,7 +93,7 @@ dma_addr_t dma; qh = (struct ehci_qh *) - pci_pool_alloc (ehci->qh_pool, flags, &dma); + dma_pool_alloc (ehci->qh_pool, flags, &dma); if (!qh) return qh; @@ -107,7 +107,7 @@ qh->dummy = ehci_qtd_alloc (ehci, flags); if (qh->dummy == 0) { ehci_dbg (ehci, "no dummy td\n"); - pci_pool_free (ehci->qh_pool, qh, qh->qh_dma); + dma_pool_free (ehci->qh_pool, qh, qh->qh_dma); qh = 0; } return qh; @@ -132,7 +132,7 @@ if (qh->dummy) ehci_qtd_free (ehci, qh->dummy); usb_put_dev (qh->dev); - pci_pool_free (ehci->qh_pool, qh, qh->qh_dma); + dma_pool_free (ehci->qh_pool, qh, qh->qh_dma); } /*-------------------------------------------------------------------------*/ @@ -148,26 +148,26 @@ qh_put (ehci, ehci->async); ehci->async = 0; - /* PCI consistent memory and pools */ + /* DMA consistent memory and pools */ if (ehci->qtd_pool) - pci_pool_destroy (ehci->qtd_pool); + dma_pool_destroy (ehci->qtd_pool); ehci->qtd_pool = 0; if (ehci->qh_pool) { - pci_pool_destroy (ehci->qh_pool); + dma_pool_destroy (ehci->qh_pool); ehci->qh_pool = 0; } if (ehci->itd_pool) - pci_pool_destroy (ehci->itd_pool); + dma_pool_destroy (ehci->itd_pool); ehci->itd_pool = 0; if (ehci->sitd_pool) - pci_pool_destroy (ehci->sitd_pool); + dma_pool_destroy (ehci->sitd_pool); ehci->sitd_pool = 0; if (ehci->periodic) - pci_free_consistent (ehci->hcd.pdev, + dma_free_coherent (ehci->hcd.self.controller, ehci->periodic_size * sizeof (u32), ehci->periodic, ehci->periodic_dma); ehci->periodic = 0; @@ -184,7 +184,8 @@ int i; /* QTDs for control/bulk/intr transfers */ - ehci->qtd_pool = pci_pool_create ("ehci_qtd", ehci->hcd.pdev, + ehci->qtd_pool = dma_pool_create ("ehci_qtd", + ehci->hcd.self.controller, sizeof (struct ehci_qtd), 32 /* byte alignment (for hw parts) */, 4096 /* can't cross 4K */); @@ -193,7 +194,8 @@ } /* QHs for control/bulk/intr transfers */ - ehci->qh_pool = pci_pool_create ("ehci_qh", ehci->hcd.pdev, + ehci->qh_pool = dma_pool_create ("ehci_qh", + ehci->hcd.self.controller, sizeof (struct ehci_qh), 32 /* byte alignment (for hw parts) */, 4096 /* can't cross 4K */); @@ -206,7 +208,8 @@ } /* ITD for high speed ISO transfers */ - ehci->itd_pool = pci_pool_create ("ehci_itd", ehci->hcd.pdev, + ehci->itd_pool = dma_pool_create ("ehci_itd", + ehci->hcd.self.controller, sizeof (struct ehci_itd), 32 /* byte alignment (for hw parts) */, 4096 /* can't cross 4K */); @@ -215,7 +218,8 @@ } /* SITD for full/low speed split ISO transfers */ - ehci->sitd_pool = pci_pool_create ("ehci_sitd", ehci->hcd.pdev, + ehci->sitd_pool = dma_pool_create ("ehci_sitd", + ehci->hcd.self.controller, sizeof (struct ehci_sitd), 32 /* byte alignment (for hw parts) */, 4096 /* can't cross 4K */); @@ -225,9 +229,9 @@ /* Hardware periodic table */ ehci->periodic = (u32 *) - pci_alloc_consistent (ehci->hcd.pdev, + dma_alloc_coherent (ehci->hcd.self.controller, ehci->periodic_size * sizeof (u32), - &ehci->periodic_dma); + &ehci->periodic_dma, 0); if (ehci->periodic == 0) { goto fail; } diff -Nru a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c --- a/drivers/usb/host/ehci-q.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ehci-q.c Thu Feb 19 17:21:42 2004 @@ -776,7 +776,7 @@ qh = (struct ehci_qh *) *ptr; if (unlikely (qh == 0)) { /* can't sleep here, we have ehci->lock... */ - qh = qh_make (ehci, urb, SLAB_ATOMIC); + qh = qh_make (ehci, urb, GFP_ATOMIC); *ptr = qh; } if (likely (qh != 0)) { diff -Nru a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c --- a/drivers/usb/host/ehci-sched.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ehci-sched.c Thu Feb 19 17:21:42 2004 @@ -578,7 +578,7 @@ itd = list_entry (stream->free_itd_list.next, struct ehci_itd, itd_list); list_del (&itd->itd_list); - pci_pool_free (ehci->itd_pool, itd, itd->itd_dma); + dma_pool_free (ehci->itd_pool, itd, itd->itd_dma); } is_in = (stream->bEndpointAddress & USB_DIR_IN) ? 0x10 : 0; @@ -760,7 +760,7 @@ list_del (&itd->itd_list); itd_dma = itd->itd_dma; } else - itd = pci_pool_alloc (ehci->itd_pool, mem_flags, + itd = dma_pool_alloc (ehci->itd_pool, mem_flags, &itd_dma); if (unlikely (0 == itd)) { diff -Nru a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h --- a/drivers/usb/host/ehci.h Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ehci.h Thu Feb 19 17:21:42 2004 @@ -74,11 +74,11 @@ struct ehci_regs *regs; u32 hcs_params; /* cached register copy */ - /* per-HC memory pools (could be per-PCI-bus, but ...) */ - struct pci_pool *qh_pool; /* qh per active urb */ - struct pci_pool *qtd_pool; /* one or more per qh */ - struct pci_pool *itd_pool; /* itd per iso urb */ - struct pci_pool *sitd_pool; /* sitd per split iso urb */ + /* per-HC memory pools (could be per-bus, but ...) */ + struct dma_pool *qh_pool; /* qh per active urb */ + struct dma_pool *qtd_pool; /* one or more per qh */ + struct dma_pool *itd_pool; /* itd per iso urb */ + struct dma_pool *sitd_pool; /* sitd per split iso urb */ struct timer_list watchdog; struct notifier_block reboot_notifier; diff -Nru a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c --- a/drivers/usb/host/ohci-hcd.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ohci-hcd.c Thu Feb 19 17:21:42 2004 @@ -17,6 +17,7 @@ * * History: * + * 2004/02/04 use generic dma_* functions instead of pci_* (dsaxena@plexity.net) * 2003/02/24 show registers in sysfs (Kevin Brosius) * * 2002/09/03 get rid of ed hashtables, rework periodic scheduling and @@ -96,6 +97,8 @@ #include /* for in_interrupt () */ #include #include "../core/hcd.h" +#include +#include /* needed by ohci-mem.c when no PCI */ #include #include @@ -642,8 +645,9 @@ remove_debug_files (ohci); ohci_mem_cleanup (ohci); if (ohci->hcca) { - pci_free_consistent (ohci->hcd.pdev, sizeof *ohci->hcca, - ohci->hcca, ohci->hcca_dma); + dma_free_coherent (ohci->hcd.self.controller, + sizeof *ohci->hcca, + ohci->hcca, ohci->hcca_dma); ohci->hcca = NULL; ohci->hcca_dma = 0; } diff -Nru a/drivers/usb/host/ohci-mem.c b/drivers/usb/host/ohci-mem.c --- a/drivers/usb/host/ohci-mem.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ohci-mem.c Thu Feb 19 17:21:42 2004 @@ -13,7 +13,7 @@ * There's basically three types of memory: * - data used only by the HCD ... kmalloc is fine * - async and periodic schedules, shared by HC and HCD ... these - * need to use pci_pool or pci_alloc_consistent + * need to use dma_pool or dma_alloc_coherent * - driver buffers, read/written by HC ... the hcd glue or the * device driver provides us with dma addresses * @@ -45,18 +45,18 @@ static int ohci_mem_init (struct ohci_hcd *ohci) { - ohci->td_cache = pci_pool_create ("ohci_td", ohci->hcd.pdev, + ohci->td_cache = dma_pool_create ("ohci_td", ohci->hcd.self.controller, sizeof (struct td), 32 /* byte alignment */, 0 /* no page-crossing issues */); if (!ohci->td_cache) return -ENOMEM; - ohci->ed_cache = pci_pool_create ("ohci_ed", ohci->hcd.pdev, + ohci->ed_cache = dma_pool_create ("ohci_ed", ohci->hcd.self.controller, sizeof (struct ed), 16 /* byte alignment */, 0 /* no page-crossing issues */); if (!ohci->ed_cache) { - pci_pool_destroy (ohci->td_cache); + dma_pool_destroy (ohci->td_cache); return -ENOMEM; } return 0; @@ -65,11 +65,11 @@ static void ohci_mem_cleanup (struct ohci_hcd *ohci) { if (ohci->td_cache) { - pci_pool_destroy (ohci->td_cache); + dma_pool_destroy (ohci->td_cache); ohci->td_cache = 0; } if (ohci->ed_cache) { - pci_pool_destroy (ohci->ed_cache); + dma_pool_destroy (ohci->ed_cache); ohci->ed_cache = 0; } } @@ -96,7 +96,7 @@ dma_addr_t dma; struct td *td; - td = pci_pool_alloc (hc->td_cache, mem_flags, &dma); + td = dma_pool_alloc (hc->td_cache, mem_flags, &dma); if (td) { /* in case hc fetches it, make it look dead */ memset (td, 0, sizeof *td); @@ -118,7 +118,7 @@ *prev = td->td_hash; else if ((td->hwINFO & TD_DONE) != 0) ohci_dbg (hc, "no hash for td %p\n", td); - pci_pool_free (hc->td_cache, td, td->td_dma); + dma_pool_free (hc->td_cache, td, td->td_dma); } /*-------------------------------------------------------------------------*/ @@ -130,7 +130,7 @@ dma_addr_t dma; struct ed *ed; - ed = pci_pool_alloc (hc->ed_cache, mem_flags, &dma); + ed = dma_pool_alloc (hc->ed_cache, mem_flags, &dma); if (ed) { memset (ed, 0, sizeof (*ed)); INIT_LIST_HEAD (&ed->td_list); @@ -142,6 +142,6 @@ static void ed_free (struct ohci_hcd *hc, struct ed *ed) { - pci_pool_free (hc->ed_cache, ed, ed->dma); + dma_pool_free (hc->ed_cache, ed, ed->dma); } diff -Nru a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c --- a/drivers/usb/host/ohci-omap.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ohci-omap.c Thu Feb 19 17:21:42 2004 @@ -388,9 +388,7 @@ hcd->description = driver->description; hcd->irq = dev->irq[0]; hcd->regs = dev->mapbase; - hcd->pdev = OMAP_FAKE_PCIDEV; hcd->self.controller = &dev->dev; - hcd->controller = hcd->self.controller; retval = hcd_buffer_create (hcd); if (retval != 0) { @@ -494,12 +492,10 @@ struct ohci_hcd *ohci = hcd_to_ohci (hcd); int ret; - if (hcd->pdev) { - ohci->hcca = pci_alloc_consistent (hcd->pdev, - sizeof *ohci->hcca, &ohci->hcca_dma); - if (!ohci->hcca) - return -ENOMEM; - } + ohci->hcca = dma_alloc_consistent (hcd->self.controller, + sizeof *ohci->hcca, &ohci->hcca_dma); + if (!ohci->hcca) + return -ENOMEM; memset (ohci->hcca, 0, sizeof (struct ohci_hcca)); if ((ret = ohci_mem_init (ohci)) < 0) { diff -Nru a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c --- a/drivers/usb/host/ohci-pci.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ohci-pci.c Thu Feb 19 17:21:42 2004 @@ -45,17 +45,19 @@ struct ohci_hcd *ohci = hcd_to_ohci (hcd); int ret; - if (hcd->pdev) { - ohci->hcca = pci_alloc_consistent (hcd->pdev, - sizeof *ohci->hcca, &ohci->hcca_dma); - if (!ohci->hcca) - return -ENOMEM; + ohci->hcca = dma_alloc_coherent (hcd->self.controller, + sizeof *ohci->hcca, &ohci->hcca_dma, 0); + if (!ohci->hcca) + return -ENOMEM; + + if(hcd->self.controller && hcd->self.controller->bus == &pci_bus_type) { + struct pci_dev *pdev = to_pci_dev(hcd->self.controller); /* AMD 756, for most chips (early revs), corrupts register * values on read ... so enable the vendor workaround. */ - if (hcd->pdev->vendor == PCI_VENDOR_ID_AMD - && hcd->pdev->device == 0x740c) { + if (pdev->vendor == PCI_VENDOR_ID_AMD + && pdev->device == 0x740c) { ohci->flags = OHCI_QUIRK_AMD756; ohci_info (ohci, "AMD756 erratum 4 workaround\n"); } @@ -68,8 +70,8 @@ * for this chip. Evidently control and bulk lists * can get confused. (B&W G3 models, and ...) */ - else if (hcd->pdev->vendor == PCI_VENDOR_ID_OPTI - && hcd->pdev->device == 0xc861) { + else if (pdev->vendor == PCI_VENDOR_ID_OPTI + && pdev->device == 0xc861) { ohci_info (ohci, "WARNING: OPTi workarounds unavailable\n"); } @@ -78,12 +80,11 @@ * identify the USB (fn2). This quirk might apply to more or * even all NSC stuff. */ - else if (hcd->pdev->vendor == PCI_VENDOR_ID_NS) { - struct pci_dev *b, *hc; + else if (pdev->vendor == PCI_VENDOR_ID_NS) { + struct pci_dev *b; - hc = hcd->pdev; - b = pci_find_slot (hc->bus->number, - PCI_DEVFN (PCI_SLOT (hc->devfn), 1)); + b = pci_find_slot (pdev->bus->number, + PCI_DEVFN (PCI_SLOT (pdev->devfn), 1)); if (b && b->device == PCI_DEVICE_ID_NS_87560_LIO && b->vendor == PCI_VENDOR_ID_NS) { ohci->flags |= OHCI_QUIRK_SUPERIO; @@ -145,7 +146,7 @@ #ifdef CONFIG_PMAC_PBOOK if (_machine == _MACH_Pmac) - disable_irq (hcd->pdev->irq); + disable_irq ((to_pci_dev(hcd->self.controller))->irq); /* else, 2.4 assumes shared irqs -- don't disable */ #endif @@ -179,15 +180,17 @@ * memory during sleep. We disable its bus master bit during * suspend */ - pci_read_config_word (hcd->pdev, PCI_COMMAND, &cmd); + pci_read_config_word (to_pci_dev(hcd->self.controller), PCI_COMMAND, + &cmd); cmd &= ~PCI_COMMAND_MASTER; - pci_write_config_word (hcd->pdev, PCI_COMMAND, cmd); + pci_write_config_word (to_pci_dev(hcd->self.controller), PCI_COMMAND, + cmd); #ifdef CONFIG_PMAC_PBOOK { struct device_node *of_node; /* Disable USB PAD & cell clock */ - of_node = pci_device_to_OF_node (hcd->pdev); + of_node = pci_device_to_OF_node (to_pci_dev(hcd->self.controller)); if (of_node) pmac_call_feature(PMAC_FTR_USB_ENABLE, of_node, 0, 0); } @@ -207,7 +210,7 @@ struct device_node *of_node; /* Re-enable USB PAD & cell clock */ - of_node = pci_device_to_OF_node (hcd->pdev); + of_node = pci_device_to_OF_node (to_pci_dev(hcd->self.controller)); if (of_node) pmac_call_feature (PMAC_FTR_USB_ENABLE, of_node, 0, 1); } @@ -222,7 +225,7 @@ #endif /* Re-enable bus mastering */ - pci_set_master (ohci->hcd.pdev); + pci_set_master (to_pci_dev(ohci->hcd.self.controller)); switch (temp) { @@ -282,7 +285,7 @@ #ifdef CONFIG_PMAC_PBOOK if (_machine == _MACH_Pmac) - enable_irq (hcd->pdev->irq); + enable_irq (to_pci_dev(hcd->self.controller)->irq); #endif /* Check for a pending done list */ diff -Nru a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c --- a/drivers/usb/host/ohci-q.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ohci-q.c Thu Feb 19 17:21:42 2004 @@ -375,7 +375,7 @@ if (!(ed = dev->ep [ep])) { struct td *td; - ed = ed_alloc (ohci, SLAB_ATOMIC); + ed = ed_alloc (ohci, GFP_ATOMIC); if (!ed) { /* out of memory */ goto done; @@ -383,7 +383,7 @@ dev->ep [ep] = ed; /* dummy td; end of td list for ed */ - td = td_alloc (ohci, SLAB_ATOMIC); + td = td_alloc (ohci, GFP_ATOMIC); if (!td) { /* out of memory */ ed_free (ohci, ed); diff -Nru a/drivers/usb/host/ohci-sa1111.c b/drivers/usb/host/ohci-sa1111.c --- a/drivers/usb/host/ohci-sa1111.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ohci-sa1111.c Thu Feb 19 17:21:42 2004 @@ -167,9 +167,7 @@ hcd->description = driver->description; hcd->irq = dev->irq[1]; hcd->regs = dev->mapbase; - hcd->pdev = SA1111_FAKE_PCIDEV; hcd->self.controller = &dev->dev; - hcd->controller = hcd->self.controller; retval = hcd_buffer_create (hcd); if (retval != 0) { @@ -270,14 +268,12 @@ struct ohci_hcd *ohci = hcd_to_ohci (hcd); int ret; - if (hcd->pdev) { - ohci->hcca = pci_alloc_consistent (hcd->pdev, - sizeof *ohci->hcca, &ohci->hcca_dma); - if (!ohci->hcca) - return -ENOMEM; - } - - memset (ohci->hcca, 0, sizeof (struct ohci_hcca)); + ohci->hcca = dma_alloc_coherent (hcd->self.controller, + sizeof *ohci->hcca, &ohci->hcca_dma, 0); + if (!ohci->hcca) + return -ENOMEM; + + memset (ohci->hcca, 0, sizeof (struct ohci_hcca)); if ((ret = ohci_mem_init (ohci)) < 0) { ohci_stop (hcd); return ret; diff -Nru a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h --- a/drivers/usb/host/ohci.h Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/ohci.h Thu Feb 19 17:21:42 2004 @@ -361,8 +361,8 @@ /* * memory management for queue data structures */ - struct pci_pool *td_cache; - struct pci_pool *ed_cache; + struct dma_pool *td_cache; + struct dma_pool *ed_cache; struct td *td_hash [TD_HASH_SIZE]; /* @@ -391,13 +391,13 @@ #endif /* DEBUG */ #define ohci_dbg(ohci, fmt, args...) \ - dev_dbg ((ohci)->hcd.controller , fmt , ## args ) + dev_dbg ((ohci)->hcd.self.controller , fmt , ## args ) #define ohci_err(ohci, fmt, args...) \ - dev_err ((ohci)->hcd.controller , fmt , ## args ) + dev_err ((ohci)->hcd.self.controller , fmt , ## args ) #define ohci_info(ohci, fmt, args...) \ - dev_info ((ohci)->hcd.controller , fmt , ## args ) + dev_info ((ohci)->hcd.self.controller , fmt , ## args ) #define ohci_warn(ohci, fmt, args...) \ - dev_warn ((ohci)->hcd.controller , fmt , ## args ) + dev_warn ((ohci)->hcd.self.controller , fmt , ## args ) #ifdef OHCI_VERBOSE_DEBUG # define ohci_vdbg ohci_dbg diff -Nru a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c --- a/drivers/usb/host/uhci-hcd.c Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/uhci-hcd.c Thu Feb 19 17:21:42 2004 @@ -41,6 +41,8 @@ #include #include #include +#include +#include #ifdef CONFIG_USB_DEBUG #define DEBUG #else @@ -140,7 +142,7 @@ dma_addr_t dma_handle; struct uhci_td *td; - td = pci_pool_alloc(uhci->td_pool, GFP_ATOMIC, &dma_handle); + td = dma_pool_alloc(uhci->td_pool, GFP_ATOMIC, &dma_handle); if (!td) return NULL; @@ -292,7 +294,7 @@ if (td->dev) usb_put_dev(td->dev); - pci_pool_free(uhci->td_pool, td, td->dma_handle); + dma_pool_free(uhci->td_pool, td, td->dma_handle); } static struct uhci_qh *uhci_alloc_qh(struct uhci_hcd *uhci, struct usb_device *dev) @@ -300,7 +302,7 @@ dma_addr_t dma_handle; struct uhci_qh *qh; - qh = pci_pool_alloc(uhci->qh_pool, GFP_ATOMIC, &dma_handle); + qh = dma_pool_alloc(uhci->qh_pool, GFP_ATOMIC, &dma_handle); if (!qh) return NULL; @@ -330,7 +332,7 @@ if (qh->dev) usb_put_dev(qh->dev); - pci_pool_free(uhci->qh_pool, qh, qh->dma_handle); + dma_pool_free(uhci->qh_pool, qh, qh->dma_handle); } /* @@ -2013,7 +2015,8 @@ unsigned int io_addr = uhci->io_addr; int i; - if (!uhci->hcd.pdev || uhci->hcd.pdev->vendor != PCI_VENDOR_ID_INTEL) + if (!uhci->hcd.self.controller || + to_pci_dev(uhci->hcd.self.controller)->vendor != PCI_VENDOR_ID_INTEL) return 1; /* Some of Intel's USB controllers have a bug that causes false @@ -2127,17 +2130,17 @@ } if (uhci->qh_pool) { - pci_pool_destroy(uhci->qh_pool); + dma_pool_destroy(uhci->qh_pool); uhci->qh_pool = NULL; } if (uhci->td_pool) { - pci_pool_destroy(uhci->td_pool); + dma_pool_destroy(uhci->td_pool); uhci->td_pool = NULL; } if (uhci->fl) { - pci_free_consistent(uhci->hcd.pdev, sizeof(*uhci->fl), uhci->fl, uhci->fl->dma_handle); + dma_free_coherent(uhci->hcd.self.controller, sizeof(*uhci->fl), uhci->fl, uhci->fl->dma_handle); uhci->fl = NULL; } @@ -2162,7 +2165,7 @@ * interrupts from any previous setup. */ reset_hc(uhci); - pci_write_config_word(hcd->pdev, USBLEGSUP, USBLEGSUP_DEFAULT); + pci_write_config_word(to_pci_dev(hcd->self.controller), USBLEGSUP, USBLEGSUP_DEFAULT); return 0; } @@ -2194,7 +2197,7 @@ struct proc_dir_entry *ent; #endif - io_size = pci_resource_len(hcd->pdev, hcd->region); + io_size = pci_resource_len(to_pci_dev(hcd->self.controller), hcd->region); #ifdef CONFIG_PROC_FS ent = create_proc_entry(hcd->self.bus_name, S_IFREG|S_IRUGO|S_IWUSR, uhci_proc_root); @@ -2230,7 +2233,8 @@ spin_lock_init(&uhci->frame_list_lock); - uhci->fl = pci_alloc_consistent(hcd->pdev, sizeof(*uhci->fl), &dma_handle); + uhci->fl = dma_alloc_coherent(hcd->self.controller, + sizeof(*uhci->fl), &dma_handle, 0); if (!uhci->fl) { err("unable to allocate consistent memory for frame list"); goto err_alloc_fl; @@ -2240,17 +2244,17 @@ uhci->fl->dma_handle = dma_handle; - uhci->td_pool = pci_pool_create("uhci_td", hcd->pdev, + uhci->td_pool = dma_pool_create("uhci_td", hcd->self.controller, sizeof(struct uhci_td), 16, 0); if (!uhci->td_pool) { - err("unable to create td pci_pool"); + err("unable to create td dma_pool"); goto err_create_td_pool; } - uhci->qh_pool = pci_pool_create("uhci_qh", hcd->pdev, + uhci->qh_pool = dma_pool_create("uhci_qh", hcd->self.controller, sizeof(struct uhci_qh), 16, 0); if (!uhci->qh_pool) { - err("unable to create qh pci_pool"); + err("unable to create qh dma_pool"); goto err_create_qh_pool; } @@ -2361,7 +2365,7 @@ udev->speed = USB_SPEED_FULL; - if (usb_register_root_hub(udev, &hcd->pdev->dev) != 0) { + if (usb_register_root_hub(udev, hcd->self.controller) != 0) { err("unable to start root hub"); retval = -ENOMEM; goto err_start_root_hub; @@ -2392,15 +2396,16 @@ hcd->self.root_hub = NULL; err_alloc_root_hub: - pci_pool_destroy(uhci->qh_pool); + dma_pool_destroy(uhci->qh_pool); uhci->qh_pool = NULL; err_create_qh_pool: - pci_pool_destroy(uhci->td_pool); + dma_pool_destroy(uhci->td_pool); uhci->td_pool = NULL; err_create_td_pool: - pci_free_consistent(hcd->pdev, sizeof(*uhci->fl), uhci->fl, uhci->fl->dma_handle); + dma_free_coherent(hcd->self.controller, + sizeof(*uhci->fl), uhci->fl, uhci->fl->dma_handle); uhci->fl = NULL; err_alloc_fl: @@ -2456,7 +2461,7 @@ { struct uhci_hcd *uhci = hcd_to_uhci(hcd); - pci_set_master(uhci->hcd.pdev); + pci_set_master(to_pci_dev(uhci->hcd.self.controller)); if (uhci->state == UHCI_SUSPENDED) uhci->resume_detect = 1; diff -Nru a/drivers/usb/host/uhci-hcd.h b/drivers/usb/host/uhci-hcd.h --- a/drivers/usb/host/uhci-hcd.h Thu Feb 19 17:21:42 2004 +++ b/drivers/usb/host/uhci-hcd.h Thu Feb 19 17:21:42 2004 @@ -326,8 +326,8 @@ /* Grabbed from PCI */ unsigned long io_addr; - struct pci_pool *qh_pool; - struct pci_pool *td_pool; + struct dma_pool *qh_pool; + struct dma_pool *td_pool; struct usb_bus *bus;