return ret;
}
-/*
- * isp_video_buffer_prepare_kernel - Build scatter list for a kernel-allocated
- * buffer
- *
- * Retrieve the sgtable using the DMA API.
- */
-static int isp_video_buffer_prepare_kernel(struct isp_video_buffer *buf)
-{
- struct isp_video_fh *vfh = isp_video_queue_to_isp_video_fh(buf->queue);
- struct isp_video *video = vfh->video;
-
- return dma_get_sgtable(video->isp->dev, &buf->sgt, buf->vaddr,
- buf->dma, PAGE_ALIGN(buf->vbuf.length));
-}
-
/*
* isp_video_buffer_cleanup - Release pages for a userspace VMA.
*
? DMA_FROM_DEVICE : DMA_TO_DEVICE;
dma_unmap_sg_attrs(buf->queue->dev, buf->sgt.sgl,
buf->sgt.orig_nents, direction, &attrs);
+ sg_free_table(&buf->sgt);
}
- sg_free_table(&buf->sgt);
-
if (buf->pages != NULL) {
isp_video_buffer_lock_vma(buf, 0);
*
* - validating VMAs (userspace buffers only)
* - locking pages and VMAs into memory (userspace buffers only)
- * - building page and scatter-gather lists
+ * - building page and scatter-gather lists (userspace buffers only)
* - mapping buffers for DMA operation
* - performing driver-specific preparation
*
switch (buf->vbuf.memory) {
case V4L2_MEMORY_MMAP:
- ret = isp_video_buffer_prepare_kernel(buf);
- if (ret < 0)
- goto done;
+ ret = 0;
break;
case V4L2_MEMORY_USERPTR:
* @vaddr: Memory virtual address (for kernel buffers)
* @vm_flags: Buffer VMA flags (for userspace buffers)
* @npages: Number of pages (for userspace buffers)
+ * @sgt: Scatter gather table (for userspace buffers)
* @pages: Pages table (for userspace non-VM_PFNMAP buffers)
- * @sgt: Scatter gather table
* @vbuf: V4L2 buffer
* @irqlist: List head for insertion into IRQ queue
* @state: Current buffer state
/* For userspace buffers. */
vm_flags_t vm_flags;
unsigned int npages;
- struct page **pages;
-
- /* For all buffers. */
struct sg_table sgt;
+ /* For non-VM_PFNMAP userspace buffers. */
+ struct page **pages;
+
/* Touched by the interrupt handler. */
struct v4l2_buffer vbuf;
struct list_head irqlist;