Commit | Line | Data |
---|---|---|
cdda479f LP |
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 | ||
10 | /* Maximum frame size in bytes, for sanity checking. */ | |
11 | #define UVC_MAX_FRAME_SIZE (16*1024*1024) | |
12 | /* Maximum number of video buffers. */ | |
13 | #define UVC_MAX_VIDEO_BUFFERS 32 | |
14 | ||
15 | /* ------------------------------------------------------------------------ | |
16 | * Structures. | |
17 | */ | |
18 | ||
19 | enum uvc_buffer_state { | |
20 | UVC_BUF_STATE_IDLE = 0, | |
21 | UVC_BUF_STATE_QUEUED = 1, | |
22 | UVC_BUF_STATE_ACTIVE = 2, | |
23 | UVC_BUF_STATE_DONE = 3, | |
24 | UVC_BUF_STATE_ERROR = 4, | |
25 | }; | |
26 | ||
27 | struct uvc_buffer { | |
28 | unsigned long vma_use_count; | |
29 | struct list_head stream; | |
30 | ||
31 | /* Touched by interrupt handler. */ | |
32 | struct v4l2_buffer buf; | |
33 | struct list_head queue; | |
34 | wait_queue_head_t wait; | |
35 | enum uvc_buffer_state state; | |
36 | }; | |
37 | ||
38 | #define UVC_QUEUE_STREAMING (1 << 0) | |
39 | #define UVC_QUEUE_DISCONNECTED (1 << 1) | |
40 | #define UVC_QUEUE_DROP_INCOMPLETE (1 << 2) | |
41 | #define UVC_QUEUE_PAUSED (1 << 3) | |
42 | ||
43 | struct uvc_video_queue { | |
44 | enum v4l2_buf_type type; | |
45 | ||
46 | void *mem; | |
47 | unsigned int flags; | |
48 | __u32 sequence; | |
49 | ||
50 | unsigned int count; | |
51 | unsigned int buf_size; | |
52 | unsigned int buf_used; | |
53 | struct uvc_buffer buffer[UVC_MAX_VIDEO_BUFFERS]; | |
54 | struct mutex mutex; /* protects buffers and mainqueue */ | |
55 | spinlock_t irqlock; /* protects irqqueue */ | |
56 | ||
57 | struct list_head mainqueue; | |
58 | struct list_head irqqueue; | |
59 | }; | |
60 | ||
cdda479f LP |
61 | static inline int uvc_queue_streaming(struct uvc_video_queue *queue) |
62 | { | |
63 | return queue->flags & UVC_QUEUE_STREAMING; | |
64 | } | |
cdda479f LP |
65 | |
66 | #endif /* __KERNEL__ */ | |
67 | ||
68 | #endif /* _UVC_QUEUE_H_ */ | |
69 |