diff options
-rw-r--r-- | drivers/usb/core/hcd.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 34de475f016e..026ab2fe5c2d 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c | |||
@@ -1275,13 +1275,16 @@ static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, | |||
1275 | 1275 | ||
1276 | if (usb_endpoint_xfer_control(&urb->ep->desc) | 1276 | if (usb_endpoint_xfer_control(&urb->ep->desc) |
1277 | && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP)) { | 1277 | && !(urb->transfer_flags & URB_NO_SETUP_DMA_MAP)) { |
1278 | if (hcd->self.uses_dma) | 1278 | if (hcd->self.uses_dma) { |
1279 | urb->setup_dma = dma_map_single( | 1279 | urb->setup_dma = dma_map_single( |
1280 | hcd->self.controller, | 1280 | hcd->self.controller, |
1281 | urb->setup_packet, | 1281 | urb->setup_packet, |
1282 | sizeof(struct usb_ctrlrequest), | 1282 | sizeof(struct usb_ctrlrequest), |
1283 | DMA_TO_DEVICE); | 1283 | DMA_TO_DEVICE); |
1284 | else if (hcd->driver->flags & HCD_LOCAL_MEM) | 1284 | if (dma_mapping_error(hcd->self.controller, |
1285 | urb->setup_dma)) | ||
1286 | return -EAGAIN; | ||
1287 | } else if (hcd->driver->flags & HCD_LOCAL_MEM) | ||
1285 | ret = hcd_alloc_coherent( | 1288 | ret = hcd_alloc_coherent( |
1286 | urb->dev->bus, mem_flags, | 1289 | urb->dev->bus, mem_flags, |
1287 | &urb->setup_dma, | 1290 | &urb->setup_dma, |
@@ -1293,13 +1296,16 @@ static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, | |||
1293 | dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; | 1296 | dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; |
1294 | if (ret == 0 && urb->transfer_buffer_length != 0 | 1297 | if (ret == 0 && urb->transfer_buffer_length != 0 |
1295 | && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) { | 1298 | && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) { |
1296 | if (hcd->self.uses_dma) | 1299 | if (hcd->self.uses_dma) { |
1297 | urb->transfer_dma = dma_map_single ( | 1300 | urb->transfer_dma = dma_map_single ( |
1298 | hcd->self.controller, | 1301 | hcd->self.controller, |
1299 | urb->transfer_buffer, | 1302 | urb->transfer_buffer, |
1300 | urb->transfer_buffer_length, | 1303 | urb->transfer_buffer_length, |
1301 | dir); | 1304 | dir); |
1302 | else if (hcd->driver->flags & HCD_LOCAL_MEM) { | 1305 | if (dma_mapping_error(hcd->self.controller, |
1306 | urb->transfer_dma)) | ||
1307 | return -EAGAIN; | ||
1308 | } else if (hcd->driver->flags & HCD_LOCAL_MEM) { | ||
1303 | ret = hcd_alloc_coherent( | 1309 | ret = hcd_alloc_coherent( |
1304 | urb->dev->bus, mem_flags, | 1310 | urb->dev->bus, mem_flags, |
1305 | &urb->transfer_dma, | 1311 | &urb->transfer_dma, |