From 4b6aa27e2c78e4fcd7d0d1ca4d237faebd4a1e86 Mon Sep 17 00:00:00 2001 From: Alan Stern Date: Wed, 30 Aug 2006 11:29:56 -0400 Subject: [PATCH] --- yaml --- r: 36435 b: refs/heads/master c: dd990f16a39d4e615c0b70a0ab50b79b32bfb16d h: refs/heads/master i: 36433: 4c33f06c90c5db3e379968401f6117f7974dce84 36431: 8ca1932fef3d39a25af69d126f3d8897f1014167 v: v3 --- [refs] | 2 +- trunk/drivers/usb/core/hcd.c | 8 +++++--- trunk/include/linux/usb.h | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index ae05e2feddd3..ca1c0bf34f2f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a6d2bb9ff919b4685bd684620ec7a1ffa8bf2349 +refs/heads/master: dd990f16a39d4e615c0b70a0ab50b79b32bfb16d diff --git a/trunk/drivers/usb/core/hcd.c b/trunk/drivers/usb/core/hcd.c index 2102c4deec1e..0cc14206920a 100644 --- a/trunk/drivers/usb/core/hcd.c +++ b/trunk/drivers/usb/core/hcd.c @@ -1152,7 +1152,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) /* lower level hcd code should use *_dma exclusively, * unless it uses pio or talks to another transport. */ - if (hcd->self.controller->dma_mask) { + if (hcd->self.uses_dma) { if (usb_pipecontrol (urb->pipe) && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP)) 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 at_root_hub = (urb->dev == hcd->self.root_hub); urb_unlink (urb); - /* lower level hcd code should use *_dma exclusively */ - if (hcd->self.controller->dma_mask && !at_root_hub) { + /* lower level hcd code should use *_dma exclusively if the + * host controller does DMA */ + if (hcd->self.uses_dma && !at_root_hub) { if (usb_pipecontrol (urb->pipe) && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP)) dma_unmap_single (hcd->self.controller, urb->setup_dma, @@ -1710,6 +1711,7 @@ struct usb_hcd *usb_create_hcd (const struct hc_driver *driver, hcd->self.release = &hcd_release; hcd->self.controller = dev; hcd->self.bus_name = bus_name; + hcd->self.uses_dma = (dev->dma_mask != NULL); init_timer(&hcd->rh_timer); hcd->rh_timer.function = rh_timer_func; diff --git a/trunk/include/linux/usb.h b/trunk/include/linux/usb.h index 4709033f8fa7..09661759621f 100644 --- a/trunk/include/linux/usb.h +++ b/trunk/include/linux/usb.h @@ -269,6 +269,7 @@ struct usb_bus { struct device *controller; /* host/master side hardware */ int busnum; /* Bus number (in order of reg) */ char *bus_name; /* stable id (PCI slot_name etc) */ + u8 uses_dma; /* Does the host controller use DMA? */ u8 otg_port; /* 0, or number of OTG/HNP port */ unsigned is_b_host:1; /* true during some HNP roleswitches */ unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */