xref: /openbmc/linux/include/media/videobuf-vmalloc.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*77512baaSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
287b9ad07SMauro Carvalho Chehab /*
387b9ad07SMauro Carvalho Chehab  * helper functions for vmalloc capture buffers
487b9ad07SMauro Carvalho Chehab  *
55d6aaf50SMagnus Damm  * The functions expect the hardware being able to scatter gather
687b9ad07SMauro Carvalho Chehab  * (i.e. the buffers are not linear in physical memory, but fragmented
787b9ad07SMauro Carvalho Chehab  * into PAGE_SIZE chunks).  They also assume the driver does not need
887b9ad07SMauro Carvalho Chehab  * to touch the video data.
987b9ad07SMauro Carvalho Chehab  *
1032590819SMauro Carvalho Chehab  * (c) 2007 Mauro Carvalho Chehab, <mchehab@kernel.org>
1187b9ad07SMauro Carvalho Chehab  */
1259d34489SMauro Carvalho Chehab #ifndef _VIDEOBUF_VMALLOC_H
1359d34489SMauro Carvalho Chehab #define _VIDEOBUF_VMALLOC_H
1487b9ad07SMauro Carvalho Chehab 
1587b9ad07SMauro Carvalho Chehab #include <media/videobuf-core.h>
1687b9ad07SMauro Carvalho Chehab 
1787b9ad07SMauro Carvalho Chehab /* --------------------------------------------------------------------- */
1887b9ad07SMauro Carvalho Chehab 
197a02264cSPawel Osciak struct videobuf_vmalloc_memory {
2087b9ad07SMauro Carvalho Chehab 	u32                 magic;
2187b9ad07SMauro Carvalho Chehab 
22bb6dbe74SLaurent Pinchart 	void                *vaddr;
2387b9ad07SMauro Carvalho Chehab 
247a02264cSPawel Osciak 	/* remap_vmalloc_range seems to need to run
257a02264cSPawel Osciak 	 * after mmap() on some cases */
2687b9ad07SMauro Carvalho Chehab 	struct vm_area_struct *vma;
2787b9ad07SMauro Carvalho Chehab };
2887b9ad07SMauro Carvalho Chehab 
2987b9ad07SMauro Carvalho Chehab void videobuf_queue_vmalloc_init(struct videobuf_queue *q,
3038a54f35SJonathan Corbet 			 const struct videobuf_queue_ops *ops,
31f8b0bca1SJonathan Corbet 			 struct device *dev,
3287b9ad07SMauro Carvalho Chehab 			 spinlock_t *irqlock,
3387b9ad07SMauro Carvalho Chehab 			 enum v4l2_buf_type type,
3487b9ad07SMauro Carvalho Chehab 			 enum v4l2_field field,
3587b9ad07SMauro Carvalho Chehab 			 unsigned int msize,
3608bff03eSHans Verkuil 			 void *priv,
3708bff03eSHans Verkuil 			 struct mutex *ext_lock);
3887b9ad07SMauro Carvalho Chehab 
3987b9ad07SMauro Carvalho Chehab void *videobuf_to_vmalloc(struct videobuf_buffer *buf);
4087b9ad07SMauro Carvalho Chehab 
4187b9ad07SMauro Carvalho Chehab void videobuf_vmalloc_free(struct videobuf_buffer *buf);
4259d34489SMauro Carvalho Chehab 
4359d34489SMauro Carvalho Chehab #endif
44