linux/include/media/videobuf2-core.h
<<
>>
Prefs
   1/*
   2 * videobuf2-core.h - Video Buffer 2 Core Framework
   3 *
   4 * Copyright (C) 2010 Samsung Electronics
   5 *
   6 * Author: Pawel Osciak <pawel@osciak.com>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation.
  11 */
  12#ifndef _MEDIA_VIDEOBUF2_CORE_H
  13#define _MEDIA_VIDEOBUF2_CORE_H
  14
  15#include <linux/mm_types.h>
  16#include <linux/mutex.h>
  17#include <linux/poll.h>
  18#include <linux/dma-buf.h>
  19
  20#define VB2_MAX_FRAME   (32)
  21#define VB2_MAX_PLANES  (8)
  22
  23enum vb2_memory {
  24        VB2_MEMORY_UNKNOWN      = 0,
  25        VB2_MEMORY_MMAP         = 1,
  26        VB2_MEMORY_USERPTR      = 2,
  27        VB2_MEMORY_DMABUF       = 4,
  28};
  29
  30struct vb2_alloc_ctx;
  31struct vb2_fileio_data;
  32struct vb2_threadio_data;
  33
  34/**
  35 * struct vb2_mem_ops - memory handling/memory allocator operations
  36 * @alloc:      allocate video memory and, optionally, allocator private data,
  37 *              return NULL on failure or a pointer to allocator private,
  38 *              per-buffer data on success; the returned private structure
  39 *              will then be passed as buf_priv argument to other ops in this
  40 *              structure. Additional gfp_flags to use when allocating the
  41 *              are also passed to this operation. These flags are from the
  42 *              gfp_flags field of vb2_queue.
  43 * @put:        inform the allocator that the buffer will no longer be used;
  44 *              usually will result in the allocator freeing the buffer (if
  45 *              no other users of this buffer are present); the buf_priv
  46 *              argument is the allocator private per-buffer structure
  47 *              previously returned from the alloc callback.
  48 * @get_dmabuf: acquire userspace memory for a hardware operation; used for
  49 *               DMABUF memory types.
  50 * @get_userptr: acquire userspace memory for a hardware operation; used for
  51 *               USERPTR memory types; vaddr is the address passed to the
  52 *               videobuf layer when queuing a video buffer of USERPTR type;
  53 *               should return an allocator private per-buffer structure
  54 *               associated with the buffer on success, NULL on failure;
  55 *               the returned private structure will then be passed as buf_priv
  56 *               argument to other ops in this structure.
  57 * @put_userptr: inform the allocator that a USERPTR buffer will no longer
  58 *               be used.
  59 * @attach_dmabuf: attach a shared struct dma_buf for a hardware operation;
  60 *                 used for DMABUF memory types; alloc_ctx is the alloc context
  61 *                 dbuf is the shared dma_buf; returns NULL on failure;
  62 *                 allocator private per-buffer structure on success;
  63 *                 this needs to be used for further accesses to the buffer.
  64 * @detach_dmabuf: inform the exporter of the buffer that the current DMABUF
  65 *                 buffer is no longer used; the buf_priv argument is the
  66 *                 allocator private per-buffer structure previously returned
  67 *                 from the attach_dmabuf callback.
  68 * @map_dmabuf: request for access to the dmabuf from allocator; the allocator
  69 *              of dmabuf is informed that this driver is going to use the
  70 *              dmabuf.
  71 * @unmap_dmabuf: releases access control to the dmabuf - allocator is notified
  72 *                that this driver is done using the dmabuf for now.
  73 * @prepare:    called every time the buffer is passed from userspace to the
  74 *              driver, useful for cache synchronisation, optional.
  75 * @finish:     called every time the buffer is passed back from the driver
  76 *              to the userspace, also optional.
  77 * @vaddr:      return a kernel virtual address to a given memory buffer
  78 *              associated with the passed private structure or NULL if no
  79 *              such mapping exists.
  80 * @cookie:     return allocator specific cookie for a given memory buffer
  81 *              associated with the passed private structure or NULL if not
  82 *              available.
  83 * @num_users:  return the current number of users of a memory buffer;
  84 *              return 1 if the videobuf layer (or actually the driver using
  85 *              it) is the only user.
  86 * @mmap:       setup a userspace mapping for a given memory buffer under
  87 *              the provided virtual memory region.
  88 *
  89 * Required ops for USERPTR types: get_userptr, put_userptr.
  90 * Required ops for MMAP types: alloc, put, num_users, mmap.
  91 * Required ops for read/write access types: alloc, put, num_users, vaddr.
  92 * Required ops for DMABUF types: attach_dmabuf, detach_dmabuf, map_dmabuf,
  93 *                                unmap_dmabuf.
  94 */
  95struct vb2_mem_ops {
  96        void            *(*alloc)(void *alloc_ctx, unsigned long size,
  97                                  enum dma_data_direction dma_dir,
  98                                  gfp_t gfp_flags);
  99        void            (*put)(void *buf_priv);
 100        struct dma_buf *(*get_dmabuf)(void *buf_priv, unsigned long flags);
 101
 102        void            *(*get_userptr)(void *alloc_ctx, unsigned long vaddr,
 103                                        unsigned long size,
 104                                        enum dma_data_direction dma_dir);
 105        void            (*put_userptr)(void *buf_priv);
 106
 107        void            (*prepare)(void *buf_priv);
 108        void            (*finish)(void *buf_priv);
 109
 110        void            *(*attach_dmabuf)(void *alloc_ctx, struct dma_buf *dbuf,
 111                                          unsigned long size,
 112                                          enum dma_data_direction dma_dir);
 113        void            (*detach_dmabuf)(void *buf_priv);
 114        int             (*map_dmabuf)(void *buf_priv);
 115        void            (*unmap_dmabuf)(void *buf_priv);
 116
 117        void            *(*vaddr)(void *buf_priv);
 118        void            *(*cookie)(void *buf_priv);
 119
 120        unsigned int    (*num_users)(void *buf_priv);
 121
 122        int             (*mmap)(void *buf_priv, struct vm_area_struct *vma);
 123};
 124
 125/**
 126 * struct vb2_plane - plane information
 127 * @mem_priv:   private data with this plane
 128 * @dbuf:       dma_buf - shared buffer object
 129 * @dbuf_mapped:        flag to show whether dbuf is mapped or not
 130 * @bytesused:  number of bytes occupied by data in the plane (payload)
 131 * @length:     size of this plane (NOT the payload) in bytes
 132 * @min_length: minimum required size of this plane (NOT the payload) in bytes.
 133 *              @length is always greater or equal to @min_length.
 134 * @offset:     when memory in the associated struct vb2_buffer is
 135 *              VB2_MEMORY_MMAP, equals the offset from the start of
 136 *              the device memory for this plane (or is a "cookie" that
 137 *              should be passed to mmap() called on the video node)
 138 * @userptr:    when memory is VB2_MEMORY_USERPTR, a userspace pointer
 139 *              pointing to this plane
 140 * @fd:         when memory is VB2_MEMORY_DMABUF, a userspace file
 141 *              descriptor associated with this plane
 142 * @m:          Union with memtype-specific data (@offset, @userptr or
 143 *              @fd).
 144 * @data_offset:        offset in the plane to the start of data; usually 0,
 145 *              unless there is a header in front of the data
 146 * Should contain enough information to be able to cover all the fields
 147 * of struct v4l2_plane at videodev2.h
 148 */
 149struct vb2_plane {
 150        void                    *mem_priv;
 151        struct dma_buf          *dbuf;
 152        unsigned int            dbuf_mapped;
 153        unsigned int            bytesused;
 154        unsigned int            length;
 155        unsigned int            min_length;
 156        union {
 157                unsigned int    offset;
 158                unsigned long   userptr;
 159                int             fd;
 160        } m;
 161        unsigned int            data_offset;
 162};
 163
 164/**
 165 * enum vb2_io_modes - queue access methods
 166 * @VB2_MMAP:           driver supports MMAP with streaming API
 167 * @VB2_USERPTR:        driver supports USERPTR with streaming API
 168 * @VB2_READ:           driver supports read() style access
 169 * @VB2_WRITE:          driver supports write() style access
 170 * @VB2_DMABUF:         driver supports DMABUF with streaming API
 171 */
 172enum vb2_io_modes {
 173        VB2_MMAP        = (1 << 0),
 174        VB2_USERPTR     = (1 << 1),
 175        VB2_READ        = (1 << 2),
 176        VB2_WRITE       = (1 << 3),
 177        VB2_DMABUF      = (1 << 4),
 178};
 179
 180/**
 181 * enum vb2_buffer_state - current video buffer state
 182 * @VB2_BUF_STATE_DEQUEUED:     buffer under userspace control
 183 * @VB2_BUF_STATE_PREPARING:    buffer is being prepared in videobuf
 184 * @VB2_BUF_STATE_PREPARED:     buffer prepared in videobuf and by the driver
 185 * @VB2_BUF_STATE_QUEUED:       buffer queued in videobuf, but not in driver
 186 * @VB2_BUF_STATE_REQUEUEING:   re-queue a buffer to the driver
 187 * @VB2_BUF_STATE_ACTIVE:       buffer queued in driver and possibly used
 188 *                              in a hardware operation
 189 * @VB2_BUF_STATE_DONE:         buffer returned from driver to videobuf, but
 190 *                              not yet dequeued to userspace
 191 * @VB2_BUF_STATE_ERROR:        same as above, but the operation on the buffer
 192 *                              has ended with an error, which will be reported
 193 *                              to the userspace when it is dequeued
 194 */
 195enum vb2_buffer_state {
 196        VB2_BUF_STATE_DEQUEUED,
 197        VB2_BUF_STATE_PREPARING,
 198        VB2_BUF_STATE_PREPARED,
 199        VB2_BUF_STATE_QUEUED,
 200        VB2_BUF_STATE_REQUEUEING,
 201        VB2_BUF_STATE_ACTIVE,
 202        VB2_BUF_STATE_DONE,
 203        VB2_BUF_STATE_ERROR,
 204};
 205
 206struct vb2_queue;
 207
 208/**
 209 * struct vb2_buffer - represents a video buffer
 210 * @vb2_queue:          the queue to which this driver belongs
 211 * @index:              id number of the buffer
 212 * @type:               buffer type
 213 * @memory:             the method, in which the actual data is passed
 214 * @num_planes:         number of planes in the buffer
 215 *                      on an internal driver queue
 216 * @planes:             private per-plane information; do not change
 217 * @timestamp:          frame timestamp in ns
 218 */
 219struct vb2_buffer {
 220        struct vb2_queue        *vb2_queue;
 221        unsigned int            index;
 222        unsigned int            type;
 223        unsigned int            memory;
 224        unsigned int            num_planes;
 225        struct vb2_plane        planes[VB2_MAX_PLANES];
 226        u64                     timestamp;
 227
 228        /* private: internal use only
 229         *
 230         * state:               current buffer state; do not change
 231         * queued_entry:        entry on the queued buffers list, which holds
 232         *                      all buffers queued from userspace
 233         * done_entry:          entry on the list that stores all buffers ready
 234         *                      to be dequeued to userspace
 235         */
 236        enum vb2_buffer_state   state;
 237
 238        struct list_head        queued_entry;
 239        struct list_head        done_entry;
 240#ifdef CONFIG_VIDEO_ADV_DEBUG
 241        /*
 242         * Counters for how often these buffer-related ops are
 243         * called. Used to check for unbalanced ops.
 244         */
 245        u32             cnt_mem_alloc;
 246        u32             cnt_mem_put;
 247        u32             cnt_mem_get_dmabuf;
 248        u32             cnt_mem_get_userptr;
 249        u32             cnt_mem_put_userptr;
 250        u32             cnt_mem_prepare;
 251        u32             cnt_mem_finish;
 252        u32             cnt_mem_attach_dmabuf;
 253        u32             cnt_mem_detach_dmabuf;
 254        u32             cnt_mem_map_dmabuf;
 255        u32             cnt_mem_unmap_dmabuf;
 256        u32             cnt_mem_vaddr;
 257        u32             cnt_mem_cookie;
 258        u32             cnt_mem_num_users;
 259        u32             cnt_mem_mmap;
 260
 261        u32             cnt_buf_init;
 262        u32             cnt_buf_prepare;
 263        u32             cnt_buf_finish;
 264        u32             cnt_buf_cleanup;
 265        u32             cnt_buf_queue;
 266
 267        /* This counts the number of calls to vb2_buffer_done() */
 268        u32             cnt_buf_done;
 269#endif
 270};
 271
 272/**
 273 * struct vb2_ops - driver-specific callbacks
 274 *
 275 * @queue_setup:        called from VIDIOC_REQBUFS and VIDIOC_CREATE_BUFS
 276 *                      handlers before memory allocation. It can be called
 277 *                      twice: if the original number of requested buffers
 278 *                      could not be allocated, then it will be called a
 279 *                      second time with the actually allocated number of
 280 *                      buffers to verify if that is OK.
 281 *                      The driver should return the required number of buffers
 282 *                      in *num_buffers, the required number of planes per
 283 *                      buffer in *num_planes, the size of each plane should be
 284 *                      set in the sizes[] array and optional per-plane
 285 *                      allocator specific context in the alloc_ctxs[] array.
 286 *                      When called from VIDIOC_REQBUFS, *num_planes == 0, the
 287 *                      driver has to use the currently configured format to
 288 *                      determine the plane sizes and *num_buffers is the total
 289 *                      number of buffers that are being allocated. When called
 290 *                      from VIDIOC_CREATE_BUFS, *num_planes != 0 and it
 291 *                      describes the requested number of planes and sizes[]
 292 *                      contains the requested plane sizes. If either
 293 *                      *num_planes or the requested sizes are invalid callback
 294 *                      must return -EINVAL. In this case *num_buffers are
 295 *                      being allocated additionally to q->num_buffers.
 296 * @wait_prepare:       release any locks taken while calling vb2 functions;
 297 *                      it is called before an ioctl needs to wait for a new
 298 *                      buffer to arrive; required to avoid a deadlock in
 299 *                      blocking access type.
 300 * @wait_finish:        reacquire all locks released in the previous callback;
 301 *                      required to continue operation after sleeping while
 302 *                      waiting for a new buffer to arrive.
 303 * @buf_init:           called once after allocating a buffer (in MMAP case)
 304 *                      or after acquiring a new USERPTR buffer; drivers may
 305 *                      perform additional buffer-related initialization;
 306 *                      initialization failure (return != 0) will prevent
 307 *                      queue setup from completing successfully; optional.
 308 * @buf_prepare:        called every time the buffer is queued from userspace
 309 *                      and from the VIDIOC_PREPARE_BUF ioctl; drivers may
 310 *                      perform any initialization required before each
 311 *                      hardware operation in this callback; drivers can
 312 *                      access/modify the buffer here as it is still synced for
 313 *                      the CPU; drivers that support VIDIOC_CREATE_BUFS must
 314 *                      also validate the buffer size; if an error is returned,
 315 *                      the buffer will not be queued in driver; optional.
 316 * @buf_finish:         called before every dequeue of the buffer back to
 317 *                      userspace; the buffer is synced for the CPU, so drivers
 318 *                      can access/modify the buffer contents; drivers may
 319 *                      perform any operations required before userspace
 320 *                      accesses the buffer; optional. The buffer state can be
 321 *                      one of the following: DONE and ERROR occur while
 322 *                      streaming is in progress, and the PREPARED state occurs
 323 *                      when the queue has been canceled and all pending
 324 *                      buffers are being returned to their default DEQUEUED
 325 *                      state. Typically you only have to do something if the
 326 *                      state is VB2_BUF_STATE_DONE, since in all other cases
 327 *                      the buffer contents will be ignored anyway.
 328 * @buf_cleanup:        called once before the buffer is freed; drivers may
 329 *                      perform any additional cleanup; optional.
 330 * @start_streaming:    called once to enter 'streaming' state; the driver may
 331 *                      receive buffers with @buf_queue callback before
 332 *                      @start_streaming is called; the driver gets the number
 333 *                      of already queued buffers in count parameter; driver
 334 *                      can return an error if hardware fails, in that case all
 335 *                      buffers that have been already given by the @buf_queue
 336 *                      callback are to be returned by the driver by calling
 337 *                      @vb2_buffer_done(VB2_BUF_STATE_QUEUED).
 338 *                      If you need a minimum number of buffers before you can
 339 *                      start streaming, then set @min_buffers_needed in the
 340 *                      vb2_queue structure. If that is non-zero then
 341 *                      start_streaming won't be called until at least that
 342 *                      many buffers have been queued up by userspace.
 343 * @stop_streaming:     called when 'streaming' state must be disabled; driver
 344 *                      should stop any DMA transactions or wait until they
 345 *                      finish and give back all buffers it got from buf_queue()
 346 *                      callback by calling @vb2_buffer_done() with either
 347 *                      VB2_BUF_STATE_DONE or VB2_BUF_STATE_ERROR; may use
 348 *                      vb2_wait_for_all_buffers() function
 349 * @buf_queue:          passes buffer vb to the driver; driver may start
 350 *                      hardware operation on this buffer; driver should give
 351 *                      the buffer back by calling vb2_buffer_done() function;
 352 *                      it is allways called after calling STREAMON ioctl;
 353 *                      might be called before start_streaming callback if user
 354 *                      pre-queued buffers before calling STREAMON.
 355 */
 356struct vb2_ops {
 357        int (*queue_setup)(struct vb2_queue *q,
 358                           unsigned int *num_buffers, unsigned int *num_planes,
 359                           unsigned int sizes[], void *alloc_ctxs[]);
 360
 361        void (*wait_prepare)(struct vb2_queue *q);
 362        void (*wait_finish)(struct vb2_queue *q);
 363
 364        int (*buf_init)(struct vb2_buffer *vb);
 365        int (*buf_prepare)(struct vb2_buffer *vb);
 366        void (*buf_finish)(struct vb2_buffer *vb);
 367        void (*buf_cleanup)(struct vb2_buffer *vb);
 368
 369        int (*start_streaming)(struct vb2_queue *q, unsigned int count);
 370        void (*stop_streaming)(struct vb2_queue *q);
 371
 372        void (*buf_queue)(struct vb2_buffer *vb);
 373};
 374
 375/**
 376 * struct vb2_ops - driver-specific callbacks
 377 *
 378 * @verify_planes_array: Verify that a given user space structure contains
 379 *                      enough planes for the buffer. This is called
 380 *                      for each dequeued buffer.
 381 * @fill_user_buffer:   given a vb2_buffer fill in the userspace structure.
 382 *                      For V4L2 this is a struct v4l2_buffer.
 383 * @fill_vb2_buffer:    given a userspace structure, fill in the vb2_buffer.
 384 *                      If the userspace structure is invalid, then this op
 385 *                      will return an error.
 386 * @copy_timestamp:     copy the timestamp from a userspace structure to
 387 *                      the vb2_buffer struct.
 388 */
 389struct vb2_buf_ops {
 390        int (*verify_planes_array)(struct vb2_buffer *vb, const void *pb);
 391        void (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);
 392        int (*fill_vb2_buffer)(struct vb2_buffer *vb, const void *pb,
 393                                struct vb2_plane *planes);
 394        void (*copy_timestamp)(struct vb2_buffer *vb, const void *pb);
 395};
 396
 397/**
 398 * struct vb2_queue - a videobuf queue
 399 *
 400 * @type:       private buffer type whose content is defined by the vb2-core
 401 *              caller. For example, for V4L2, it should match
 402 *              the V4L2_BUF_TYPE_* in include/uapi/linux/videodev2.h
 403 * @io_modes:   supported io methods (see vb2_io_modes enum)
 404 * @fileio_read_once:           report EOF after reading the first buffer
 405 * @fileio_write_immediately:   queue buffer after each write() call
 406 * @allow_zero_bytesused:       allow bytesused == 0 to be passed to the driver
 407 * @quirk_poll_must_check_waiting_for_buffers: Return POLLERR at poll when QBUF
 408 *              has not been called. This is a vb1 idiom that has been adopted
 409 *              also by vb2.
 410 * @lock:       pointer to a mutex that protects the vb2_queue struct. The
 411 *              driver can set this to a mutex to let the v4l2 core serialize
 412 *              the queuing ioctls. If the driver wants to handle locking
 413 *              itself, then this should be set to NULL. This lock is not used
 414 *              by the videobuf2 core API.
 415 * @owner:      The filehandle that 'owns' the buffers, i.e. the filehandle
 416 *              that called reqbufs, create_buffers or started fileio.
 417 *              This field is not used by the videobuf2 core API, but it allows
 418 *              drivers to easily associate an owner filehandle with the queue.
 419 * @ops:        driver-specific callbacks
 420 * @mem_ops:    memory allocator specific callbacks
 421 * @buf_ops:    callbacks to deliver buffer information
 422 *              between user-space and kernel-space
 423 * @drv_priv:   driver private data
 424 * @buf_struct_size: size of the driver-specific buffer structure;
 425 *              "0" indicates the driver doesn't want to use a custom buffer
 426 *              structure type. for example, sizeof(struct vb2_v4l2_buffer)
 427 *              will be used for v4l2.
 428 * @timestamp_flags: Timestamp flags; V4L2_BUF_FLAG_TIMESTAMP_* and
 429 *              V4L2_BUF_FLAG_TSTAMP_SRC_*
 430 * @gfp_flags:  additional gfp flags used when allocating the buffers.
 431 *              Typically this is 0, but it may be e.g. GFP_DMA or __GFP_DMA32
 432 *              to force the buffer allocation to a specific memory zone.
 433 * @min_buffers_needed: the minimum number of buffers needed before
 434 *              start_streaming() can be called. Used when a DMA engine
 435 *              cannot be started unless at least this number of buffers
 436 *              have been queued into the driver.
 437 */
 438/*
 439 * Private elements (won't appear at the DocBook):
 440 * @mmap_lock:  private mutex used when buffers are allocated/freed/mmapped
 441 * @memory:     current memory type used
 442 * @bufs:       videobuf buffer structures
 443 * @num_buffers: number of allocated/used buffers
 444 * @queued_list: list of buffers currently queued from userspace
 445 * @queued_count: number of buffers queued and ready for streaming.
 446 * @owned_by_drv_count: number of buffers owned by the driver
 447 * @done_list:  list of buffers ready to be dequeued to userspace
 448 * @done_lock:  lock to protect done_list list
 449 * @done_wq:    waitqueue for processes waiting for buffers ready to be dequeued
 450 * @alloc_ctx:  memory type/allocator-specific contexts for each plane
 451 * @streaming:  current streaming state
 452 * @start_streaming_called: start_streaming() was called successfully and we
 453 *              started streaming.
 454 * @error:      a fatal error occurred on the queue
 455 * @waiting_for_buffers: used in poll() to check if vb2 is still waiting for
 456 *              buffers. Only set for capture queues if qbuf has not yet been
 457 *              called since poll() needs to return POLLERR in that situation.
 458 * @is_multiplanar: set if buffer type is multiplanar
 459 * @is_output:  set if buffer type is output
 460 * @copy_timestamp: set if vb2-core should set timestamps
 461 * @last_buffer_dequeued: used in poll() and DQBUF to immediately return if the
 462 *              last decoded buffer was already dequeued. Set for capture queues
 463 *              when a buffer with the V4L2_BUF_FLAG_LAST is dequeued.
 464 * @fileio:     file io emulator internal data, used only if emulator is active
 465 * @threadio:   thread io internal data, used only if thread is active
 466 */
 467struct vb2_queue {
 468        unsigned int                    type;
 469        unsigned int                    io_modes;
 470        unsigned                        fileio_read_once:1;
 471        unsigned                        fileio_write_immediately:1;
 472        unsigned                        allow_zero_bytesused:1;
 473        unsigned                   quirk_poll_must_check_waiting_for_buffers:1;
 474
 475        struct mutex                    *lock;
 476        void                            *owner;
 477
 478        const struct vb2_ops            *ops;
 479        const struct vb2_mem_ops        *mem_ops;
 480        const struct vb2_buf_ops        *buf_ops;
 481
 482        void                            *drv_priv;
 483        unsigned int                    buf_struct_size;
 484        u32                             timestamp_flags;
 485        gfp_t                           gfp_flags;
 486        u32                             min_buffers_needed;
 487
 488        /* private: internal use only */
 489        struct mutex                    mmap_lock;
 490        unsigned int                    memory;
 491        struct vb2_buffer               *bufs[VB2_MAX_FRAME];
 492        unsigned int                    num_buffers;
 493
 494        struct list_head                queued_list;
 495        unsigned int                    queued_count;
 496
 497        atomic_t                        owned_by_drv_count;
 498        struct list_head                done_list;
 499        spinlock_t                      done_lock;
 500        wait_queue_head_t               done_wq;
 501
 502        void                            *alloc_ctx[VB2_MAX_PLANES];
 503
 504        unsigned int                    streaming:1;
 505        unsigned int                    start_streaming_called:1;
 506        unsigned int                    error:1;
 507        unsigned int                    waiting_for_buffers:1;
 508        unsigned int                    is_multiplanar:1;
 509        unsigned int                    is_output:1;
 510        unsigned int                    copy_timestamp:1;
 511        unsigned int                    last_buffer_dequeued:1;
 512
 513        struct vb2_fileio_data          *fileio;
 514        struct vb2_threadio_data        *threadio;
 515
 516#ifdef CONFIG_VIDEO_ADV_DEBUG
 517        /*
 518         * Counters for how often these queue-related ops are
 519         * called. Used to check for unbalanced ops.
 520         */
 521        u32                             cnt_queue_setup;
 522        u32                             cnt_wait_prepare;
 523        u32                             cnt_wait_finish;
 524        u32                             cnt_start_streaming;
 525        u32                             cnt_stop_streaming;
 526#endif
 527};
 528
 529void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no);
 530void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no);
 531
 532void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state);
 533void vb2_discard_done(struct vb2_queue *q);
 534int vb2_wait_for_all_buffers(struct vb2_queue *q);
 535
 536void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
 537int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
 538                unsigned int *count);
 539int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
 540                unsigned int *count, unsigned requested_planes,
 541                const unsigned int requested_sizes[]);
 542int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb);
 543int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb);
 544int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb,
 545                   bool nonblocking);
 546
 547int vb2_core_streamon(struct vb2_queue *q, unsigned int type);
 548int vb2_core_streamoff(struct vb2_queue *q, unsigned int type);
 549
 550int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type,
 551                unsigned int index, unsigned int plane, unsigned int flags);
 552
 553int vb2_core_queue_init(struct vb2_queue *q);
 554void vb2_core_queue_release(struct vb2_queue *q);
 555
 556void vb2_queue_error(struct vb2_queue *q);
 557
 558int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma);
 559#ifndef CONFIG_MMU
 560unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
 561                                    unsigned long addr,
 562                                    unsigned long len,
 563                                    unsigned long pgoff,
 564                                    unsigned long flags);
 565#endif
 566unsigned int vb2_core_poll(struct vb2_queue *q, struct file *file,
 567                poll_table *wait);
 568size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count,
 569                loff_t *ppos, int nonblock);
 570size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count,
 571                loff_t *ppos, int nonblock);
 572
 573/*
 574 * vb2_thread_fnc - callback function for use with vb2_thread
 575 *
 576 * This is called whenever a buffer is dequeued in the thread.
 577 */
 578typedef int (*vb2_thread_fnc)(struct vb2_buffer *vb, void *priv);
 579
 580/**
 581 * vb2_thread_start() - start a thread for the given queue.
 582 * @q:          videobuf queue
 583 * @fnc:        callback function
 584 * @priv:       priv pointer passed to the callback function
 585 * @thread_name:the name of the thread. This will be prefixed with "vb2-".
 586 *
 587 * This starts a thread that will queue and dequeue until an error occurs
 588 * or @vb2_thread_stop is called.
 589 *
 590 * This function should not be used for anything else but the videobuf2-dvb
 591 * support. If you think you have another good use-case for this, then please
 592 * contact the linux-media mailinglist first.
 593 */
 594int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv,
 595                     const char *thread_name);
 596
 597/**
 598 * vb2_thread_stop() - stop the thread for the given queue.
 599 * @q:          videobuf queue
 600 */
 601int vb2_thread_stop(struct vb2_queue *q);
 602
 603/**
 604 * vb2_is_streaming() - return streaming status of the queue
 605 * @q:          videobuf queue
 606 */
 607static inline bool vb2_is_streaming(struct vb2_queue *q)
 608{
 609        return q->streaming;
 610}
 611
 612/**
 613 * vb2_fileio_is_active() - return true if fileio is active.
 614 * @q:          videobuf queue
 615 *
 616 * This returns true if read() or write() is used to stream the data
 617 * as opposed to stream I/O. This is almost never an important distinction,
 618 * except in rare cases. One such case is that using read() or write() to
 619 * stream a format using V4L2_FIELD_ALTERNATE is not allowed since there
 620 * is no way you can pass the field information of each buffer to/from
 621 * userspace. A driver that supports this field format should check for
 622 * this in the queue_setup op and reject it if this function returns true.
 623 */
 624static inline bool vb2_fileio_is_active(struct vb2_queue *q)
 625{
 626        return q->fileio;
 627}
 628
 629/**
 630 * vb2_is_busy() - return busy status of the queue
 631 * @q:          videobuf queue
 632 *
 633 * This function checks if queue has any buffers allocated.
 634 */
 635static inline bool vb2_is_busy(struct vb2_queue *q)
 636{
 637        return (q->num_buffers > 0);
 638}
 639
 640/**
 641 * vb2_get_drv_priv() - return driver private data associated with the queue
 642 * @q:          videobuf queue
 643 */
 644static inline void *vb2_get_drv_priv(struct vb2_queue *q)
 645{
 646        return q->drv_priv;
 647}
 648
 649/**
 650 * vb2_set_plane_payload() - set bytesused for the plane plane_no
 651 * @vb:         buffer for which plane payload should be set
 652 * @plane_no:   plane number for which payload should be set
 653 * @size:       payload in bytes
 654 */
 655static inline void vb2_set_plane_payload(struct vb2_buffer *vb,
 656                                 unsigned int plane_no, unsigned long size)
 657{
 658        if (plane_no < vb->num_planes)
 659                vb->planes[plane_no].bytesused = size;
 660}
 661
 662/**
 663 * vb2_get_plane_payload() - get bytesused for the plane plane_no
 664 * @vb:         buffer for which plane payload should be set
 665 * @plane_no:   plane number for which payload should be set
 666 */
 667static inline unsigned long vb2_get_plane_payload(struct vb2_buffer *vb,
 668                                 unsigned int plane_no)
 669{
 670        if (plane_no < vb->num_planes)
 671                return vb->planes[plane_no].bytesused;
 672        return 0;
 673}
 674
 675/**
 676 * vb2_plane_size() - return plane size in bytes
 677 * @vb:         buffer for which plane size should be returned
 678 * @plane_no:   plane number for which size should be returned
 679 */
 680static inline unsigned long
 681vb2_plane_size(struct vb2_buffer *vb, unsigned int plane_no)
 682{
 683        if (plane_no < vb->num_planes)
 684                return vb->planes[plane_no].length;
 685        return 0;
 686}
 687
 688/**
 689 * vb2_start_streaming_called() - return streaming status of driver
 690 * @q:          videobuf queue
 691 */
 692static inline bool vb2_start_streaming_called(struct vb2_queue *q)
 693{
 694        return q->start_streaming_called;
 695}
 696
 697/**
 698 * vb2_clear_last_buffer_dequeued() - clear last buffer dequeued flag of queue
 699 * @q:          videobuf queue
 700 */
 701static inline void vb2_clear_last_buffer_dequeued(struct vb2_queue *q)
 702{
 703        q->last_buffer_dequeued = false;
 704}
 705
 706/*
 707 * The following functions are not part of the vb2 core API, but are useful
 708 * functions for videobuf2-*.
 709 */
 710bool vb2_buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb);
 711int vb2_verify_memory_type(struct vb2_queue *q,
 712                enum vb2_memory memory, unsigned int type);
 713#endif /* _MEDIA_VIDEOBUF2_CORE_H */
 714