linux/drivers/usb/gadget/function/uvc_queue.h
<<
>>
Prefs
   1#ifndef _UVC_QUEUE_H_
   2#define _UVC_QUEUE_H_
   3
   4#ifdef __KERNEL__
   5
   6#include <linux/kernel.h>
   7#include <linux/poll.h>
   8#include <linux/videodev2.h>
   9#include <media/videobuf2-v4l2.h>
  10
  11/* Maximum frame size in bytes, for sanity checking. */
  12#define UVC_MAX_FRAME_SIZE      (16*1024*1024)
  13/* Maximum number of video buffers. */
  14#define UVC_MAX_VIDEO_BUFFERS   32
  15
  16/* ------------------------------------------------------------------------
  17 * Structures.
  18 */
  19
  20enum uvc_buffer_state {
  21        UVC_BUF_STATE_IDLE      = 0,
  22        UVC_BUF_STATE_QUEUED    = 1,
  23        UVC_BUF_STATE_ACTIVE    = 2,
  24        UVC_BUF_STATE_DONE      = 3,
  25        UVC_BUF_STATE_ERROR     = 4,
  26};
  27
  28struct uvc_buffer {
  29        struct vb2_v4l2_buffer buf;
  30        struct list_head queue;
  31
  32        enum uvc_buffer_state state;
  33        void *mem;
  34        unsigned int length;
  35        unsigned int bytesused;
  36};
  37
  38#define UVC_QUEUE_DISCONNECTED          (1 << 0)
  39#define UVC_QUEUE_DROP_INCOMPLETE       (1 << 1)
  40#define UVC_QUEUE_PAUSED                (1 << 2)
  41
  42struct uvc_video_queue {
  43        struct vb2_queue queue;
  44
  45        unsigned int flags;
  46        __u32 sequence;
  47
  48        unsigned int buf_used;
  49
  50        spinlock_t irqlock;     /* Protects flags and irqqueue */
  51        struct list_head irqqueue;
  52};
  53
  54static inline int uvc_queue_streaming(struct uvc_video_queue *queue)
  55{
  56        return vb2_is_streaming(&queue->queue);
  57}
  58
  59int uvcg_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type,
  60                    struct mutex *lock);
  61
  62void uvcg_free_buffers(struct uvc_video_queue *queue);
  63
  64int uvcg_alloc_buffers(struct uvc_video_queue *queue,
  65                       struct v4l2_requestbuffers *rb);
  66
  67int uvcg_query_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf);
  68
  69int uvcg_queue_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf);
  70
  71int uvcg_dequeue_buffer(struct uvc_video_queue *queue,
  72                        struct v4l2_buffer *buf, int nonblocking);
  73
  74unsigned int uvcg_queue_poll(struct uvc_video_queue *queue,
  75                             struct file *file, poll_table *wait);
  76
  77int uvcg_queue_mmap(struct uvc_video_queue *queue, struct vm_area_struct *vma);
  78
  79#ifndef CONFIG_MMU
  80unsigned long uvcg_queue_get_unmapped_area(struct uvc_video_queue *queue,
  81                                           unsigned long pgoff);
  82#endif /* CONFIG_MMU */
  83
  84void uvcg_queue_cancel(struct uvc_video_queue *queue, int disconnect);
  85
  86int uvcg_queue_enable(struct uvc_video_queue *queue, int enable);
  87
  88struct uvc_buffer *uvcg_queue_next_buffer(struct uvc_video_queue *queue,
  89                                          struct uvc_buffer *buf);
  90
  91struct uvc_buffer *uvcg_queue_head(struct uvc_video_queue *queue);
  92
  93#endif /* __KERNEL__ */
  94
  95#endif /* _UVC_QUEUE_H_ */
  96
  97