usb: gadget: uvc: Set the V4L2 buffer field to V4L2_FIELD_NONE
[linux-2.6-microblaze.git] / drivers / usb / gadget / uvc_queue.c
1 /*
2  *      uvc_queue.c  --  USB Video Class driver - Buffers management
3  *
4  *      Copyright (C) 2005-2010
5  *          Laurent Pinchart (laurent.pinchart@ideasonboard.com)
6  *
7  *      This program is free software; you can redistribute it and/or modify
8  *      it under the terms of the GNU General Public License as published by
9  *      the Free Software Foundation; either version 2 of the License, or
10  *      (at your option) any later version.
11  */
12
13 #include <linux/atomic.h>
14 #include <linux/kernel.h>
15 #include <linux/mm.h>
16 #include <linux/list.h>
17 #include <linux/module.h>
18 #include <linux/usb.h>
19 #include <linux/videodev2.h>
20 #include <linux/vmalloc.h>
21 #include <linux/wait.h>
22
23 #include <media/v4l2-common.h>
24 #include <media/videobuf2-vmalloc.h>
25
26 #include "uvc.h"
27
28 /* ------------------------------------------------------------------------
29  * Video buffers queue management.
30  *
31  * Video queues is initialized by uvc_queue_init(). The function performs
32  * basic initialization of the uvc_video_queue struct and never fails.
33  *
34  * Video buffers are managed by videobuf2. The driver uses a mutex to protect
35  * the videobuf2 queue operations by serializing calls to videobuf2 and a
36  * spinlock to protect the IRQ queue that holds the buffers to be processed by
37  * the driver.
38  */
39
40 /* -----------------------------------------------------------------------------
41  * videobuf2 queue operations
42  */
43
44 static int uvc_queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
45                            unsigned int *nbuffers, unsigned int *nplanes,
46                            unsigned int sizes[], void *alloc_ctxs[])
47 {
48         struct uvc_video_queue *queue = vb2_get_drv_priv(vq);
49         struct uvc_video *video = container_of(queue, struct uvc_video, queue);
50
51         if (*nbuffers > UVC_MAX_VIDEO_BUFFERS)
52                 *nbuffers = UVC_MAX_VIDEO_BUFFERS;
53
54         *nplanes = 1;
55
56         sizes[0] = video->imagesize;
57
58         return 0;
59 }
60
61 static int uvc_buffer_prepare(struct vb2_buffer *vb)
62 {
63         struct uvc_video_queue *queue = vb2_get_drv_priv(vb->vb2_queue);
64         struct uvc_buffer *buf = container_of(vb, struct uvc_buffer, buf);
65
66         if (vb->v4l2_buf.type == V4L2_BUF_TYPE_VIDEO_OUTPUT &&
67             vb2_get_plane_payload(vb, 0) > vb2_plane_size(vb, 0)) {
68                 uvc_trace(UVC_TRACE_CAPTURE, "[E] Bytes used out of bounds.\n");
69                 return -EINVAL;
70         }
71
72         if (unlikely(queue->flags & UVC_QUEUE_DISCONNECTED))
73                 return -ENODEV;
74
75         buf->state = UVC_BUF_STATE_QUEUED;
76         buf->mem = vb2_plane_vaddr(vb, 0);
77         buf->length = vb2_plane_size(vb, 0);
78         if (vb->v4l2_buf.type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
79                 buf->bytesused = 0;
80         else
81                 buf->bytesused = vb2_get_plane_payload(vb, 0);
82
83         return 0;
84 }
85
86 static void uvc_buffer_queue(struct vb2_buffer *vb)
87 {
88         struct uvc_video_queue *queue = vb2_get_drv_priv(vb->vb2_queue);
89         struct uvc_buffer *buf = container_of(vb, struct uvc_buffer, buf);
90         unsigned long flags;
91
92         spin_lock_irqsave(&queue->irqlock, flags);
93
94         if (likely(!(queue->flags & UVC_QUEUE_DISCONNECTED))) {
95                 list_add_tail(&buf->queue, &queue->irqqueue);
96         } else {
97                 /* If the device is disconnected return the buffer to userspace
98                  * directly. The next QBUF call will fail with -ENODEV.
99                  */
100                 buf->state = UVC_BUF_STATE_ERROR;
101                 vb2_buffer_done(&buf->buf, VB2_BUF_STATE_ERROR);
102         }
103
104         spin_unlock_irqrestore(&queue->irqlock, flags);
105 }
106
107 static void uvc_wait_prepare(struct vb2_queue *vq)
108 {
109         struct uvc_video_queue *queue = vb2_get_drv_priv(vq);
110
111         mutex_unlock(&queue->mutex);
112 }
113
114 static void uvc_wait_finish(struct vb2_queue *vq)
115 {
116         struct uvc_video_queue *queue = vb2_get_drv_priv(vq);
117
118         mutex_lock(&queue->mutex);
119 }
120
121 static struct vb2_ops uvc_queue_qops = {
122         .queue_setup = uvc_queue_setup,
123         .buf_prepare = uvc_buffer_prepare,
124         .buf_queue = uvc_buffer_queue,
125         .wait_prepare = uvc_wait_prepare,
126         .wait_finish = uvc_wait_finish,
127 };
128
129 static int uvc_queue_init(struct uvc_video_queue *queue,
130                           enum v4l2_buf_type type)
131 {
132         int ret;
133
134         queue->queue.type = type;
135         queue->queue.io_modes = VB2_MMAP | VB2_USERPTR;
136         queue->queue.drv_priv = queue;
137         queue->queue.buf_struct_size = sizeof(struct uvc_buffer);
138         queue->queue.ops = &uvc_queue_qops;
139         queue->queue.mem_ops = &vb2_vmalloc_memops;
140         ret = vb2_queue_init(&queue->queue);
141         if (ret)
142                 return ret;
143
144         mutex_init(&queue->mutex);
145         spin_lock_init(&queue->irqlock);
146         INIT_LIST_HEAD(&queue->irqqueue);
147         queue->flags = 0;
148
149         return 0;
150 }
151
152 /*
153  * Free the video buffers.
154  */
155 static void uvc_free_buffers(struct uvc_video_queue *queue)
156 {
157         mutex_lock(&queue->mutex);
158         vb2_queue_release(&queue->queue);
159         mutex_unlock(&queue->mutex);
160 }
161
162 /*
163  * Allocate the video buffers.
164  */
165 static int uvc_alloc_buffers(struct uvc_video_queue *queue,
166                              struct v4l2_requestbuffers *rb)
167 {
168         int ret;
169
170         mutex_lock(&queue->mutex);
171         ret = vb2_reqbufs(&queue->queue, rb);
172         mutex_unlock(&queue->mutex);
173
174         return ret ? ret : rb->count;
175 }
176
177 static int uvc_query_buffer(struct uvc_video_queue *queue,
178                             struct v4l2_buffer *buf)
179 {
180         int ret;
181
182         mutex_lock(&queue->mutex);
183         ret = vb2_querybuf(&queue->queue, buf);
184         mutex_unlock(&queue->mutex);
185
186         return ret;
187 }
188
189 static int uvc_queue_buffer(struct uvc_video_queue *queue,
190                             struct v4l2_buffer *buf)
191 {
192         unsigned long flags;
193         int ret;
194
195         mutex_lock(&queue->mutex);
196         ret = vb2_qbuf(&queue->queue, buf);
197         if (ret < 0)
198                 goto done;
199
200         spin_lock_irqsave(&queue->irqlock, flags);
201         ret = (queue->flags & UVC_QUEUE_PAUSED) != 0;
202         queue->flags &= ~UVC_QUEUE_PAUSED;
203         spin_unlock_irqrestore(&queue->irqlock, flags);
204
205 done:
206         mutex_unlock(&queue->mutex);
207         return ret;
208 }
209
210 /*
211  * Dequeue a video buffer. If nonblocking is false, block until a buffer is
212  * available.
213  */
214 static int uvc_dequeue_buffer(struct uvc_video_queue *queue,
215                               struct v4l2_buffer *buf, int nonblocking)
216 {
217         int ret;
218
219         mutex_lock(&queue->mutex);
220         ret = vb2_dqbuf(&queue->queue, buf, nonblocking);
221         mutex_unlock(&queue->mutex);
222
223         return ret;
224 }
225
226 /*
227  * Poll the video queue.
228  *
229  * This function implements video queue polling and is intended to be used by
230  * the device poll handler.
231  */
232 static unsigned int uvc_queue_poll(struct uvc_video_queue *queue,
233                                    struct file *file, poll_table *wait)
234 {
235         unsigned int ret;
236
237         mutex_lock(&queue->mutex);
238         ret = vb2_poll(&queue->queue, file, wait);
239         mutex_unlock(&queue->mutex);
240
241         return ret;
242 }
243
244 static int uvc_queue_mmap(struct uvc_video_queue *queue,
245                           struct vm_area_struct *vma)
246 {
247         int ret;
248
249         mutex_lock(&queue->mutex);
250         ret = vb2_mmap(&queue->queue, vma);
251         mutex_unlock(&queue->mutex);
252
253         return ret;
254 }
255
256 #ifndef CONFIG_MMU
257 /*
258  * Get unmapped area.
259  *
260  * NO-MMU arch need this function to make mmap() work correctly.
261  */
262 static unsigned long uvc_queue_get_unmapped_area(struct uvc_video_queue *queue,
263                 unsigned long pgoff)
264 {
265         unsigned long ret;
266
267         mutex_lock(&queue->mutex);
268         ret = vb2_get_unmapped_area(&queue->queue, 0, 0, pgoff, 0);
269         mutex_unlock(&queue->mutex);
270         return ret;
271 }
272 #endif
273
274 /*
275  * Cancel the video buffers queue.
276  *
277  * Cancelling the queue marks all buffers on the irq queue as erroneous,
278  * wakes them up and removes them from the queue.
279  *
280  * If the disconnect parameter is set, further calls to uvc_queue_buffer will
281  * fail with -ENODEV.
282  *
283  * This function acquires the irq spinlock and can be called from interrupt
284  * context.
285  */
286 static void uvc_queue_cancel(struct uvc_video_queue *queue, int disconnect)
287 {
288         struct uvc_buffer *buf;
289         unsigned long flags;
290
291         spin_lock_irqsave(&queue->irqlock, flags);
292         while (!list_empty(&queue->irqqueue)) {
293                 buf = list_first_entry(&queue->irqqueue, struct uvc_buffer,
294                                        queue);
295                 list_del(&buf->queue);
296                 buf->state = UVC_BUF_STATE_ERROR;
297                 vb2_buffer_done(&buf->buf, VB2_BUF_STATE_ERROR);
298         }
299         /* This must be protected by the irqlock spinlock to avoid race
300          * conditions between uvc_queue_buffer and the disconnection event that
301          * could result in an interruptible wait in uvc_dequeue_buffer. Do not
302          * blindly replace this logic by checking for the UVC_DEV_DISCONNECTED
303          * state outside the queue code.
304          */
305         if (disconnect)
306                 queue->flags |= UVC_QUEUE_DISCONNECTED;
307         spin_unlock_irqrestore(&queue->irqlock, flags);
308 }
309
310 /*
311  * Enable or disable the video buffers queue.
312  *
313  * The queue must be enabled before starting video acquisition and must be
314  * disabled after stopping it. This ensures that the video buffers queue
315  * state can be properly initialized before buffers are accessed from the
316  * interrupt handler.
317  *
318  * Enabling the video queue initializes parameters (such as sequence number,
319  * sync pattern, ...). If the queue is already enabled, return -EBUSY.
320  *
321  * Disabling the video queue cancels the queue and removes all buffers from
322  * the main queue.
323  *
324  * This function can't be called from interrupt context. Use
325  * uvc_queue_cancel() instead.
326  */
327 static int uvc_queue_enable(struct uvc_video_queue *queue, int enable)
328 {
329         unsigned long flags;
330         int ret = 0;
331
332         mutex_lock(&queue->mutex);
333         if (enable) {
334                 ret = vb2_streamon(&queue->queue, queue->queue.type);
335                 if (ret < 0)
336                         goto done;
337
338                 queue->sequence = 0;
339                 queue->buf_used = 0;
340         } else {
341                 ret = vb2_streamoff(&queue->queue, queue->queue.type);
342                 if (ret < 0)
343                         goto done;
344
345                 spin_lock_irqsave(&queue->irqlock, flags);
346                 INIT_LIST_HEAD(&queue->irqqueue);
347
348                 /*
349                  * FIXME: We need to clear the DISCONNECTED flag to ensure that
350                  * applications will be able to queue buffers for the next
351                  * streaming run. However, clearing it here doesn't guarantee
352                  * that the device will be reconnected in the meantime.
353                  */
354                 queue->flags &= ~UVC_QUEUE_DISCONNECTED;
355                 spin_unlock_irqrestore(&queue->irqlock, flags);
356         }
357
358 done:
359         mutex_unlock(&queue->mutex);
360         return ret;
361 }
362
363 /* called with &queue_irqlock held.. */
364 static struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue,
365                                                 struct uvc_buffer *buf)
366 {
367         struct uvc_buffer *nextbuf;
368
369         if ((queue->flags & UVC_QUEUE_DROP_INCOMPLETE) &&
370              buf->length != buf->bytesused) {
371                 buf->state = UVC_BUF_STATE_QUEUED;
372                 vb2_set_plane_payload(&buf->buf, 0, 0);
373                 return buf;
374         }
375
376         list_del(&buf->queue);
377         if (!list_empty(&queue->irqqueue))
378                 nextbuf = list_first_entry(&queue->irqqueue, struct uvc_buffer,
379                                            queue);
380         else
381                 nextbuf = NULL;
382
383         buf->buf.v4l2_buf.field = V4L2_FIELD_NONE;
384         buf->buf.v4l2_buf.sequence = queue->sequence++;
385         v4l2_get_timestamp(&buf->buf.v4l2_buf.timestamp);
386
387         vb2_set_plane_payload(&buf->buf, 0, buf->bytesused);
388         vb2_buffer_done(&buf->buf, VB2_BUF_STATE_DONE);
389
390         return nextbuf;
391 }
392
393 static struct uvc_buffer *uvc_queue_head(struct uvc_video_queue *queue)
394 {
395         struct uvc_buffer *buf = NULL;
396
397         if (!list_empty(&queue->irqqueue))
398                 buf = list_first_entry(&queue->irqqueue, struct uvc_buffer,
399                                        queue);
400         else
401                 queue->flags |= UVC_QUEUE_PAUSED;
402
403         return buf;
404 }
405