root/include/media/videobuf-dma-sg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * helper functions for SG DMA video4linux capture buffers
   4  *
   5  * The functions expect the hardware being able to scatter gather
   6  * (i.e. the buffers are not linear in physical memory, but fragmented
   7  * into PAGE_SIZE chunks).  They also assume the driver does not need
   8  * to touch the video data.
   9  *
  10  * (c) 2007 Mauro Carvalho Chehab, <mchehab@kernel.org>
  11  *
  12  * Highly based on video-buf written originally by:
  13  * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org>
  14  * (c) 2006 Mauro Carvalho Chehab, <mchehab@kernel.org>
  15  * (c) 2006 Ted Walther and John Sokol
  16  */
  17 #ifndef _VIDEOBUF_DMA_SG_H
  18 #define _VIDEOBUF_DMA_SG_H
  19 
  20 #include <media/videobuf-core.h>
  21 
  22 /* --------------------------------------------------------------------- */
  23 
  24 /*
  25  * A small set of helper functions to manage buffers (both userland
  26  * and kernel) for DMA.
  27  *
  28  * videobuf_dma_init_*()
  29  *      creates a buffer.  The userland version takes a userspace
  30  *      pointer + length.  The kernel version just wants the size and
  31  *      does memory allocation too using vmalloc_32().
  32  *
  33  * videobuf_dma_*()
  34  *      see Documentation/DMA-API-HOWTO.txt, these functions to
  35  *      basically the same.  The map function does also build a
  36  *      scatterlist for the buffer (and unmap frees it ...)
  37  *
  38  * videobuf_dma_free()
  39  *      no comment ...
  40  *
  41  */
  42 
  43 struct videobuf_dmabuf {
  44         u32                 magic;
  45 
  46         /* for userland buffer */
  47         int                 offset;
  48         size_t              size;
  49         struct page         **pages;
  50 
  51         /* for kernel buffers */
  52         void                *vaddr;
  53         struct page         **vaddr_pages;
  54         dma_addr_t          *dma_addr;
  55         struct device       *dev;
  56 
  57         /* for overlay buffers (pci-pci dma) */
  58         dma_addr_t          bus_addr;
  59 
  60         /* common */
  61         struct scatterlist  *sglist;
  62         int                 sglen;
  63         int                 nr_pages;
  64         int                 direction;
  65 };
  66 
  67 struct videobuf_dma_sg_memory {
  68         u32                 magic;
  69 
  70         /* for mmap'ed buffers */
  71         struct videobuf_dmabuf  dma;
  72 };
  73 
  74 /*
  75  * Scatter-gather DMA buffer API.
  76  *
  77  * These functions provide a simple way to create a page list and a
  78  * scatter-gather list from a kernel, userspace of physical address and map the
  79  * memory for DMA operation.
  80  *
  81  * Despite the name, this is totally unrelated to videobuf, except that
  82  * videobuf-dma-sg uses the same API internally.
  83  */
  84 int videobuf_dma_free(struct videobuf_dmabuf *dma);
  85 
  86 int videobuf_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma);
  87 struct videobuf_dmabuf *videobuf_to_dma(struct videobuf_buffer *buf);
  88 
  89 void *videobuf_sg_alloc(size_t size);
  90 
  91 void videobuf_queue_sg_init(struct videobuf_queue *q,
  92                          const struct videobuf_queue_ops *ops,
  93                          struct device *dev,
  94                          spinlock_t *irqlock,
  95                          enum v4l2_buf_type type,
  96                          enum v4l2_field field,
  97                          unsigned int msize,
  98                          void *priv,
  99                          struct mutex *ext_lock);
 100 
 101 #endif /* _VIDEOBUF_DMA_SG_H */
 102 

/* [<][>][^][v][top][bottom][index][help] */