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 struct mutex mutex; /* Protects queue */ 45 46 unsigned int flags; 47 __u32 sequence; 48 49 unsigned int buf_used; 50 51 spinlock_t irqlock; /* Protects flags and irqqueue */ 52 struct list_head irqqueue; 53 }; 54 55 static inline int uvc_queue_streaming(struct uvc_video_queue *queue) 56 { 57 return vb2_is_streaming(&queue->queue); 58 } 59 60 #endif /* __KERNEL__ */ 61 62 #endif /* _UVC_QUEUE_H_ */ 63 64