Lines Matching refs:urb
382 static void ci_hdrc_free_dma_aligned_buffer(struct urb *urb, bool copy_back)
386 if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
388 urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
390 temp = container_of(urb->transfer_buffer,
392 urb->transfer_buffer = temp->original_buffer;
394 if (copy_back && usb_urb_dir_in(urb)) {
397 if (usb_pipeisoc(urb->pipe))
398 length = urb->transfer_buffer_length;
400 length = urb->actual_length;
408 static int ci_hdrc_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
412 if (urb->num_sgs || urb->sg || urb->transfer_buffer_length == 0)
414 if (IS_ALIGNED((uintptr_t)urb->transfer_buffer, 4)
415 && IS_ALIGNED(urb->transfer_buffer_length, 4))
418 temp = kmalloc(sizeof(*temp) + ALIGN(urb->transfer_buffer_length, 4), mem_flags);
422 if (usb_urb_dir_out(urb))
423 memcpy(temp->data, urb->transfer_buffer,
424 urb->transfer_buffer_length);
426 temp->original_buffer = urb->transfer_buffer;
427 urb->transfer_buffer = temp->data;
428 urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER;
433 static int ci_hdrc_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
438 ret = ci_hdrc_alloc_dma_aligned_buffer(urb, mem_flags);
442 ret = usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
444 ci_hdrc_free_dma_aligned_buffer(urb, false);
449 static void ci_hdrc_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
451 usb_hcd_unmap_urb_for_dma(hcd, urb);
452 ci_hdrc_free_dma_aligned_buffer(urb, true);