aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/hcd.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2006-08-30 11:29:56 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-09-27 14:58:56 -0400
commitdd990f16a39d4e615c0b70a0ab50b79b32bfb16d (patch)
tree471ab506eb21fadf05eaea7c47a33266b9e7a7d7 /drivers/usb/core/hcd.c
parenta6d2bb9ff919b4685bd684620ec7a1ffa8bf2349 (diff)
usbcore: Add flag for whether a host controller uses DMA
This patch (as770b) introduces a new field to usb_bus: a flag indicating whether or not the host controller uses DMA. This serves to encapsulate the computation. It also means we will have only one spot to update if the DMA API changes. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/hcd.c')
-rw-r--r--drivers/usb/core/hcd.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 2102c4deec1..0cc14206920 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -1152,7 +1152,7 @@ doit:
1152 /* lower level hcd code should use *_dma exclusively, 1152 /* lower level hcd code should use *_dma exclusively,
1153 * unless it uses pio or talks to another transport. 1153 * unless it uses pio or talks to another transport.
1154 */ 1154 */
1155 if (hcd->self.controller->dma_mask) { 1155 if (hcd->self.uses_dma) {
1156 if (usb_pipecontrol (urb->pipe) 1156 if (usb_pipecontrol (urb->pipe)
1157 && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP)) 1157 && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP))
1158 urb->setup_dma = dma_map_single ( 1158 urb->setup_dma = dma_map_single (
@@ -1585,8 +1585,9 @@ void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, struct pt_regs
1585 at_root_hub = (urb->dev == hcd->self.root_hub); 1585 at_root_hub = (urb->dev == hcd->self.root_hub);
1586 urb_unlink (urb); 1586 urb_unlink (urb);
1587 1587
1588 /* lower level hcd code should use *_dma exclusively */ 1588 /* lower level hcd code should use *_dma exclusively if the
1589 if (hcd->self.controller->dma_mask && !at_root_hub) { 1589 * host controller does DMA */
1590 if (hcd->self.uses_dma && !at_root_hub) {
1590 if (usb_pipecontrol (urb->pipe) 1591 if (usb_pipecontrol (urb->pipe)
1591 && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP)) 1592 && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP))
1592 dma_unmap_single (hcd->self.controller, urb->setup_dma, 1593 dma_unmap_single (hcd->self.controller, urb->setup_dma,
@@ -1710,6 +1711,7 @@ struct usb_hcd *usb_create_hcd (const struct hc_driver *driver,
1710 hcd->self.release = &hcd_release; 1711 hcd->self.release = &hcd_release;
1711 hcd->self.controller = dev; 1712 hcd->self.controller = dev;
1712 hcd->self.bus_name = bus_name; 1713 hcd->self.bus_name = bus_name;
1714 hcd->self.uses_dma = (dev->dma_mask != NULL);
1713 1715
1714 init_timer(&hcd->rh_timer); 1716 init_timer(&hcd->rh_timer);
1715 hcd->rh_timer.function = rh_timer_func; 1717 hcd->rh_timer.function = rh_timer_func;