|
@@ -1281,6 +1281,14 @@ void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_setup_for_dma);
|
|
|
|
|
|
+static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
|
|
|
+{
|
|
|
+ if (hcd->driver->unmap_urb_for_dma)
|
|
|
+ hcd->driver->unmap_urb_for_dma(hcd, urb);
|
|
|
+ else
|
|
|
+ usb_hcd_unmap_urb_for_dma(hcd, urb);
|
|
|
+}
|
|
|
+
|
|
|
void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
|
|
|
{
|
|
|
enum dma_data_direction dir;
|
|
@@ -1318,6 +1326,15 @@ EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_for_dma);
|
|
|
|
|
|
static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
|
|
|
gfp_t mem_flags)
|
|
|
+{
|
|
|
+ if (hcd->driver->map_urb_for_dma)
|
|
|
+ return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags);
|
|
|
+ else
|
|
|
+ return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
|
|
|
+}
|
|
|
+
|
|
|
+int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
|
|
|
+ gfp_t mem_flags)
|
|
|
{
|
|
|
enum dma_data_direction dir;
|
|
|
int ret = 0;
|
|
@@ -1414,6 +1431,7 @@ static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(usb_hcd_map_urb_for_dma);
|
|
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
|
@@ -1451,7 +1469,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
|
|
|
if (likely(status == 0)) {
|
|
|
status = hcd->driver->urb_enqueue(hcd, urb, mem_flags);
|
|
|
if (unlikely(status))
|
|
|
- usb_hcd_unmap_urb_for_dma(hcd, urb);
|
|
|
+ unmap_urb_for_dma(hcd, urb);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1557,7 +1575,7 @@ void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
|
|
|
!status))
|
|
|
status = -EREMOTEIO;
|
|
|
|
|
|
- usb_hcd_unmap_urb_for_dma(hcd, urb);
|
|
|
+ unmap_urb_for_dma(hcd, urb);
|
|
|
usbmon_urb_complete(&hcd->self, urb, status);
|
|
|
usb_unanchor_urb(urb);
|
|
|
|