Lines Matching refs:urb
288 static void free_dma_aligned_buffer(struct urb *urb)
293 if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
296 temp = container_of(urb->transfer_buffer,
299 if (usb_urb_dir_in(urb)) {
300 if (usb_pipeisoc(urb->pipe))
301 length = urb->transfer_buffer_length;
303 length = urb->actual_length;
307 urb->transfer_buffer = temp->old_xfer_buffer;
310 urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
313 static int alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
318 if (urb->num_sgs || urb->sg ||
319 urb->transfer_buffer_length == 0 ||
320 !((uintptr_t)urb->transfer_buffer & (TEGRA_USB_DMA_ALIGN - 1)))
324 kmalloc_size = urb->transfer_buffer_length +
334 temp->old_xfer_buffer = urb->transfer_buffer;
335 if (usb_urb_dir_out(urb))
336 memcpy(temp->data, urb->transfer_buffer,
337 urb->transfer_buffer_length);
338 urb->transfer_buffer = temp->data;
340 urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER;
345 static int tegra_ehci_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
350 ret = alloc_dma_aligned_buffer(urb, mem_flags);
354 ret = usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
356 free_dma_aligned_buffer(urb);
361 static void tegra_ehci_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
363 usb_hcd_unmap_urb_for_dma(hcd, urb);
364 free_dma_aligned_buffer(urb);