2019-06-03 08:44:53 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2007-08-23 23:26:14 +04:00
/*
2008-04-22 21:42:13 +04:00
* helper functions for SG DMA video4linux capture buffers
2007-08-23 23:26:14 +04:00
*
2008-07-17 04:27:49 +04:00
* The functions expect the hardware being able to scatter gather
2007-08-23 23:26:14 +04:00
* ( i . e . the buffers are not linear in physical memory , but fragmented
* into PAGE_SIZE chunks ) . They also assume the driver does not need
* to touch the video data .
*
MAINTAINERS & files: Canonize the e-mails I use at files
From now on, I'll start using my @kernel.org as my development e-mail.
As such, let's remove the entries that point to the old
mchehab@s-opensource.com at MAINTAINERS file.
For the files written with a copyright with mchehab@s-opensource,
let's keep Samsung on their names, using mchehab+samsung@kernel.org,
in order to keep pointing to my employer, with sponsors the work.
For the files written before I join Samsung (on July, 4 2013),
let's just use mchehab@kernel.org.
For bug reports, we can simply point to just kernel.org, as
this will reach my mchehab+samsung inbox anyway.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Brian Warner <brian.warner@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
2018-04-25 12:34:48 +03:00
* ( c ) 2007 Mauro Carvalho Chehab , < mchehab @ kernel . org >
2007-08-23 23:26:14 +04:00
*
* Highly based on video - buf written originally by :
* ( c ) 2001 , 02 Gerd Knorr < kraxel @ bytesex . org >
MAINTAINERS & files: Canonize the e-mails I use at files
From now on, I'll start using my @kernel.org as my development e-mail.
As such, let's remove the entries that point to the old
mchehab@s-opensource.com at MAINTAINERS file.
For the files written with a copyright with mchehab@s-opensource,
let's keep Samsung on their names, using mchehab+samsung@kernel.org,
in order to keep pointing to my employer, with sponsors the work.
For the files written before I join Samsung (on July, 4 2013),
let's just use mchehab@kernel.org.
For bug reports, we can simply point to just kernel.org, as
this will reach my mchehab+samsung inbox anyway.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Brian Warner <brian.warner@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
2018-04-25 12:34:48 +03:00
* ( c ) 2006 Mauro Carvalho Chehab , < mchehab @ kernel . org >
2007-08-23 23:26:14 +04:00
* ( c ) 2006 Ted Walther and John Sokol
*/
2010-03-17 10:01:04 +03:00
# ifndef _VIDEOBUF_DMA_SG_H
# define _VIDEOBUF_DMA_SG_H
2007-08-23 23:26:14 +04:00
# include <media/videobuf-core.h>
/* --------------------------------------------------------------------- */
/*
* A small set of helper functions to manage buffers ( both userland
* and kernel ) for DMA .
*
* videobuf_dma_init_ * ( )
* creates a buffer . The userland version takes a userspace
* pointer + length . The kernel version just wants the size and
* does memory allocation too using vmalloc_32 ( ) .
*
* videobuf_dma_ * ( )
2020-06-23 10:09:10 +03:00
* see Documentation / core - api / dma - api - howto . rst , these functions to
2007-08-23 23:26:14 +04:00
* basically the same . The map function does also build a
* scatterlist for the buffer ( and unmap frees it . . . )
*
* videobuf_dma_free ( )
* no comment . . .
*
*/
struct videobuf_dmabuf {
u32 magic ;
/* for userland buffer */
int offset ;
2010-09-07 13:10:45 +04:00
size_t size ;
2007-08-23 23:26:14 +04:00
struct page * * pages ;
/* for kernel buffers */
2010-05-11 17:36:34 +04:00
void * vaddr ;
2014-06-12 13:53:38 +04:00
struct page * * vaddr_pages ;
dma_addr_t * dma_addr ;
struct device * dev ;
2007-08-23 23:26:14 +04:00
/* for overlay buffers (pci-pci dma) */
dma_addr_t bus_addr ;
/* common */
struct scatterlist * sglist ;
int sglen ;
int nr_pages ;
int direction ;
} ;
2010-03-17 10:01:04 +03:00
struct videobuf_dma_sg_memory {
2007-08-23 23:26:14 +04:00
u32 magic ;
/* for mmap'ed buffers */
struct videobuf_dmabuf dma ;
} ;
2010-05-11 17:36:30 +04:00
/*
* Scatter - gather DMA buffer API .
*
* These functions provide a simple way to create a page list and a
* scatter - gather list from a kernel , userspace of physical address and map the
* memory for DMA operation .
*
* Despite the name , this is totally unrelated to videobuf , except that
* videobuf - dma - sg uses the same API internally .
*/
2007-08-23 23:26:14 +04:00
int videobuf_dma_free ( struct videobuf_dmabuf * dma ) ;
2010-05-11 17:36:30 +04:00
int videobuf_dma_unmap ( struct device * dev , struct videobuf_dmabuf * dma ) ;
2010-03-17 10:01:04 +03:00
struct videobuf_dmabuf * videobuf_to_dma ( struct videobuf_buffer * buf ) ;
2007-08-23 23:26:14 +04:00
2008-04-22 21:42:13 +04:00
void * videobuf_sg_alloc ( size_t size ) ;
2007-08-23 23:26:14 +04:00
2010-03-17 10:01:04 +03:00
void videobuf_queue_sg_init ( struct videobuf_queue * q ,
2009-11-18 01:43:41 +03:00
const struct videobuf_queue_ops * ops ,
2008-04-22 21:42:13 +04:00
struct device * dev ,
2007-08-23 23:26:14 +04:00
spinlock_t * irqlock ,
enum v4l2_buf_type type ,
enum v4l2_field field ,
unsigned int msize ,
2010-09-21 00:39:46 +04:00
void * priv ,
struct mutex * ext_lock ) ;
2007-08-23 23:26:14 +04:00
2010-03-17 10:01:04 +03:00
# endif /* _VIDEOBUF_DMA_SG_H */