aboutsummaryrefslogtreecommitdiffstats
path: root/include/media/videobuf2-core.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/media/videobuf2-core.h')
-rw-r--r--include/media/videobuf2-core.h380
1 files changed, 345 insertions, 35 deletions
diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
index a4a9a55a0c42..ac5898a55fd9 100644
--- a/include/media/videobuf2-core.h
+++ b/include/media/videobuf2-core.h
@@ -20,6 +20,20 @@
20#define VB2_MAX_FRAME (32) 20#define VB2_MAX_FRAME (32)
21#define VB2_MAX_PLANES (8) 21#define VB2_MAX_PLANES (8)
22 22
23/**
24 * enum vb2_memory - type of memory model used to make the buffers visible
25 * on userspace.
26 *
27 * @VB2_MEMORY_UNKNOWN: Buffer status is unknown or it is not used yet on
28 * userspace.
29 * @VB2_MEMORY_MMAP: The buffers are allocated by the Kernel and it is
30 * memory mapped via mmap() ioctl. This model is
31 * also used when the user is using the buffers via
32 * read() or write() system calls.
33 * @VB2_MEMORY_USERPTR: The buffers was allocated in userspace and it is
34 * memory mapped via mmap() ioctl.
35 * @VB2_MEMORY_DMABUF: The buffers are passed to userspace via DMA buffer.
36 */
23enum vb2_memory { 37enum vb2_memory {
24 VB2_MEMORY_UNKNOWN = 0, 38 VB2_MEMORY_UNKNOWN = 0,
25 VB2_MEMORY_MMAP = 1, 39 VB2_MEMORY_MMAP = 1,
@@ -33,15 +47,15 @@ struct vb2_threadio_data;
33/** 47/**
34 * struct vb2_mem_ops - memory handling/memory allocator operations 48 * struct vb2_mem_ops - memory handling/memory allocator operations
35 * @alloc: allocate video memory and, optionally, allocator private data, 49 * @alloc: allocate video memory and, optionally, allocator private data,
36 * return NULL on failure or a pointer to allocator private, 50 * return ERR_PTR() on failure or a pointer to allocator private,
37 * per-buffer data on success; the returned private structure 51 * per-buffer data on success; the returned private structure
38 * will then be passed as buf_priv argument to other ops in this 52 * will then be passed as @buf_priv argument to other ops in this
39 * structure. Additional gfp_flags to use when allocating the 53 * structure. Additional gfp_flags to use when allocating the
40 * are also passed to this operation. These flags are from the 54 * are also passed to this operation. These flags are from the
41 * gfp_flags field of vb2_queue. 55 * gfp_flags field of vb2_queue.
42 * @put: inform the allocator that the buffer will no longer be used; 56 * @put: inform the allocator that the buffer will no longer be used;
43 * usually will result in the allocator freeing the buffer (if 57 * usually will result in the allocator freeing the buffer (if
44 * no other users of this buffer are present); the buf_priv 58 * no other users of this buffer are present); the @buf_priv
45 * argument is the allocator private per-buffer structure 59 * argument is the allocator private per-buffer structure
46 * previously returned from the alloc callback. 60 * previously returned from the alloc callback.
47 * @get_dmabuf: acquire userspace memory for a hardware operation; used for 61 * @get_dmabuf: acquire userspace memory for a hardware operation; used for
@@ -50,18 +64,18 @@ struct vb2_threadio_data;
50 * USERPTR memory types; vaddr is the address passed to the 64 * USERPTR memory types; vaddr is the address passed to the
51 * videobuf layer when queuing a video buffer of USERPTR type; 65 * videobuf layer when queuing a video buffer of USERPTR type;
52 * should return an allocator private per-buffer structure 66 * should return an allocator private per-buffer structure
53 * associated with the buffer on success, NULL on failure; 67 * associated with the buffer on success, ERR_PTR() on failure;
54 * the returned private structure will then be passed as buf_priv 68 * the returned private structure will then be passed as @buf_priv
55 * argument to other ops in this structure. 69 * argument to other ops in this structure.
56 * @put_userptr: inform the allocator that a USERPTR buffer will no longer 70 * @put_userptr: inform the allocator that a USERPTR buffer will no longer
57 * be used. 71 * be used.
58 * @attach_dmabuf: attach a shared struct dma_buf for a hardware operation; 72 * @attach_dmabuf: attach a shared struct dma_buf for a hardware operation;
59 * used for DMABUF memory types; dev is the alloc device 73 * used for DMABUF memory types; dev is the alloc device
60 * dbuf is the shared dma_buf; returns NULL on failure; 74 * dbuf is the shared dma_buf; returns ERR_PTR() on failure;
61 * allocator private per-buffer structure on success; 75 * allocator private per-buffer structure on success;
62 * this needs to be used for further accesses to the buffer. 76 * this needs to be used for further accesses to the buffer.
63 * @detach_dmabuf: inform the exporter of the buffer that the current DMABUF 77 * @detach_dmabuf: inform the exporter of the buffer that the current DMABUF
64 * buffer is no longer used; the buf_priv argument is the 78 * buffer is no longer used; the @buf_priv argument is the
65 * allocator private per-buffer structure previously returned 79 * allocator private per-buffer structure previously returned
66 * from the attach_dmabuf callback. 80 * from the attach_dmabuf callback.
67 * @map_dmabuf: request for access to the dmabuf from allocator; the allocator 81 * @map_dmabuf: request for access to the dmabuf from allocator; the allocator
@@ -95,11 +109,13 @@ struct vb2_threadio_data;
95 * 109 *
96 * #) Required ops for read/write access types: alloc, put, num_users, vaddr. 110 * #) Required ops for read/write access types: alloc, put, num_users, vaddr.
97 * 111 *
98 * #) Required ops for DMABUF types: attach_dmabuf, detach_dmabuf, map_dmabuf, unmap_dmabuf. 112 * #) Required ops for DMABUF types: attach_dmabuf, detach_dmabuf,
113 * map_dmabuf, unmap_dmabuf.
99 */ 114 */
100struct vb2_mem_ops { 115struct vb2_mem_ops {
101 void *(*alloc)(struct device *dev, unsigned long attrs, 116 void *(*alloc)(struct device *dev, unsigned long attrs,
102 unsigned long size, enum dma_data_direction dma_dir, 117 unsigned long size,
118 enum dma_data_direction dma_dir,
103 gfp_t gfp_flags); 119 gfp_t gfp_flags);
104 void (*put)(void *buf_priv); 120 void (*put)(void *buf_priv);
105 struct dma_buf *(*get_dmabuf)(void *buf_priv, unsigned long flags); 121 struct dma_buf *(*get_dmabuf)(void *buf_priv, unsigned long flags);
@@ -112,7 +128,8 @@ struct vb2_mem_ops {
112 void (*prepare)(void *buf_priv); 128 void (*prepare)(void *buf_priv);
113 void (*finish)(void *buf_priv); 129 void (*finish)(void *buf_priv);
114 130
115 void *(*attach_dmabuf)(struct device *dev, struct dma_buf *dbuf, 131 void *(*attach_dmabuf)(struct device *dev,
132 struct dma_buf *dbuf,
116 unsigned long size, 133 unsigned long size,
117 enum dma_data_direction dma_dir); 134 enum dma_data_direction dma_dir);
118 void (*detach_dmabuf)(void *buf_priv); 135 void (*detach_dmabuf)(void *buf_priv);
@@ -277,7 +294,7 @@ struct vb2_buffer {
277/** 294/**
278 * struct vb2_ops - driver-specific callbacks 295 * struct vb2_ops - driver-specific callbacks
279 * 296 *
280 * @queue_setup: called from %VIDIOC_REQBUFS and %VIDIOC_CREATE_BUFS 297 * @queue_setup: called from VIDIOC_REQBUFS() and VIDIOC_CREATE_BUFS()
281 * handlers before memory allocation. It can be called 298 * handlers before memory allocation. It can be called
282 * twice: if the original number of requested buffers 299 * twice: if the original number of requested buffers
283 * could not be allocated, then it will be called a 300 * could not be allocated, then it will be called a
@@ -288,11 +305,11 @@ struct vb2_buffer {
288 * buffer in \*num_planes, the size of each plane should be 305 * buffer in \*num_planes, the size of each plane should be
289 * set in the sizes\[\] array and optional per-plane 306 * set in the sizes\[\] array and optional per-plane
290 * allocator specific device in the alloc_devs\[\] array. 307 * allocator specific device in the alloc_devs\[\] array.
291 * When called from %VIDIOC_REQBUFS, \*num_planes == 0, the 308 * When called from VIDIOC_REQBUFS,() \*num_planes == 0,
292 * driver has to use the currently configured format to 309 * the driver has to use the currently configured format to
293 * determine the plane sizes and \*num_buffers is the total 310 * determine the plane sizes and \*num_buffers is the total
294 * number of buffers that are being allocated. When called 311 * number of buffers that are being allocated. When called
295 * from %VIDIOC_CREATE_BUFS, \*num_planes != 0 and it 312 * from VIDIOC_CREATE_BUFS,() \*num_planes != 0 and it
296 * describes the requested number of planes and sizes\[\] 313 * describes the requested number of planes and sizes\[\]
297 * contains the requested plane sizes. If either 314 * contains the requested plane sizes. If either
298 * \*num_planes or the requested sizes are invalid callback 315 * \*num_planes or the requested sizes are invalid callback
@@ -311,11 +328,11 @@ struct vb2_buffer {
311 * initialization failure (return != 0) will prevent 328 * initialization failure (return != 0) will prevent
312 * queue setup from completing successfully; optional. 329 * queue setup from completing successfully; optional.
313 * @buf_prepare: called every time the buffer is queued from userspace 330 * @buf_prepare: called every time the buffer is queued from userspace
314 * and from the %VIDIOC_PREPARE_BUF ioctl; drivers may 331 * and from the VIDIOC_PREPARE_BUF() ioctl; drivers may
315 * perform any initialization required before each 332 * perform any initialization required before each
316 * hardware operation in this callback; drivers can 333 * hardware operation in this callback; drivers can
317 * access/modify the buffer here as it is still synced for 334 * access/modify the buffer here as it is still synced for
318 * the CPU; drivers that support %VIDIOC_CREATE_BUFS must 335 * the CPU; drivers that support VIDIOC_CREATE_BUFS() must
319 * also validate the buffer size; if an error is returned, 336 * also validate the buffer size; if an error is returned,
320 * the buffer will not be queued in driver; optional. 337 * the buffer will not be queued in driver; optional.
321 * @buf_finish: called before every dequeue of the buffer back to 338 * @buf_finish: called before every dequeue of the buffer back to
@@ -339,24 +356,25 @@ struct vb2_buffer {
339 * driver can return an error if hardware fails, in that 356 * driver can return an error if hardware fails, in that
340 * case all buffers that have been already given by 357 * case all buffers that have been already given by
341 * the @buf_queue callback are to be returned by the driver 358 * the @buf_queue callback are to be returned by the driver
342 * by calling @vb2_buffer_done\(%VB2_BUF_STATE_QUEUED\). 359 * by calling vb2_buffer_done() with %VB2_BUF_STATE_QUEUED.
343 * If you need a minimum number of buffers before you can 360 * If you need a minimum number of buffers before you can
344 * start streaming, then set @min_buffers_needed in the 361 * start streaming, then set @min_buffers_needed in the
345 * vb2_queue structure. If that is non-zero then 362 * vb2_queue structure. If that is non-zero then
346 * start_streaming won't be called until at least that 363 * @start_streaming won't be called until at least that
347 * many buffers have been queued up by userspace. 364 * many buffers have been queued up by userspace.
348 * @stop_streaming: called when 'streaming' state must be disabled; driver 365 * @stop_streaming: called when 'streaming' state must be disabled; driver
349 * should stop any DMA transactions or wait until they 366 * should stop any DMA transactions or wait until they
350 * finish and give back all buffers it got from &buf_queue 367 * finish and give back all buffers it got from &buf_queue
351 * callback by calling @vb2_buffer_done\(\) with either 368 * callback by calling vb2_buffer_done() with either
352 * %VB2_BUF_STATE_DONE or %VB2_BUF_STATE_ERROR; may use 369 * %VB2_BUF_STATE_DONE or %VB2_BUF_STATE_ERROR; may use
353 * vb2_wait_for_all_buffers() function 370 * vb2_wait_for_all_buffers() function
354 * @buf_queue: passes buffer vb to the driver; driver may start 371 * @buf_queue: passes buffer vb to the driver; driver may start
355 * hardware operation on this buffer; driver should give 372 * hardware operation on this buffer; driver should give
356 * the buffer back by calling vb2_buffer_done() function; 373 * the buffer back by calling vb2_buffer_done() function;
357 * it is allways called after calling %VIDIOC_STREAMON ioctl; 374 * it is allways called after calling VIDIOC_STREAMON()
358 * might be called before start_streaming callback if user 375 * ioctl; might be called before @start_streaming callback
359 * pre-queued buffers before calling %VIDIOC_STREAMON. 376 * if user pre-queued buffers before calling
377 * VIDIOC_STREAMON().
360 */ 378 */
361struct vb2_ops { 379struct vb2_ops {
362 int (*queue_setup)(struct vb2_queue *q, 380 int (*queue_setup)(struct vb2_queue *q,
@@ -378,7 +396,7 @@ struct vb2_ops {
378}; 396};
379 397
380/** 398/**
381 * struct vb2_ops - driver-specific callbacks 399 * struct vb2_buf_ops - driver-specific callbacks
382 * 400 *
383 * @verify_planes_array: Verify that a given user space structure contains 401 * @verify_planes_array: Verify that a given user space structure contains
384 * enough planes for the buffer. This is called 402 * enough planes for the buffer. This is called
@@ -404,7 +422,7 @@ struct vb2_buf_ops {
404 * 422 *
405 * @type: private buffer type whose content is defined by the vb2-core 423 * @type: private buffer type whose content is defined by the vb2-core
406 * caller. For example, for V4L2, it should match 424 * caller. For example, for V4L2, it should match
407 * the V4L2_BUF_TYPE_* in include/uapi/linux/videodev2.h 425 * the types defined on enum &v4l2_buf_type
408 * @io_modes: supported io methods (see vb2_io_modes enum) 426 * @io_modes: supported io methods (see vb2_io_modes enum)
409 * @dev: device to use for the default allocation context if the driver 427 * @dev: device to use for the default allocation context if the driver
410 * doesn't fill in the @alloc_devs array. 428 * doesn't fill in the @alloc_devs array.
@@ -439,12 +457,12 @@ struct vb2_buf_ops {
439 * Typically this is 0, but it may be e.g. GFP_DMA or __GFP_DMA32 457 * Typically this is 0, but it may be e.g. GFP_DMA or __GFP_DMA32
440 * to force the buffer allocation to a specific memory zone. 458 * to force the buffer allocation to a specific memory zone.
441 * @min_buffers_needed: the minimum number of buffers needed before 459 * @min_buffers_needed: the minimum number of buffers needed before
442 * start_streaming() can be called. Used when a DMA engine 460 * @start_streaming can be called. Used when a DMA engine
443 * cannot be started unless at least this number of buffers 461 * cannot be started unless at least this number of buffers
444 * have been queued into the driver. 462 * have been queued into the driver.
445 */ 463 */
446/* 464/*
447 * Private elements (won't appear at the DocBook): 465 * Private elements (won't appear at the uAPI book):
448 * @mmap_lock: private mutex used when buffers are allocated/freed/mmapped 466 * @mmap_lock: private mutex used when buffers are allocated/freed/mmapped
449 * @memory: current memory type used 467 * @memory: current memory type used
450 * @bufs: videobuf buffer structures 468 * @bufs: videobuf buffer structures
@@ -457,7 +475,7 @@ struct vb2_buf_ops {
457 * @done_wq: waitqueue for processes waiting for buffers ready to be dequeued 475 * @done_wq: waitqueue for processes waiting for buffers ready to be dequeued
458 * @alloc_devs: memory type/allocator-specific per-plane device 476 * @alloc_devs: memory type/allocator-specific per-plane device
459 * @streaming: current streaming state 477 * @streaming: current streaming state
460 * @start_streaming_called: start_streaming() was called successfully and we 478 * @start_streaming_called: @start_streaming was called successfully and we
461 * started streaming. 479 * started streaming.
462 * @error: a fatal error occurred on the queue 480 * @error: a fatal error occurred on the queue
463 * @waiting_for_buffers: used in poll() to check if vb2 is still waiting for 481 * @waiting_for_buffers: used in poll() to check if vb2 is still waiting for
@@ -536,36 +554,286 @@ struct vb2_queue {
536#endif 554#endif
537}; 555};
538 556
557/**
558 * vb2_plane_vaddr() - Return a kernel virtual address of a given plane
559 * @vb: vb2_buffer to which the plane in question belongs to
560 * @plane_no: plane number for which the address is to be returned
561 *
562 * This function returns a kernel virtual address of a given plane if
563 * such a mapping exist, NULL otherwise.
564 */
539void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no); 565void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no);
566
567/**
568 * vb2_plane_cookie() - Return allocator specific cookie for the given plane
569 * @vb: vb2_buffer to which the plane in question belongs to
570 * @plane_no: plane number for which the cookie is to be returned
571 *
572 * This function returns an allocator specific cookie for a given plane if
573 * available, NULL otherwise. The allocator should provide some simple static
574 * inline function, which would convert this cookie to the allocator specific
575 * type that can be used directly by the driver to access the buffer. This can
576 * be for example physical address, pointer to scatter list or IOMMU mapping.
577 */
540void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no); 578void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no);
541 579
580/**
581 * vb2_buffer_done() - inform videobuf that an operation on a buffer is finished
582 * @vb: vb2_buffer returned from the driver
583 * @state: either %VB2_BUF_STATE_DONE if the operation finished
584 * successfully, %VB2_BUF_STATE_ERROR if the operation finished
585 * with an error or %VB2_BUF_STATE_QUEUED if the driver wants to
586 * requeue buffers. If start_streaming fails then it should return
587 * buffers with state %VB2_BUF_STATE_QUEUED to put them back into
588 * the queue.
589 *
590 * This function should be called by the driver after a hardware operation on
591 * a buffer is finished and the buffer may be returned to userspace. The driver
592 * cannot use this buffer anymore until it is queued back to it by videobuf
593 * by the means of &vb2_ops->buf_queue callback. Only buffers previously queued
594 * to the driver by &vb2_ops->buf_queue can be passed to this function.
595 *
596 * While streaming a buffer can only be returned in state DONE or ERROR.
597 * The start_streaming op can also return them in case the DMA engine cannot
598 * be started for some reason. In that case the buffers should be returned with
599 * state QUEUED.
600 */
542void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state); 601void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state);
602
603/**
604 * vb2_discard_done() - discard all buffers marked as DONE
605 * @q: videobuf2 queue
606 *
607 * This function is intended to be used with suspend/resume operations. It
608 * discards all 'done' buffers as they would be too old to be requested after
609 * resume.
610 *
611 * Drivers must stop the hardware and synchronize with interrupt handlers and/or
612 * delayed works before calling this function to make sure no buffer will be
613 * touched by the driver and/or hardware.
614 */
543void vb2_discard_done(struct vb2_queue *q); 615void vb2_discard_done(struct vb2_queue *q);
616
617/**
618 * vb2_wait_for_all_buffers() - wait until all buffers are given back to vb2
619 * @q: videobuf2 queue
620 *
621 * This function will wait until all buffers that have been given to the driver
622 * by &vb2_ops->buf_queue are given back to vb2 with vb2_buffer_done(). It
623 * doesn't call wait_prepare()/wait_finish() pair. It is intended to be called
624 * with all locks taken, for example from &vb2_ops->stop_streaming callback.
625 */
544int vb2_wait_for_all_buffers(struct vb2_queue *q); 626int vb2_wait_for_all_buffers(struct vb2_queue *q);
545 627
628/**
629 * vb2_core_querybuf() - query video buffer information
630 * @q: videobuf queue
631 * @index: id number of the buffer
632 * @pb: buffer struct passed from userspace
633 *
634 * Should be called from vidioc_querybuf ioctl handler in driver.
635 * The passed buffer should have been verified.
636 * This function fills the relevant information for the userspace.
637 */
546void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb); 638void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
639
640/**
641 * vb2_core_reqbufs() - Initiate streaming
642 * @q: videobuf2 queue
643 * @memory: memory type
644 * @count: requested buffer count
645 *
646 * Should be called from vidioc_reqbufs ioctl handler of a driver.
647 *
648 * This function:
649 *
650 * #) verifies streaming parameters passed from the userspace,
651 * #) sets up the queue,
652 * #) negotiates number of buffers and planes per buffer with the driver
653 * to be used during streaming,
654 * #) allocates internal buffer structures (struct vb2_buffer), according to
655 * the agreed parameters,
656 * #) for MMAP memory type, allocates actual video memory, using the
657 * memory handling/allocation routines provided during queue initialization
658 *
659 * If req->count is 0, all the memory will be freed instead.
660 * If the queue has been allocated previously (by a previous vb2_reqbufs) call
661 * and the queue is not busy, memory will be reallocated.
662 *
663 * The return values from this function are intended to be directly returned
664 * from vidioc_reqbufs handler in driver.
665 */
547int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, 666int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
548 unsigned int *count); 667 unsigned int *count);
668
669/**
670 * vb2_core_create_bufs() - Allocate buffers and any required auxiliary structs
671 * @q: videobuf2 queue
672 * @memory: memory type
673 * @count: requested buffer count
674 * @requested_planes: number of planes requested
675 * @requested_sizes: array with the size of the planes
676 *
677 * Should be called from VIDIOC_CREATE_BUFS() ioctl handler of a driver.
678 * This function:
679 *
680 * #) verifies parameter sanity
681 * #) calls the .queue_setup() queue operation
682 * #) performs any necessary memory allocations
683 *
684 * Return: the return values from this function are intended to be directly
685 * returned from VIDIOC_CREATE_BUFS() handler in driver.
686 */
549int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory, 687int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
550 unsigned int *count, unsigned requested_planes, 688 unsigned int *count, unsigned int requested_planes,
551 const unsigned int requested_sizes[]); 689 const unsigned int requested_sizes[]);
690
691/**
692 * vb2_core_prepare_buf() - Pass ownership of a buffer from userspace
693 * to the kernel
694 * @q: videobuf2 queue
695 * @index: id number of the buffer
696 * @pb: buffer structure passed from userspace to vidioc_prepare_buf
697 * handler in driver
698 *
699 * Should be called from vidioc_prepare_buf ioctl handler of a driver.
700 * The passed buffer should have been verified.
701 * This function calls buf_prepare callback in the driver (if provided),
702 * in which driver-specific buffer initialization can be performed,
703 *
704 * The return values from this function are intended to be directly returned
705 * from vidioc_prepare_buf handler in driver.
706 */
552int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb); 707int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb);
708
709/**
710 * vb2_core_qbuf() - Queue a buffer from userspace
711 *
712 * @q: videobuf2 queue
713 * @index: id number of the buffer
714 * @pb: buffer structure passed from userspace to vidioc_qbuf handler
715 * in driver
716 *
717 * Should be called from vidioc_qbuf ioctl handler of a driver.
718 * The passed buffer should have been verified.
719 *
720 * This function:
721 *
722 * #) if necessary, calls buf_prepare callback in the driver (if provided), in
723 * which driver-specific buffer initialization can be performed,
724 * #) if streaming is on, queues the buffer in driver by the means of
725 * &vb2_ops->buf_queue callback for processing.
726 *
727 * The return values from this function are intended to be directly returned
728 * from vidioc_qbuf handler in driver.
729 */
553int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb); 730int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb);
731
732/**
733 * vb2_core_dqbuf() - Dequeue a buffer to the userspace
734 * @q: videobuf2 queue
735 * @pindex: pointer to the buffer index. May be NULL
736 * @pb: buffer structure passed from userspace to vidioc_dqbuf handler
737 * in driver
738 * @nonblocking: if true, this call will not sleep waiting for a buffer if no
739 * buffers ready for dequeuing are present. Normally the driver
740 * would be passing (file->f_flags & O_NONBLOCK) here
741 *
742 * Should be called from vidioc_dqbuf ioctl handler of a driver.
743 * The passed buffer should have been verified.
744 *
745 * This function:
746 *
747 * #) calls buf_finish callback in the driver (if provided), in which
748 * driver can perform any additional operations that may be required before
749 * returning the buffer to userspace, such as cache sync,
750 * #) the buffer struct members are filled with relevant information for
751 * the userspace.
752 *
753 * The return values from this function are intended to be directly returned
754 * from vidioc_dqbuf handler in driver.
755 */
554int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb, 756int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb,
555 bool nonblocking); 757 bool nonblocking);
556 758
557int vb2_core_streamon(struct vb2_queue *q, unsigned int type); 759int vb2_core_streamon(struct vb2_queue *q, unsigned int type);
558int vb2_core_streamoff(struct vb2_queue *q, unsigned int type); 760int vb2_core_streamoff(struct vb2_queue *q, unsigned int type);
559 761
762/**
763 * vb2_core_expbuf() - Export a buffer as a file descriptor
764 * @q: videobuf2 queue
765 * @fd: file descriptor associated with DMABUF (set by driver) *
766 * @type: buffer type
767 * @index: id number of the buffer
768 * @plane: index of the plane to be exported, 0 for single plane queues
769 * @flags: flags for newly created file, currently only O_CLOEXEC is
770 * supported, refer to manual of open syscall for more details
771 *
772 * The return values from this function are intended to be directly returned
773 * from vidioc_expbuf handler in driver.
774 */
560int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type, 775int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type,
561 unsigned int index, unsigned int plane, unsigned int flags); 776 unsigned int index, unsigned int plane, unsigned int flags);
562 777
778/**
779 * vb2_core_queue_init() - initialize a videobuf2 queue
780 * @q: videobuf2 queue; this structure should be allocated in driver
781 *
782 * The vb2_queue structure should be allocated by the driver. The driver is
783 * responsible of clearing it's content and setting initial values for some
784 * required entries before calling this function.
785 * q->ops, q->mem_ops, q->type and q->io_modes are mandatory. Please refer
786 * to the struct vb2_queue description in include/media/videobuf2-core.h
787 * for more information.
788 */
563int vb2_core_queue_init(struct vb2_queue *q); 789int vb2_core_queue_init(struct vb2_queue *q);
790
791/**
792 * vb2_core_queue_release() - stop streaming, release the queue and free memory
793 * @q: videobuf2 queue
794 *
795 * This function stops streaming and performs necessary clean ups, including
796 * freeing video buffer memory. The driver is responsible for freeing
797 * the vb2_queue structure itself.
798 */
564void vb2_core_queue_release(struct vb2_queue *q); 799void vb2_core_queue_release(struct vb2_queue *q);
565 800
801/**
802 * vb2_queue_error() - signal a fatal error on the queue
803 * @q: videobuf2 queue
804 *
805 * Flag that a fatal unrecoverable error has occurred and wake up all processes
806 * waiting on the queue. Polling will now set POLLERR and queuing and dequeuing
807 * buffers will return -EIO.
808 *
809 * The error flag will be cleared when cancelling the queue, either from
810 * vb2_streamoff or vb2_queue_release. Drivers should thus not call this
811 * function before starting the stream, otherwise the error flag will remain set
812 * until the queue is released when closing the device node.
813 */
566void vb2_queue_error(struct vb2_queue *q); 814void vb2_queue_error(struct vb2_queue *q);
567 815
816/**
817 * vb2_mmap() - map video buffers into application address space
818 * @q: videobuf2 queue
819 * @vma: vma passed to the mmap file operation handler in the driver
820 *
821 * Should be called from mmap file operation handler of a driver.
822 * This function maps one plane of one of the available video buffers to
823 * userspace. To map whole video memory allocated on reqbufs, this function
824 * has to be called once per each plane per each buffer previously allocated.
825 *
826 * When the userspace application calls mmap, it passes to it an offset returned
827 * to it earlier by the means of vidioc_querybuf handler. That offset acts as
828 * a "cookie", which is then used to identify the plane to be mapped.
829 * This function finds a plane with a matching offset and a mapping is performed
830 * by the means of a provided memory operation.
831 *
832 * The return values from this function are intended to be directly returned
833 * from the mmap handler in driver.
834 */
568int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma); 835int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma);
836
569#ifndef CONFIG_MMU 837#ifndef CONFIG_MMU
570unsigned long vb2_get_unmapped_area(struct vb2_queue *q, 838unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
571 unsigned long addr, 839 unsigned long addr,
@@ -573,15 +841,36 @@ unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
573 unsigned long pgoff, 841 unsigned long pgoff,
574 unsigned long flags); 842 unsigned long flags);
575#endif 843#endif
844
845/**
846 * vb2_core_poll() - implements poll userspace operation
847 * @q: videobuf2 queue
848 * @file: file argument passed to the poll file operation handler
849 * @wait: wait argument passed to the poll file operation handler
850 *
851 * This function implements poll file operation handler for a driver.
852 * For CAPTURE queues, if a buffer is ready to be dequeued, the userspace will
853 * be informed that the file descriptor of a video device is available for
854 * reading.
855 * For OUTPUT queues, if a buffer is ready to be dequeued, the file descriptor
856 * will be reported as available for writing.
857 *
858 * The return values from this function are intended to be directly returned
859 * from poll handler in driver.
860 */
576unsigned int vb2_core_poll(struct vb2_queue *q, struct file *file, 861unsigned int vb2_core_poll(struct vb2_queue *q, struct file *file,
577 poll_table *wait); 862 poll_table *wait);
863
578size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, 864size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count,
579 loff_t *ppos, int nonblock); 865 loff_t *ppos, int nonblock);
580size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count, 866size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count,
581 loff_t *ppos, int nonblock); 867 loff_t *ppos, int nonblock);
582 868
583/* 869/**
584 * vb2_thread_fnc - callback function for use with vb2_thread 870 * typedef vb2_thread_fnc - callback function for use with vb2_thread
871 *
872 * @vb: pointer to struct &vb2_buffer
873 * @priv: pointer to a private pointer
585 * 874 *
586 * This is called whenever a buffer is dequeued in the thread. 875 * This is called whenever a buffer is dequeued in the thread.
587 */ 876 */
@@ -597,9 +886,11 @@ typedef int (*vb2_thread_fnc)(struct vb2_buffer *vb, void *priv);
597 * This starts a thread that will queue and dequeue until an error occurs 886 * This starts a thread that will queue and dequeue until an error occurs
598 * or @vb2_thread_stop is called. 887 * or @vb2_thread_stop is called.
599 * 888 *
600 * This function should not be used for anything else but the videobuf2-dvb 889 * .. attention::
601 * support. If you think you have another good use-case for this, then please 890 *
602 * contact the linux-media mailinglist first. 891 * This function should not be used for anything else but the videobuf2-dvb
892 * support. If you think you have another good use-case for this, then please
893 * contact the linux-media mailing list first.
603 */ 894 */
604int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv, 895int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv,
605 const char *thread_name); 896 const char *thread_name);
@@ -717,7 +1008,26 @@ static inline void vb2_clear_last_buffer_dequeued(struct vb2_queue *q)
717 * The following functions are not part of the vb2 core API, but are useful 1008 * The following functions are not part of the vb2 core API, but are useful
718 * functions for videobuf2-*. 1009 * functions for videobuf2-*.
719 */ 1010 */
1011
1012/**
1013 * vb2_buffer_in_use() - return true if the buffer is in use and
1014 * the queue cannot be freed (by the means of REQBUFS(0)) call
1015 *
1016 * @vb: buffer for which plane size should be returned
1017 * @q: videobuf queue
1018 */
720bool vb2_buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb); 1019bool vb2_buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb);
1020
1021/**
1022 * vb2_verify_memory_type() - Check whether the memory type and buffer type
1023 * passed to a buffer operation are compatible with the queue.
1024 *
1025 * @q: videobuf queue
1026 * @memory: memory model, as defined by enum &vb2_memory.
1027 * @type: private buffer type whose content is defined by the vb2-core
1028 * caller. For example, for V4L2, it should match
1029 * the types defined on enum &v4l2_buf_type
1030 */
721int vb2_verify_memory_type(struct vb2_queue *q, 1031int vb2_verify_memory_type(struct vb2_queue *q,
722 enum vb2_memory memory, unsigned int type); 1032 enum vb2_memory memory, unsigned int type);
723#endif /* _MEDIA_VIDEOBUF2_CORE_H */ 1033#endif /* _MEDIA_VIDEOBUF2_CORE_H */