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-core.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 20 enum 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 28 struct uvc_buffer { 29 struct vb2_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 42 struct 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 54 static inline int uvc_queue_streaming(struct uvc_video_queue *queue) 55 { 56 return vb2_is_streaming(&queue->queue); 57 } 58 59 int uvcg_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type, 60 struct mutex *lock); 61 62 void uvcg_free_buffers(struct uvc_video_queue *queue); 63 64 int uvcg_alloc_buffers(struct uvc_video_queue *queue, 65 struct v4l2_requestbuffers *rb); 66 67 int uvcg_query_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf); 68 69 int uvcg_queue_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf); 70 71 int uvcg_dequeue_buffer(struct uvc_video_queue *queue, 72 struct v4l2_buffer *buf, int nonblocking); 73 74 unsigned int uvcg_queue_poll(struct uvc_video_queue *queue, 75 struct file *file, poll_table *wait); 76 77 int uvcg_queue_mmap(struct uvc_video_queue *queue, struct vm_area_struct *vma); 78 79 #ifndef CONFIG_MMU 80 unsigned long uvcg_queue_get_unmapped_area(struct uvc_video_queue *queue, 81 unsigned long pgoff); 82 #endif /* CONFIG_MMU */ 83 84 void uvcg_queue_cancel(struct uvc_video_queue *queue, int disconnect); 85 86 int uvcg_queue_enable(struct uvc_video_queue *queue, int enable); 87 88 struct uvc_buffer *uvcg_queue_next_buffer(struct uvc_video_queue *queue, 89 struct uvc_buffer *buf); 90 91 struct uvc_buffer *uvcg_queue_head(struct uvc_video_queue *queue); 92 93 #endif /* __KERNEL__ */ 94 95 #endif /* _UVC_QUEUE_H_ */ 96 97