1004cc378SMarek Szyprowski /*
2004cc378SMarek Szyprowski  * videobuf2-memops.h - generic memory handling routines for videobuf2
3004cc378SMarek Szyprowski  *
4004cc378SMarek Szyprowski  * Copyright (C) 2010 Samsung Electronics
5004cc378SMarek Szyprowski  *
6004cc378SMarek Szyprowski  * Author: Pawel Osciak <p.osciak@samsung.com>
7004cc378SMarek Szyprowski  *	   Marek Szyprowski <m.szyprowski@samsung.com>
8004cc378SMarek Szyprowski  *
9004cc378SMarek Szyprowski  * This program is free software; you can redistribute it and/or modify
10004cc378SMarek Szyprowski  * it under the terms of the GNU General Public License as published by
11004cc378SMarek Szyprowski  * the Free Software Foundation.
12004cc378SMarek Szyprowski  */
13004cc378SMarek Szyprowski 
14004cc378SMarek Szyprowski #ifndef _MEDIA_VIDEOBUF2_MEMOPS_H
15004cc378SMarek Szyprowski #define _MEDIA_VIDEOBUF2_MEMOPS_H
16004cc378SMarek Szyprowski 
17004cc378SMarek Szyprowski #include <media/videobuf2-core.h>
18004cc378SMarek Szyprowski 
19004cc378SMarek Szyprowski /**
20004cc378SMarek Szyprowski  * vb2_vmarea_handler - common vma refcount tracking handler
21004cc378SMarek Szyprowski  * @refcount:	pointer to refcount entry in the buffer
22004cc378SMarek Szyprowski  * @put:	callback to function that decreases buffer refcount
23004cc378SMarek Szyprowski  * @arg:	argument for @put callback
24004cc378SMarek Szyprowski  */
25004cc378SMarek Szyprowski struct vb2_vmarea_handler {
26004cc378SMarek Szyprowski 	atomic_t		*refcount;
27004cc378SMarek Szyprowski 	void			(*put)(void *arg);
28004cc378SMarek Szyprowski 	void			*arg;
29004cc378SMarek Szyprowski };
30004cc378SMarek Szyprowski 
31004cc378SMarek Szyprowski extern const struct vm_operations_struct vb2_common_vm_ops;
32004cc378SMarek Szyprowski 
33004cc378SMarek Szyprowski int vb2_get_contig_userptr(unsigned long vaddr, unsigned long size,
34004cc378SMarek Szyprowski 			   struct vm_area_struct **res_vma, dma_addr_t *res_pa);
35004cc378SMarek Szyprowski 
36004cc378SMarek Szyprowski int vb2_mmap_pfn_range(struct vm_area_struct *vma, unsigned long paddr,
37004cc378SMarek Szyprowski 				unsigned long size,
38004cc378SMarek Szyprowski 				const struct vm_operations_struct *vm_ops,
39004cc378SMarek Szyprowski 				void *priv);
40004cc378SMarek Szyprowski 
41004cc378SMarek Szyprowski struct vm_area_struct *vb2_get_vma(struct vm_area_struct *vma);
42004cc378SMarek Szyprowski void vb2_put_vma(struct vm_area_struct *vma);
43004cc378SMarek Szyprowski 
44004cc378SMarek Szyprowski 
45004cc378SMarek Szyprowski #endif
46