]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/media/v4l2-core/videobuf2-core.c
Merge branch 'for-3.10-async' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
[karo-tx-linux.git] / drivers / media / v4l2-core / videobuf2-core.c
1 /*
2  * videobuf2-core.c - V4L2 driver helper framework
3  *
4  * Copyright (C) 2010 Samsung Electronics
5  *
6  * Author: Pawel Osciak <pawel@osciak.com>
7  *         Marek Szyprowski <m.szyprowski@samsung.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation.
12  */
13
14 #include <linux/err.h>
15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 #include <linux/mm.h>
18 #include <linux/poll.h>
19 #include <linux/slab.h>
20 #include <linux/sched.h>
21
22 #include <media/v4l2-dev.h>
23 #include <media/v4l2-fh.h>
24 #include <media/v4l2-event.h>
25 #include <media/videobuf2-core.h>
26
27 static int debug;
28 module_param(debug, int, 0644);
29
30 #define dprintk(level, fmt, arg...)                                     \
31         do {                                                            \
32                 if (debug >= level)                                     \
33                         printk(KERN_DEBUG "vb2: " fmt, ## arg);         \
34         } while (0)
35
36 #define call_memop(q, op, args...)                                      \
37         (((q)->mem_ops->op) ?                                           \
38                 ((q)->mem_ops->op(args)) : 0)
39
40 #define call_qop(q, op, args...)                                        \
41         (((q)->ops->op) ? ((q)->ops->op(args)) : 0)
42
43 #define V4L2_BUFFER_MASK_FLAGS  (V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_QUEUED | \
44                                  V4L2_BUF_FLAG_DONE | V4L2_BUF_FLAG_ERROR | \
45                                  V4L2_BUF_FLAG_PREPARED | \
46                                  V4L2_BUF_FLAG_TIMESTAMP_MASK)
47
48 /**
49  * __vb2_buf_mem_alloc() - allocate video memory for the given buffer
50  */
51 static int __vb2_buf_mem_alloc(struct vb2_buffer *vb)
52 {
53         struct vb2_queue *q = vb->vb2_queue;
54         void *mem_priv;
55         int plane;
56
57         /* Allocate memory for all planes in this buffer */
58         for (plane = 0; plane < vb->num_planes; ++plane) {
59                 mem_priv = call_memop(q, alloc, q->alloc_ctx[plane],
60                                       q->plane_sizes[plane]);
61                 if (IS_ERR_OR_NULL(mem_priv))
62                         goto free;
63
64                 /* Associate allocator private data with this plane */
65                 vb->planes[plane].mem_priv = mem_priv;
66                 vb->v4l2_planes[plane].length = q->plane_sizes[plane];
67         }
68
69         return 0;
70 free:
71         /* Free already allocated memory if one of the allocations failed */
72         for (; plane > 0; --plane) {
73                 call_memop(q, put, vb->planes[plane - 1].mem_priv);
74                 vb->planes[plane - 1].mem_priv = NULL;
75         }
76
77         return -ENOMEM;
78 }
79
80 /**
81  * __vb2_buf_mem_free() - free memory of the given buffer
82  */
83 static void __vb2_buf_mem_free(struct vb2_buffer *vb)
84 {
85         struct vb2_queue *q = vb->vb2_queue;
86         unsigned int plane;
87
88         for (plane = 0; plane < vb->num_planes; ++plane) {
89                 call_memop(q, put, vb->planes[plane].mem_priv);
90                 vb->planes[plane].mem_priv = NULL;
91                 dprintk(3, "Freed plane %d of buffer %d\n", plane,
92                         vb->v4l2_buf.index);
93         }
94 }
95
96 /**
97  * __vb2_buf_userptr_put() - release userspace memory associated with
98  * a USERPTR buffer
99  */
100 static void __vb2_buf_userptr_put(struct vb2_buffer *vb)
101 {
102         struct vb2_queue *q = vb->vb2_queue;
103         unsigned int plane;
104
105         for (plane = 0; plane < vb->num_planes; ++plane) {
106                 if (vb->planes[plane].mem_priv)
107                         call_memop(q, put_userptr, vb->planes[plane].mem_priv);
108                 vb->planes[plane].mem_priv = NULL;
109         }
110 }
111
112 /**
113  * __vb2_plane_dmabuf_put() - release memory associated with
114  * a DMABUF shared plane
115  */
116 static void __vb2_plane_dmabuf_put(struct vb2_queue *q, struct vb2_plane *p)
117 {
118         if (!p->mem_priv)
119                 return;
120
121         if (p->dbuf_mapped)
122                 call_memop(q, unmap_dmabuf, p->mem_priv);
123
124         call_memop(q, detach_dmabuf, p->mem_priv);
125         dma_buf_put(p->dbuf);
126         memset(p, 0, sizeof(*p));
127 }
128
129 /**
130  * __vb2_buf_dmabuf_put() - release memory associated with
131  * a DMABUF shared buffer
132  */
133 static void __vb2_buf_dmabuf_put(struct vb2_buffer *vb)
134 {
135         struct vb2_queue *q = vb->vb2_queue;
136         unsigned int plane;
137
138         for (plane = 0; plane < vb->num_planes; ++plane)
139                 __vb2_plane_dmabuf_put(q, &vb->planes[plane]);
140 }
141
142 /**
143  * __setup_offsets() - setup unique offsets ("cookies") for every plane in
144  * every buffer on the queue
145  */
146 static void __setup_offsets(struct vb2_queue *q, unsigned int n)
147 {
148         unsigned int buffer, plane;
149         struct vb2_buffer *vb;
150         unsigned long off;
151
152         if (q->num_buffers) {
153                 struct v4l2_plane *p;
154                 vb = q->bufs[q->num_buffers - 1];
155                 p = &vb->v4l2_planes[vb->num_planes - 1];
156                 off = PAGE_ALIGN(p->m.mem_offset + p->length);
157         } else {
158                 off = 0;
159         }
160
161         for (buffer = q->num_buffers; buffer < q->num_buffers + n; ++buffer) {
162                 vb = q->bufs[buffer];
163                 if (!vb)
164                         continue;
165
166                 for (plane = 0; plane < vb->num_planes; ++plane) {
167                         vb->v4l2_planes[plane].length = q->plane_sizes[plane];
168                         vb->v4l2_planes[plane].m.mem_offset = off;
169
170                         dprintk(3, "Buffer %d, plane %d offset 0x%08lx\n",
171                                         buffer, plane, off);
172
173                         off += vb->v4l2_planes[plane].length;
174                         off = PAGE_ALIGN(off);
175                 }
176         }
177 }
178
179 /**
180  * __vb2_queue_alloc() - allocate videobuf buffer structures and (for MMAP type)
181  * video buffer memory for all buffers/planes on the queue and initializes the
182  * queue
183  *
184  * Returns the number of buffers successfully allocated.
185  */
186 static int __vb2_queue_alloc(struct vb2_queue *q, enum v4l2_memory memory,
187                              unsigned int num_buffers, unsigned int num_planes)
188 {
189         unsigned int buffer;
190         struct vb2_buffer *vb;
191         int ret;
192
193         for (buffer = 0; buffer < num_buffers; ++buffer) {
194                 /* Allocate videobuf buffer structures */
195                 vb = kzalloc(q->buf_struct_size, GFP_KERNEL);
196                 if (!vb) {
197                         dprintk(1, "Memory alloc for buffer struct failed\n");
198                         break;
199                 }
200
201                 /* Length stores number of planes for multiplanar buffers */
202                 if (V4L2_TYPE_IS_MULTIPLANAR(q->type))
203                         vb->v4l2_buf.length = num_planes;
204
205                 vb->state = VB2_BUF_STATE_DEQUEUED;
206                 vb->vb2_queue = q;
207                 vb->num_planes = num_planes;
208                 vb->v4l2_buf.index = q->num_buffers + buffer;
209                 vb->v4l2_buf.type = q->type;
210                 vb->v4l2_buf.memory = memory;
211
212                 /* Allocate video buffer memory for the MMAP type */
213                 if (memory == V4L2_MEMORY_MMAP) {
214                         ret = __vb2_buf_mem_alloc(vb);
215                         if (ret) {
216                                 dprintk(1, "Failed allocating memory for "
217                                                 "buffer %d\n", buffer);
218                                 kfree(vb);
219                                 break;
220                         }
221                         /*
222                          * Call the driver-provided buffer initialization
223                          * callback, if given. An error in initialization
224                          * results in queue setup failure.
225                          */
226                         ret = call_qop(q, buf_init, vb);
227                         if (ret) {
228                                 dprintk(1, "Buffer %d %p initialization"
229                                         " failed\n", buffer, vb);
230                                 __vb2_buf_mem_free(vb);
231                                 kfree(vb);
232                                 break;
233                         }
234                 }
235
236                 q->bufs[q->num_buffers + buffer] = vb;
237         }
238
239         __setup_offsets(q, buffer);
240
241         dprintk(1, "Allocated %d buffers, %d plane(s) each\n",
242                         buffer, num_planes);
243
244         return buffer;
245 }
246
247 /**
248  * __vb2_free_mem() - release all video buffer memory for a given queue
249  */
250 static void __vb2_free_mem(struct vb2_queue *q, unsigned int buffers)
251 {
252         unsigned int buffer;
253         struct vb2_buffer *vb;
254
255         for (buffer = q->num_buffers - buffers; buffer < q->num_buffers;
256              ++buffer) {
257                 vb = q->bufs[buffer];
258                 if (!vb)
259                         continue;
260
261                 /* Free MMAP buffers or release USERPTR buffers */
262                 if (q->memory == V4L2_MEMORY_MMAP)
263                         __vb2_buf_mem_free(vb);
264                 else if (q->memory == V4L2_MEMORY_DMABUF)
265                         __vb2_buf_dmabuf_put(vb);
266                 else
267                         __vb2_buf_userptr_put(vb);
268         }
269 }
270
271 /**
272  * __vb2_queue_free() - free buffers at the end of the queue - video memory and
273  * related information, if no buffers are left return the queue to an
274  * uninitialized state. Might be called even if the queue has already been freed.
275  */
276 static void __vb2_queue_free(struct vb2_queue *q, unsigned int buffers)
277 {
278         unsigned int buffer;
279
280         /* Call driver-provided cleanup function for each buffer, if provided */
281         if (q->ops->buf_cleanup) {
282                 for (buffer = q->num_buffers - buffers; buffer < q->num_buffers;
283                      ++buffer) {
284                         if (NULL == q->bufs[buffer])
285                                 continue;
286                         q->ops->buf_cleanup(q->bufs[buffer]);
287                 }
288         }
289
290         /* Release video buffer memory */
291         __vb2_free_mem(q, buffers);
292
293         /* Free videobuf buffers */
294         for (buffer = q->num_buffers - buffers; buffer < q->num_buffers;
295              ++buffer) {
296                 kfree(q->bufs[buffer]);
297                 q->bufs[buffer] = NULL;
298         }
299
300         q->num_buffers -= buffers;
301         if (!q->num_buffers)
302                 q->memory = 0;
303         INIT_LIST_HEAD(&q->queued_list);
304 }
305
306 /**
307  * __verify_planes_array() - verify that the planes array passed in struct
308  * v4l2_buffer from userspace can be safely used
309  */
310 static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer *b)
311 {
312         if (!V4L2_TYPE_IS_MULTIPLANAR(b->type))
313                 return 0;
314
315         /* Is memory for copying plane information present? */
316         if (NULL == b->m.planes) {
317                 dprintk(1, "Multi-planar buffer passed but "
318                            "planes array not provided\n");
319                 return -EINVAL;
320         }
321
322         if (b->length < vb->num_planes || b->length > VIDEO_MAX_PLANES) {
323                 dprintk(1, "Incorrect planes array length, "
324                            "expected %d, got %d\n", vb->num_planes, b->length);
325                 return -EINVAL;
326         }
327
328         return 0;
329 }
330
331 /**
332  * __buffer_in_use() - return true if the buffer is in use and
333  * the queue cannot be freed (by the means of REQBUFS(0)) call
334  */
335 static bool __buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb)
336 {
337         unsigned int plane;
338         for (plane = 0; plane < vb->num_planes; ++plane) {
339                 void *mem_priv = vb->planes[plane].mem_priv;
340                 /*
341                  * If num_users() has not been provided, call_memop
342                  * will return 0, apparently nobody cares about this
343                  * case anyway. If num_users() returns more than 1,
344                  * we are not the only user of the plane's memory.
345                  */
346                 if (mem_priv && call_memop(q, num_users, mem_priv) > 1)
347                         return true;
348         }
349         return false;
350 }
351
352 /**
353  * __buffers_in_use() - return true if any buffers on the queue are in use and
354  * the queue cannot be freed (by the means of REQBUFS(0)) call
355  */
356 static bool __buffers_in_use(struct vb2_queue *q)
357 {
358         unsigned int buffer;
359         for (buffer = 0; buffer < q->num_buffers; ++buffer) {
360                 if (__buffer_in_use(q, q->bufs[buffer]))
361                         return true;
362         }
363         return false;
364 }
365
366 /**
367  * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be
368  * returned to userspace
369  */
370 static void __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b)
371 {
372         struct vb2_queue *q = vb->vb2_queue;
373
374         /* Copy back data such as timestamp, flags, etc. */
375         memcpy(b, &vb->v4l2_buf, offsetof(struct v4l2_buffer, m));
376         b->reserved2 = vb->v4l2_buf.reserved2;
377         b->reserved = vb->v4l2_buf.reserved;
378
379         if (V4L2_TYPE_IS_MULTIPLANAR(q->type)) {
380                 /*
381                  * Fill in plane-related data if userspace provided an array
382                  * for it. The caller has already verified memory and size.
383                  */
384                 b->length = vb->num_planes;
385                 memcpy(b->m.planes, vb->v4l2_planes,
386                         b->length * sizeof(struct v4l2_plane));
387         } else {
388                 /*
389                  * We use length and offset in v4l2_planes array even for
390                  * single-planar buffers, but userspace does not.
391                  */
392                 b->length = vb->v4l2_planes[0].length;
393                 b->bytesused = vb->v4l2_planes[0].bytesused;
394                 if (q->memory == V4L2_MEMORY_MMAP)
395                         b->m.offset = vb->v4l2_planes[0].m.mem_offset;
396                 else if (q->memory == V4L2_MEMORY_USERPTR)
397                         b->m.userptr = vb->v4l2_planes[0].m.userptr;
398                 else if (q->memory == V4L2_MEMORY_DMABUF)
399                         b->m.fd = vb->v4l2_planes[0].m.fd;
400         }
401
402         /*
403          * Clear any buffer state related flags.
404          */
405         b->flags &= ~V4L2_BUFFER_MASK_FLAGS;
406         b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
407
408         switch (vb->state) {
409         case VB2_BUF_STATE_QUEUED:
410         case VB2_BUF_STATE_ACTIVE:
411                 b->flags |= V4L2_BUF_FLAG_QUEUED;
412                 break;
413         case VB2_BUF_STATE_ERROR:
414                 b->flags |= V4L2_BUF_FLAG_ERROR;
415                 /* fall through */
416         case VB2_BUF_STATE_DONE:
417                 b->flags |= V4L2_BUF_FLAG_DONE;
418                 break;
419         case VB2_BUF_STATE_PREPARED:
420                 b->flags |= V4L2_BUF_FLAG_PREPARED;
421                 break;
422         case VB2_BUF_STATE_DEQUEUED:
423                 /* nothing */
424                 break;
425         }
426
427         if (__buffer_in_use(q, vb))
428                 b->flags |= V4L2_BUF_FLAG_MAPPED;
429 }
430
431 /**
432  * vb2_querybuf() - query video buffer information
433  * @q:          videobuf queue
434  * @b:          buffer struct passed from userspace to vidioc_querybuf handler
435  *              in driver
436  *
437  * Should be called from vidioc_querybuf ioctl handler in driver.
438  * This function will verify the passed v4l2_buffer structure and fill the
439  * relevant information for the userspace.
440  *
441  * The return values from this function are intended to be directly returned
442  * from vidioc_querybuf handler in driver.
443  */
444 int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b)
445 {
446         struct vb2_buffer *vb;
447         int ret;
448
449         if (b->type != q->type) {
450                 dprintk(1, "querybuf: wrong buffer type\n");
451                 return -EINVAL;
452         }
453
454         if (b->index >= q->num_buffers) {
455                 dprintk(1, "querybuf: buffer index out of range\n");
456                 return -EINVAL;
457         }
458         vb = q->bufs[b->index];
459         ret = __verify_planes_array(vb, b);
460         if (!ret)
461                 __fill_v4l2_buffer(vb, b);
462         return ret;
463 }
464 EXPORT_SYMBOL(vb2_querybuf);
465
466 /**
467  * __verify_userptr_ops() - verify that all memory operations required for
468  * USERPTR queue type have been provided
469  */
470 static int __verify_userptr_ops(struct vb2_queue *q)
471 {
472         if (!(q->io_modes & VB2_USERPTR) || !q->mem_ops->get_userptr ||
473             !q->mem_ops->put_userptr)
474                 return -EINVAL;
475
476         return 0;
477 }
478
479 /**
480  * __verify_mmap_ops() - verify that all memory operations required for
481  * MMAP queue type have been provided
482  */
483 static int __verify_mmap_ops(struct vb2_queue *q)
484 {
485         if (!(q->io_modes & VB2_MMAP) || !q->mem_ops->alloc ||
486             !q->mem_ops->put || !q->mem_ops->mmap)
487                 return -EINVAL;
488
489         return 0;
490 }
491
492 /**
493  * __verify_dmabuf_ops() - verify that all memory operations required for
494  * DMABUF queue type have been provided
495  */
496 static int __verify_dmabuf_ops(struct vb2_queue *q)
497 {
498         if (!(q->io_modes & VB2_DMABUF) || !q->mem_ops->attach_dmabuf ||
499             !q->mem_ops->detach_dmabuf  || !q->mem_ops->map_dmabuf ||
500             !q->mem_ops->unmap_dmabuf)
501                 return -EINVAL;
502
503         return 0;
504 }
505
506 /**
507  * __verify_memory_type() - Check whether the memory type and buffer type
508  * passed to a buffer operation are compatible with the queue.
509  */
510 static int __verify_memory_type(struct vb2_queue *q,
511                 enum v4l2_memory memory, enum v4l2_buf_type type)
512 {
513         if (memory != V4L2_MEMORY_MMAP && memory != V4L2_MEMORY_USERPTR &&
514             memory != V4L2_MEMORY_DMABUF) {
515                 dprintk(1, "reqbufs: unsupported memory type\n");
516                 return -EINVAL;
517         }
518
519         if (type != q->type) {
520                 dprintk(1, "reqbufs: requested type is incorrect\n");
521                 return -EINVAL;
522         }
523
524         /*
525          * Make sure all the required memory ops for given memory type
526          * are available.
527          */
528         if (memory == V4L2_MEMORY_MMAP && __verify_mmap_ops(q)) {
529                 dprintk(1, "reqbufs: MMAP for current setup unsupported\n");
530                 return -EINVAL;
531         }
532
533         if (memory == V4L2_MEMORY_USERPTR && __verify_userptr_ops(q)) {
534                 dprintk(1, "reqbufs: USERPTR for current setup unsupported\n");
535                 return -EINVAL;
536         }
537
538         if (memory == V4L2_MEMORY_DMABUF && __verify_dmabuf_ops(q)) {
539                 dprintk(1, "reqbufs: DMABUF for current setup unsupported\n");
540                 return -EINVAL;
541         }
542
543         /*
544          * Place the busy tests at the end: -EBUSY can be ignored when
545          * create_bufs is called with count == 0, but count == 0 should still
546          * do the memory and type validation.
547          */
548         if (q->fileio) {
549                 dprintk(1, "reqbufs: file io in progress\n");
550                 return -EBUSY;
551         }
552         return 0;
553 }
554
555 /**
556  * __reqbufs() - Initiate streaming
557  * @q:          videobuf2 queue
558  * @req:        struct passed from userspace to vidioc_reqbufs handler in driver
559  *
560  * Should be called from vidioc_reqbufs ioctl handler of a driver.
561  * This function:
562  * 1) verifies streaming parameters passed from the userspace,
563  * 2) sets up the queue,
564  * 3) negotiates number of buffers and planes per buffer with the driver
565  *    to be used during streaming,
566  * 4) allocates internal buffer structures (struct vb2_buffer), according to
567  *    the agreed parameters,
568  * 5) for MMAP memory type, allocates actual video memory, using the
569  *    memory handling/allocation routines provided during queue initialization
570  *
571  * If req->count is 0, all the memory will be freed instead.
572  * If the queue has been allocated previously (by a previous vb2_reqbufs) call
573  * and the queue is not busy, memory will be reallocated.
574  *
575  * The return values from this function are intended to be directly returned
576  * from vidioc_reqbufs handler in driver.
577  */
578 static int __reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req)
579 {
580         unsigned int num_buffers, allocated_buffers, num_planes = 0;
581         int ret;
582
583         if (q->streaming) {
584                 dprintk(1, "reqbufs: streaming active\n");
585                 return -EBUSY;
586         }
587
588         if (req->count == 0 || q->num_buffers != 0 || q->memory != req->memory) {
589                 /*
590                  * We already have buffers allocated, so first check if they
591                  * are not in use and can be freed.
592                  */
593                 if (q->memory == V4L2_MEMORY_MMAP && __buffers_in_use(q)) {
594                         dprintk(1, "reqbufs: memory in use, cannot free\n");
595                         return -EBUSY;
596                 }
597
598                 __vb2_queue_free(q, q->num_buffers);
599
600                 /*
601                  * In case of REQBUFS(0) return immediately without calling
602                  * driver's queue_setup() callback and allocating resources.
603                  */
604                 if (req->count == 0)
605                         return 0;
606         }
607
608         /*
609          * Make sure the requested values and current defaults are sane.
610          */
611         num_buffers = min_t(unsigned int, req->count, VIDEO_MAX_FRAME);
612         memset(q->plane_sizes, 0, sizeof(q->plane_sizes));
613         memset(q->alloc_ctx, 0, sizeof(q->alloc_ctx));
614         q->memory = req->memory;
615
616         /*
617          * Ask the driver how many buffers and planes per buffer it requires.
618          * Driver also sets the size and allocator context for each plane.
619          */
620         ret = call_qop(q, queue_setup, q, NULL, &num_buffers, &num_planes,
621                        q->plane_sizes, q->alloc_ctx);
622         if (ret)
623                 return ret;
624
625         /* Finally, allocate buffers and video memory */
626         ret = __vb2_queue_alloc(q, req->memory, num_buffers, num_planes);
627         if (ret == 0) {
628                 dprintk(1, "Memory allocation failed\n");
629                 return -ENOMEM;
630         }
631
632         allocated_buffers = ret;
633
634         /*
635          * Check if driver can handle the allocated number of buffers.
636          */
637         if (allocated_buffers < num_buffers) {
638                 num_buffers = allocated_buffers;
639
640                 ret = call_qop(q, queue_setup, q, NULL, &num_buffers,
641                                &num_planes, q->plane_sizes, q->alloc_ctx);
642
643                 if (!ret && allocated_buffers < num_buffers)
644                         ret = -ENOMEM;
645
646                 /*
647                  * Either the driver has accepted a smaller number of buffers,
648                  * or .queue_setup() returned an error
649                  */
650         }
651
652         q->num_buffers = allocated_buffers;
653
654         if (ret < 0) {
655                 __vb2_queue_free(q, allocated_buffers);
656                 return ret;
657         }
658
659         /*
660          * Return the number of successfully allocated buffers
661          * to the userspace.
662          */
663         req->count = allocated_buffers;
664
665         return 0;
666 }
667
668 /**
669  * vb2_reqbufs() - Wrapper for __reqbufs() that also verifies the memory and
670  * type values.
671  * @q:          videobuf2 queue
672  * @req:        struct passed from userspace to vidioc_reqbufs handler in driver
673  */
674 int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req)
675 {
676         int ret = __verify_memory_type(q, req->memory, req->type);
677
678         return ret ? ret : __reqbufs(q, req);
679 }
680 EXPORT_SYMBOL_GPL(vb2_reqbufs);
681
682 /**
683  * __create_bufs() - Allocate buffers and any required auxiliary structs
684  * @q:          videobuf2 queue
685  * @create:     creation parameters, passed from userspace to vidioc_create_bufs
686  *              handler in driver
687  *
688  * Should be called from vidioc_create_bufs ioctl handler of a driver.
689  * This function:
690  * 1) verifies parameter sanity
691  * 2) calls the .queue_setup() queue operation
692  * 3) performs any necessary memory allocations
693  *
694  * The return values from this function are intended to be directly returned
695  * from vidioc_create_bufs handler in driver.
696  */
697 static int __create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
698 {
699         unsigned int num_planes = 0, num_buffers, allocated_buffers;
700         int ret;
701
702         if (q->num_buffers == VIDEO_MAX_FRAME) {
703                 dprintk(1, "%s(): maximum number of buffers already allocated\n",
704                         __func__);
705                 return -ENOBUFS;
706         }
707
708         if (!q->num_buffers) {
709                 memset(q->plane_sizes, 0, sizeof(q->plane_sizes));
710                 memset(q->alloc_ctx, 0, sizeof(q->alloc_ctx));
711                 q->memory = create->memory;
712         }
713
714         num_buffers = min(create->count, VIDEO_MAX_FRAME - q->num_buffers);
715
716         /*
717          * Ask the driver, whether the requested number of buffers, planes per
718          * buffer and their sizes are acceptable
719          */
720         ret = call_qop(q, queue_setup, q, &create->format, &num_buffers,
721                        &num_planes, q->plane_sizes, q->alloc_ctx);
722         if (ret)
723                 return ret;
724
725         /* Finally, allocate buffers and video memory */
726         ret = __vb2_queue_alloc(q, create->memory, num_buffers,
727                                 num_planes);
728         if (ret == 0) {
729                 dprintk(1, "Memory allocation failed\n");
730                 return -ENOMEM;
731         }
732
733         allocated_buffers = ret;
734
735         /*
736          * Check if driver can handle the so far allocated number of buffers.
737          */
738         if (ret < num_buffers) {
739                 num_buffers = ret;
740
741                 /*
742                  * q->num_buffers contains the total number of buffers, that the
743                  * queue driver has set up
744                  */
745                 ret = call_qop(q, queue_setup, q, &create->format, &num_buffers,
746                                &num_planes, q->plane_sizes, q->alloc_ctx);
747
748                 if (!ret && allocated_buffers < num_buffers)
749                         ret = -ENOMEM;
750
751                 /*
752                  * Either the driver has accepted a smaller number of buffers,
753                  * or .queue_setup() returned an error
754                  */
755         }
756
757         q->num_buffers += allocated_buffers;
758
759         if (ret < 0) {
760                 __vb2_queue_free(q, allocated_buffers);
761                 return -ENOMEM;
762         }
763
764         /*
765          * Return the number of successfully allocated buffers
766          * to the userspace.
767          */
768         create->count = allocated_buffers;
769
770         return 0;
771 }
772
773 /**
774  * vb2_create_bufs() - Wrapper for __create_bufs() that also verifies the
775  * memory and type values.
776  * @q:          videobuf2 queue
777  * @create:     creation parameters, passed from userspace to vidioc_create_bufs
778  *              handler in driver
779  */
780 int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
781 {
782         int ret = __verify_memory_type(q, create->memory, create->format.type);
783
784         create->index = q->num_buffers;
785         if (create->count == 0)
786                 return ret != -EBUSY ? ret : 0;
787         return ret ? ret : __create_bufs(q, create);
788 }
789 EXPORT_SYMBOL_GPL(vb2_create_bufs);
790
791 /**
792  * vb2_plane_vaddr() - Return a kernel virtual address of a given plane
793  * @vb:         vb2_buffer to which the plane in question belongs to
794  * @plane_no:   plane number for which the address is to be returned
795  *
796  * This function returns a kernel virtual address of a given plane if
797  * such a mapping exist, NULL otherwise.
798  */
799 void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no)
800 {
801         struct vb2_queue *q = vb->vb2_queue;
802
803         if (plane_no > vb->num_planes || !vb->planes[plane_no].mem_priv)
804                 return NULL;
805
806         return call_memop(q, vaddr, vb->planes[plane_no].mem_priv);
807
808 }
809 EXPORT_SYMBOL_GPL(vb2_plane_vaddr);
810
811 /**
812  * vb2_plane_cookie() - Return allocator specific cookie for the given plane
813  * @vb:         vb2_buffer to which the plane in question belongs to
814  * @plane_no:   plane number for which the cookie is to be returned
815  *
816  * This function returns an allocator specific cookie for a given plane if
817  * available, NULL otherwise. The allocator should provide some simple static
818  * inline function, which would convert this cookie to the allocator specific
819  * type that can be used directly by the driver to access the buffer. This can
820  * be for example physical address, pointer to scatter list or IOMMU mapping.
821  */
822 void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no)
823 {
824         struct vb2_queue *q = vb->vb2_queue;
825
826         if (plane_no > vb->num_planes || !vb->planes[plane_no].mem_priv)
827                 return NULL;
828
829         return call_memop(q, cookie, vb->planes[plane_no].mem_priv);
830 }
831 EXPORT_SYMBOL_GPL(vb2_plane_cookie);
832
833 /**
834  * vb2_buffer_done() - inform videobuf that an operation on a buffer is finished
835  * @vb:         vb2_buffer returned from the driver
836  * @state:      either VB2_BUF_STATE_DONE if the operation finished successfully
837  *              or VB2_BUF_STATE_ERROR if the operation finished with an error
838  *
839  * This function should be called by the driver after a hardware operation on
840  * a buffer is finished and the buffer may be returned to userspace. The driver
841  * cannot use this buffer anymore until it is queued back to it by videobuf
842  * by the means of buf_queue callback. Only buffers previously queued to the
843  * driver by buf_queue can be passed to this function.
844  */
845 void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
846 {
847         struct vb2_queue *q = vb->vb2_queue;
848         unsigned long flags;
849         unsigned int plane;
850
851         if (vb->state != VB2_BUF_STATE_ACTIVE)
852                 return;
853
854         if (state != VB2_BUF_STATE_DONE && state != VB2_BUF_STATE_ERROR)
855                 return;
856
857         dprintk(4, "Done processing on buffer %d, state: %d\n",
858                         vb->v4l2_buf.index, vb->state);
859
860         /* sync buffers */
861         for (plane = 0; plane < vb->num_planes; ++plane)
862                 call_memop(q, finish, vb->planes[plane].mem_priv);
863
864         /* Add the buffer to the done buffers list */
865         spin_lock_irqsave(&q->done_lock, flags);
866         vb->state = state;
867         list_add_tail(&vb->done_entry, &q->done_list);
868         atomic_dec(&q->queued_count);
869         spin_unlock_irqrestore(&q->done_lock, flags);
870
871         /* Inform any processes that may be waiting for buffers */
872         wake_up(&q->done_wq);
873 }
874 EXPORT_SYMBOL_GPL(vb2_buffer_done);
875
876 /**
877  * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a
878  * v4l2_buffer by the userspace. The caller has already verified that struct
879  * v4l2_buffer has a valid number of planes.
880  */
881 static void __fill_vb2_buffer(struct vb2_buffer *vb, const struct v4l2_buffer *b,
882                                 struct v4l2_plane *v4l2_planes)
883 {
884         unsigned int plane;
885
886         if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
887                 /* Fill in driver-provided information for OUTPUT types */
888                 if (V4L2_TYPE_IS_OUTPUT(b->type)) {
889                         /*
890                          * Will have to go up to b->length when API starts
891                          * accepting variable number of planes.
892                          */
893                         for (plane = 0; plane < vb->num_planes; ++plane) {
894                                 v4l2_planes[plane].bytesused =
895                                         b->m.planes[plane].bytesused;
896                                 v4l2_planes[plane].data_offset =
897                                         b->m.planes[plane].data_offset;
898                         }
899                 }
900
901                 if (b->memory == V4L2_MEMORY_USERPTR) {
902                         for (plane = 0; plane < vb->num_planes; ++plane) {
903                                 v4l2_planes[plane].m.userptr =
904                                         b->m.planes[plane].m.userptr;
905                                 v4l2_planes[plane].length =
906                                         b->m.planes[plane].length;
907                         }
908                 }
909                 if (b->memory == V4L2_MEMORY_DMABUF) {
910                         for (plane = 0; plane < vb->num_planes; ++plane) {
911                                 v4l2_planes[plane].m.fd =
912                                         b->m.planes[plane].m.fd;
913                                 v4l2_planes[plane].length =
914                                         b->m.planes[plane].length;
915                                 v4l2_planes[plane].data_offset =
916                                         b->m.planes[plane].data_offset;
917                         }
918                 }
919         } else {
920                 /*
921                  * Single-planar buffers do not use planes array,
922                  * so fill in relevant v4l2_buffer struct fields instead.
923                  * In videobuf we use our internal V4l2_planes struct for
924                  * single-planar buffers as well, for simplicity.
925                  */
926                 if (V4L2_TYPE_IS_OUTPUT(b->type)) {
927                         v4l2_planes[0].bytesused = b->bytesused;
928                         v4l2_planes[0].data_offset = 0;
929                 }
930
931                 if (b->memory == V4L2_MEMORY_USERPTR) {
932                         v4l2_planes[0].m.userptr = b->m.userptr;
933                         v4l2_planes[0].length = b->length;
934                 }
935
936                 if (b->memory == V4L2_MEMORY_DMABUF) {
937                         v4l2_planes[0].m.fd = b->m.fd;
938                         v4l2_planes[0].length = b->length;
939                         v4l2_planes[0].data_offset = 0;
940                 }
941
942         }
943
944         vb->v4l2_buf.field = b->field;
945         vb->v4l2_buf.timestamp = b->timestamp;
946         vb->v4l2_buf.flags = b->flags & ~V4L2_BUFFER_MASK_FLAGS;
947 }
948
949 /**
950  * __qbuf_userptr() - handle qbuf of a USERPTR buffer
951  */
952 static int __qbuf_userptr(struct vb2_buffer *vb, const struct v4l2_buffer *b)
953 {
954         struct v4l2_plane planes[VIDEO_MAX_PLANES];
955         struct vb2_queue *q = vb->vb2_queue;
956         void *mem_priv;
957         unsigned int plane;
958         int ret;
959         int write = !V4L2_TYPE_IS_OUTPUT(q->type);
960
961         /* Copy relevant information provided by the userspace */
962         __fill_vb2_buffer(vb, b, planes);
963
964         for (plane = 0; plane < vb->num_planes; ++plane) {
965                 /* Skip the plane if already verified */
966                 if (vb->v4l2_planes[plane].m.userptr &&
967                     vb->v4l2_planes[plane].m.userptr == planes[plane].m.userptr
968                     && vb->v4l2_planes[plane].length == planes[plane].length)
969                         continue;
970
971                 dprintk(3, "qbuf: userspace address for plane %d changed, "
972                                 "reacquiring memory\n", plane);
973
974                 /* Check if the provided plane buffer is large enough */
975                 if (planes[plane].length < q->plane_sizes[plane]) {
976                         ret = -EINVAL;
977                         goto err;
978                 }
979
980                 /* Release previously acquired memory if present */
981                 if (vb->planes[plane].mem_priv)
982                         call_memop(q, put_userptr, vb->planes[plane].mem_priv);
983
984                 vb->planes[plane].mem_priv = NULL;
985                 vb->v4l2_planes[plane].m.userptr = 0;
986                 vb->v4l2_planes[plane].length = 0;
987
988                 /* Acquire each plane's memory */
989                 mem_priv = call_memop(q, get_userptr, q->alloc_ctx[plane],
990                                       planes[plane].m.userptr,
991                                       planes[plane].length, write);
992                 if (IS_ERR_OR_NULL(mem_priv)) {
993                         dprintk(1, "qbuf: failed acquiring userspace "
994                                                 "memory for plane %d\n", plane);
995                         ret = mem_priv ? PTR_ERR(mem_priv) : -EINVAL;
996                         goto err;
997                 }
998                 vb->planes[plane].mem_priv = mem_priv;
999         }
1000
1001         /*
1002          * Call driver-specific initialization on the newly acquired buffer,
1003          * if provided.
1004          */
1005         ret = call_qop(q, buf_init, vb);
1006         if (ret) {
1007                 dprintk(1, "qbuf: buffer initialization failed\n");
1008                 goto err;
1009         }
1010
1011         /*
1012          * Now that everything is in order, copy relevant information
1013          * provided by userspace.
1014          */
1015         for (plane = 0; plane < vb->num_planes; ++plane)
1016                 vb->v4l2_planes[plane] = planes[plane];
1017
1018         return 0;
1019 err:
1020         /* In case of errors, release planes that were already acquired */
1021         for (plane = 0; plane < vb->num_planes; ++plane) {
1022                 if (vb->planes[plane].mem_priv)
1023                         call_memop(q, put_userptr, vb->planes[plane].mem_priv);
1024                 vb->planes[plane].mem_priv = NULL;
1025                 vb->v4l2_planes[plane].m.userptr = 0;
1026                 vb->v4l2_planes[plane].length = 0;
1027         }
1028
1029         return ret;
1030 }
1031
1032 /**
1033  * __qbuf_mmap() - handle qbuf of an MMAP buffer
1034  */
1035 static int __qbuf_mmap(struct vb2_buffer *vb, const struct v4l2_buffer *b)
1036 {
1037         __fill_vb2_buffer(vb, b, vb->v4l2_planes);
1038         return 0;
1039 }
1040
1041 /**
1042  * __qbuf_dmabuf() - handle qbuf of a DMABUF buffer
1043  */
1044 static int __qbuf_dmabuf(struct vb2_buffer *vb, const struct v4l2_buffer *b)
1045 {
1046         struct v4l2_plane planes[VIDEO_MAX_PLANES];
1047         struct vb2_queue *q = vb->vb2_queue;
1048         void *mem_priv;
1049         unsigned int plane;
1050         int ret;
1051         int write = !V4L2_TYPE_IS_OUTPUT(q->type);
1052
1053         /* Verify and copy relevant information provided by the userspace */
1054         __fill_vb2_buffer(vb, b, planes);
1055
1056         for (plane = 0; plane < vb->num_planes; ++plane) {
1057                 struct dma_buf *dbuf = dma_buf_get(planes[plane].m.fd);
1058
1059                 if (IS_ERR_OR_NULL(dbuf)) {
1060                         dprintk(1, "qbuf: invalid dmabuf fd for plane %d\n",
1061                                 plane);
1062                         ret = -EINVAL;
1063                         goto err;
1064                 }
1065
1066                 /* use DMABUF size if length is not provided */
1067                 if (planes[plane].length == 0)
1068                         planes[plane].length = dbuf->size;
1069
1070                 if (planes[plane].length < planes[plane].data_offset +
1071                     q->plane_sizes[plane]) {
1072                         ret = -EINVAL;
1073                         goto err;
1074                 }
1075
1076                 /* Skip the plane if already verified */
1077                 if (dbuf == vb->planes[plane].dbuf &&
1078                     vb->v4l2_planes[plane].length == planes[plane].length) {
1079                         dma_buf_put(dbuf);
1080                         continue;
1081                 }
1082
1083                 dprintk(1, "qbuf: buffer for plane %d changed\n", plane);
1084
1085                 /* Release previously acquired memory if present */
1086                 __vb2_plane_dmabuf_put(q, &vb->planes[plane]);
1087                 memset(&vb->v4l2_planes[plane], 0, sizeof(struct v4l2_plane));
1088
1089                 /* Acquire each plane's memory */
1090                 mem_priv = call_memop(q, attach_dmabuf, q->alloc_ctx[plane],
1091                         dbuf, planes[plane].length, write);
1092                 if (IS_ERR(mem_priv)) {
1093                         dprintk(1, "qbuf: failed to attach dmabuf\n");
1094                         ret = PTR_ERR(mem_priv);
1095                         dma_buf_put(dbuf);
1096                         goto err;
1097                 }
1098
1099                 vb->planes[plane].dbuf = dbuf;
1100                 vb->planes[plane].mem_priv = mem_priv;
1101         }
1102
1103         /* TODO: This pins the buffer(s) with  dma_buf_map_attachment()).. but
1104          * really we want to do this just before the DMA, not while queueing
1105          * the buffer(s)..
1106          */
1107         for (plane = 0; plane < vb->num_planes; ++plane) {
1108                 ret = call_memop(q, map_dmabuf, vb->planes[plane].mem_priv);
1109                 if (ret) {
1110                         dprintk(1, "qbuf: failed to map dmabuf for plane %d\n",
1111                                 plane);
1112                         goto err;
1113                 }
1114                 vb->planes[plane].dbuf_mapped = 1;
1115         }
1116
1117         /*
1118          * Call driver-specific initialization on the newly acquired buffer,
1119          * if provided.
1120          */
1121         ret = call_qop(q, buf_init, vb);
1122         if (ret) {
1123                 dprintk(1, "qbuf: buffer initialization failed\n");
1124                 goto err;
1125         }
1126
1127         /*
1128          * Now that everything is in order, copy relevant information
1129          * provided by userspace.
1130          */
1131         for (plane = 0; plane < vb->num_planes; ++plane)
1132                 vb->v4l2_planes[plane] = planes[plane];
1133
1134         return 0;
1135 err:
1136         /* In case of errors, release planes that were already acquired */
1137         __vb2_buf_dmabuf_put(vb);
1138
1139         return ret;
1140 }
1141
1142 /**
1143  * __enqueue_in_driver() - enqueue a vb2_buffer in driver for processing
1144  */
1145 static void __enqueue_in_driver(struct vb2_buffer *vb)
1146 {
1147         struct vb2_queue *q = vb->vb2_queue;
1148         unsigned int plane;
1149
1150         vb->state = VB2_BUF_STATE_ACTIVE;
1151         atomic_inc(&q->queued_count);
1152
1153         /* sync buffers */
1154         for (plane = 0; plane < vb->num_planes; ++plane)
1155                 call_memop(q, prepare, vb->planes[plane].mem_priv);
1156
1157         q->ops->buf_queue(vb);
1158 }
1159
1160 static int __buf_prepare(struct vb2_buffer *vb, const struct v4l2_buffer *b)
1161 {
1162         struct vb2_queue *q = vb->vb2_queue;
1163         int ret;
1164
1165         switch (q->memory) {
1166         case V4L2_MEMORY_MMAP:
1167                 ret = __qbuf_mmap(vb, b);
1168                 break;
1169         case V4L2_MEMORY_USERPTR:
1170                 ret = __qbuf_userptr(vb, b);
1171                 break;
1172         case V4L2_MEMORY_DMABUF:
1173                 ret = __qbuf_dmabuf(vb, b);
1174                 break;
1175         default:
1176                 WARN(1, "Invalid queue type\n");
1177                 ret = -EINVAL;
1178         }
1179
1180         if (!ret)
1181                 ret = call_qop(q, buf_prepare, vb);
1182         if (ret)
1183                 dprintk(1, "qbuf: buffer preparation failed: %d\n", ret);
1184         else
1185                 vb->state = VB2_BUF_STATE_PREPARED;
1186
1187         return ret;
1188 }
1189
1190 /**
1191  * vb2_prepare_buf() - Pass ownership of a buffer from userspace to the kernel
1192  * @q:          videobuf2 queue
1193  * @b:          buffer structure passed from userspace to vidioc_prepare_buf
1194  *              handler in driver
1195  *
1196  * Should be called from vidioc_prepare_buf ioctl handler of a driver.
1197  * This function:
1198  * 1) verifies the passed buffer,
1199  * 2) calls buf_prepare callback in the driver (if provided), in which
1200  *    driver-specific buffer initialization can be performed,
1201  *
1202  * The return values from this function are intended to be directly returned
1203  * from vidioc_prepare_buf handler in driver.
1204  */
1205 int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b)
1206 {
1207         struct vb2_buffer *vb;
1208         int ret;
1209
1210         if (q->fileio) {
1211                 dprintk(1, "%s(): file io in progress\n", __func__);
1212                 return -EBUSY;
1213         }
1214
1215         if (b->type != q->type) {
1216                 dprintk(1, "%s(): invalid buffer type\n", __func__);
1217                 return -EINVAL;
1218         }
1219
1220         if (b->index >= q->num_buffers) {
1221                 dprintk(1, "%s(): buffer index out of range\n", __func__);
1222                 return -EINVAL;
1223         }
1224
1225         vb = q->bufs[b->index];
1226         if (NULL == vb) {
1227                 /* Should never happen */
1228                 dprintk(1, "%s(): buffer is NULL\n", __func__);
1229                 return -EINVAL;
1230         }
1231
1232         if (b->memory != q->memory) {
1233                 dprintk(1, "%s(): invalid memory type\n", __func__);
1234                 return -EINVAL;
1235         }
1236
1237         if (vb->state != VB2_BUF_STATE_DEQUEUED) {
1238                 dprintk(1, "%s(): invalid buffer state %d\n", __func__, vb->state);
1239                 return -EINVAL;
1240         }
1241         ret = __verify_planes_array(vb, b);
1242         if (ret < 0)
1243                 return ret;
1244         ret = __buf_prepare(vb, b);
1245         if (ret < 0)
1246                 return ret;
1247
1248         __fill_v4l2_buffer(vb, b);
1249
1250         return 0;
1251 }
1252 EXPORT_SYMBOL_GPL(vb2_prepare_buf);
1253
1254 /**
1255  * vb2_qbuf() - Queue a buffer from userspace
1256  * @q:          videobuf2 queue
1257  * @b:          buffer structure passed from userspace to vidioc_qbuf handler
1258  *              in driver
1259  *
1260  * Should be called from vidioc_qbuf ioctl handler of a driver.
1261  * This function:
1262  * 1) verifies the passed buffer,
1263  * 2) if necessary, calls buf_prepare callback in the driver (if provided), in
1264  *    which driver-specific buffer initialization can be performed,
1265  * 3) if streaming is on, queues the buffer in driver by the means of buf_queue
1266  *    callback for processing.
1267  *
1268  * The return values from this function are intended to be directly returned
1269  * from vidioc_qbuf handler in driver.
1270  */
1271 int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b)
1272 {
1273         struct rw_semaphore *mmap_sem = NULL;
1274         struct vb2_buffer *vb;
1275         int ret = 0;
1276
1277         /*
1278          * In case of user pointer buffers vb2 allocator needs to get direct
1279          * access to userspace pages. This requires getting read access on
1280          * mmap semaphore in the current process structure. The same
1281          * semaphore is taken before calling mmap operation, while both mmap
1282          * and qbuf are called by the driver or v4l2 core with driver's lock
1283          * held. To avoid a AB-BA deadlock (mmap_sem then driver's lock in
1284          * mmap and driver's lock then mmap_sem in qbuf) the videobuf2 core
1285          * release driver's lock, takes mmap_sem and then takes again driver's
1286          * lock.
1287          *
1288          * To avoid race with other vb2 calls, which might be called after
1289          * releasing driver's lock, this operation is performed at the
1290          * beggining of qbuf processing. This way the queue status is
1291          * consistent after getting driver's lock back.
1292          */
1293         if (q->memory == V4L2_MEMORY_USERPTR) {
1294                 mmap_sem = &current->mm->mmap_sem;
1295                 call_qop(q, wait_prepare, q);
1296                 down_read(mmap_sem);
1297                 call_qop(q, wait_finish, q);
1298         }
1299
1300         if (q->fileio) {
1301                 dprintk(1, "qbuf: file io in progress\n");
1302                 ret = -EBUSY;
1303                 goto unlock;
1304         }
1305
1306         if (b->type != q->type) {
1307                 dprintk(1, "qbuf: invalid buffer type\n");
1308                 ret = -EINVAL;
1309                 goto unlock;
1310         }
1311
1312         if (b->index >= q->num_buffers) {
1313                 dprintk(1, "qbuf: buffer index out of range\n");
1314                 ret = -EINVAL;
1315                 goto unlock;
1316         }
1317
1318         vb = q->bufs[b->index];
1319         if (NULL == vb) {
1320                 /* Should never happen */
1321                 dprintk(1, "qbuf: buffer is NULL\n");
1322                 ret = -EINVAL;
1323                 goto unlock;
1324         }
1325
1326         if (b->memory != q->memory) {
1327                 dprintk(1, "qbuf: invalid memory type\n");
1328                 ret = -EINVAL;
1329                 goto unlock;
1330         }
1331         ret = __verify_planes_array(vb, b);
1332         if (ret)
1333                 goto unlock;
1334
1335         switch (vb->state) {
1336         case VB2_BUF_STATE_DEQUEUED:
1337                 ret = __buf_prepare(vb, b);
1338                 if (ret)
1339                         goto unlock;
1340         case VB2_BUF_STATE_PREPARED:
1341                 break;
1342         default:
1343                 dprintk(1, "qbuf: buffer already in use\n");
1344                 ret = -EINVAL;
1345                 goto unlock;
1346         }
1347
1348         /*
1349          * Add to the queued buffers list, a buffer will stay on it until
1350          * dequeued in dqbuf.
1351          */
1352         list_add_tail(&vb->queued_entry, &q->queued_list);
1353         vb->state = VB2_BUF_STATE_QUEUED;
1354
1355         /*
1356          * If already streaming, give the buffer to driver for processing.
1357          * If not, the buffer will be given to driver on next streamon.
1358          */
1359         if (q->streaming)
1360                 __enqueue_in_driver(vb);
1361
1362         /* Fill buffer information for the userspace */
1363         __fill_v4l2_buffer(vb, b);
1364
1365         dprintk(1, "qbuf of buffer %d succeeded\n", vb->v4l2_buf.index);
1366 unlock:
1367         if (mmap_sem)
1368                 up_read(mmap_sem);
1369         return ret;
1370 }
1371 EXPORT_SYMBOL_GPL(vb2_qbuf);
1372
1373 /**
1374  * __vb2_wait_for_done_vb() - wait for a buffer to become available
1375  * for dequeuing
1376  *
1377  * Will sleep if required for nonblocking == false.
1378  */
1379 static int __vb2_wait_for_done_vb(struct vb2_queue *q, int nonblocking)
1380 {
1381         /*
1382          * All operations on vb_done_list are performed under done_lock
1383          * spinlock protection. However, buffers may be removed from
1384          * it and returned to userspace only while holding both driver's
1385          * lock and the done_lock spinlock. Thus we can be sure that as
1386          * long as we hold the driver's lock, the list will remain not
1387          * empty if list_empty() check succeeds.
1388          */
1389
1390         for (;;) {
1391                 int ret;
1392
1393                 if (!q->streaming) {
1394                         dprintk(1, "Streaming off, will not wait for buffers\n");
1395                         return -EINVAL;
1396                 }
1397
1398                 if (!list_empty(&q->done_list)) {
1399                         /*
1400                          * Found a buffer that we were waiting for.
1401                          */
1402                         break;
1403                 }
1404
1405                 if (nonblocking) {
1406                         dprintk(1, "Nonblocking and no buffers to dequeue, "
1407                                                                 "will not wait\n");
1408                         return -EAGAIN;
1409                 }
1410
1411                 /*
1412                  * We are streaming and blocking, wait for another buffer to
1413                  * become ready or for streamoff. Driver's lock is released to
1414                  * allow streamoff or qbuf to be called while waiting.
1415                  */
1416                 call_qop(q, wait_prepare, q);
1417
1418                 /*
1419                  * All locks have been released, it is safe to sleep now.
1420                  */
1421                 dprintk(3, "Will sleep waiting for buffers\n");
1422                 ret = wait_event_interruptible(q->done_wq,
1423                                 !list_empty(&q->done_list) || !q->streaming);
1424
1425                 /*
1426                  * We need to reevaluate both conditions again after reacquiring
1427                  * the locks or return an error if one occurred.
1428                  */
1429                 call_qop(q, wait_finish, q);
1430                 if (ret) {
1431                         dprintk(1, "Sleep was interrupted\n");
1432                         return ret;
1433                 }
1434         }
1435         return 0;
1436 }
1437
1438 /**
1439  * __vb2_get_done_vb() - get a buffer ready for dequeuing
1440  *
1441  * Will sleep if required for nonblocking == false.
1442  */
1443 static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
1444                                 struct v4l2_buffer *b, int nonblocking)
1445 {
1446         unsigned long flags;
1447         int ret;
1448
1449         /*
1450          * Wait for at least one buffer to become available on the done_list.
1451          */
1452         ret = __vb2_wait_for_done_vb(q, nonblocking);
1453         if (ret)
1454                 return ret;
1455
1456         /*
1457          * Driver's lock has been held since we last verified that done_list
1458          * is not empty, so no need for another list_empty(done_list) check.
1459          */
1460         spin_lock_irqsave(&q->done_lock, flags);
1461         *vb = list_first_entry(&q->done_list, struct vb2_buffer, done_entry);
1462         /*
1463          * Only remove the buffer from done_list if v4l2_buffer can handle all
1464          * the planes.
1465          */
1466         ret = __verify_planes_array(*vb, b);
1467         if (!ret)
1468                 list_del(&(*vb)->done_entry);
1469         spin_unlock_irqrestore(&q->done_lock, flags);
1470
1471         return ret;
1472 }
1473
1474 /**
1475  * vb2_wait_for_all_buffers() - wait until all buffers are given back to vb2
1476  * @q:          videobuf2 queue
1477  *
1478  * This function will wait until all buffers that have been given to the driver
1479  * by buf_queue() are given back to vb2 with vb2_buffer_done(). It doesn't call
1480  * wait_prepare, wait_finish pair. It is intended to be called with all locks
1481  * taken, for example from stop_streaming() callback.
1482  */
1483 int vb2_wait_for_all_buffers(struct vb2_queue *q)
1484 {
1485         if (!q->streaming) {
1486                 dprintk(1, "Streaming off, will not wait for buffers\n");
1487                 return -EINVAL;
1488         }
1489
1490         wait_event(q->done_wq, !atomic_read(&q->queued_count));
1491         return 0;
1492 }
1493 EXPORT_SYMBOL_GPL(vb2_wait_for_all_buffers);
1494
1495 /**
1496  * __vb2_dqbuf() - bring back the buffer to the DEQUEUED state
1497  */
1498 static void __vb2_dqbuf(struct vb2_buffer *vb)
1499 {
1500         struct vb2_queue *q = vb->vb2_queue;
1501         unsigned int i;
1502
1503         /* nothing to do if the buffer is already dequeued */
1504         if (vb->state == VB2_BUF_STATE_DEQUEUED)
1505                 return;
1506
1507         vb->state = VB2_BUF_STATE_DEQUEUED;
1508
1509         /* unmap DMABUF buffer */
1510         if (q->memory == V4L2_MEMORY_DMABUF)
1511                 for (i = 0; i < vb->num_planes; ++i) {
1512                         if (!vb->planes[i].dbuf_mapped)
1513                                 continue;
1514                         call_memop(q, unmap_dmabuf, vb->planes[i].mem_priv);
1515                         vb->planes[i].dbuf_mapped = 0;
1516                 }
1517 }
1518
1519 /**
1520  * vb2_dqbuf() - Dequeue a buffer to the userspace
1521  * @q:          videobuf2 queue
1522  * @b:          buffer structure passed from userspace to vidioc_dqbuf handler
1523  *              in driver
1524  * @nonblocking: if true, this call will not sleep waiting for a buffer if no
1525  *               buffers ready for dequeuing are present. Normally the driver
1526  *               would be passing (file->f_flags & O_NONBLOCK) here
1527  *
1528  * Should be called from vidioc_dqbuf ioctl handler of a driver.
1529  * This function:
1530  * 1) verifies the passed buffer,
1531  * 2) calls buf_finish callback in the driver (if provided), in which
1532  *    driver can perform any additional operations that may be required before
1533  *    returning the buffer to userspace, such as cache sync,
1534  * 3) the buffer struct members are filled with relevant information for
1535  *    the userspace.
1536  *
1537  * The return values from this function are intended to be directly returned
1538  * from vidioc_dqbuf handler in driver.
1539  */
1540 int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking)
1541 {
1542         struct vb2_buffer *vb = NULL;
1543         int ret;
1544
1545         if (q->fileio) {
1546                 dprintk(1, "dqbuf: file io in progress\n");
1547                 return -EBUSY;
1548         }
1549
1550         if (b->type != q->type) {
1551                 dprintk(1, "dqbuf: invalid buffer type\n");
1552                 return -EINVAL;
1553         }
1554         ret = __vb2_get_done_vb(q, &vb, b, nonblocking);
1555         if (ret < 0)
1556                 return ret;
1557
1558         ret = call_qop(q, buf_finish, vb);
1559         if (ret) {
1560                 dprintk(1, "dqbuf: buffer finish failed\n");
1561                 return ret;
1562         }
1563
1564         switch (vb->state) {
1565         case VB2_BUF_STATE_DONE:
1566                 dprintk(3, "dqbuf: Returning done buffer\n");
1567                 break;
1568         case VB2_BUF_STATE_ERROR:
1569                 dprintk(3, "dqbuf: Returning done buffer with errors\n");
1570                 break;
1571         default:
1572                 dprintk(1, "dqbuf: Invalid buffer state\n");
1573                 return -EINVAL;
1574         }
1575
1576         /* Fill buffer information for the userspace */
1577         __fill_v4l2_buffer(vb, b);
1578         /* Remove from videobuf queue */
1579         list_del(&vb->queued_entry);
1580         /* go back to dequeued state */
1581         __vb2_dqbuf(vb);
1582
1583         dprintk(1, "dqbuf of buffer %d, with state %d\n",
1584                         vb->v4l2_buf.index, vb->state);
1585
1586         return 0;
1587 }
1588 EXPORT_SYMBOL_GPL(vb2_dqbuf);
1589
1590 /**
1591  * __vb2_queue_cancel() - cancel and stop (pause) streaming
1592  *
1593  * Removes all queued buffers from driver's queue and all buffers queued by
1594  * userspace from videobuf's queue. Returns to state after reqbufs.
1595  */
1596 static void __vb2_queue_cancel(struct vb2_queue *q)
1597 {
1598         unsigned int i;
1599
1600         /*
1601          * Tell driver to stop all transactions and release all queued
1602          * buffers.
1603          */
1604         if (q->streaming)
1605                 call_qop(q, stop_streaming, q);
1606         q->streaming = 0;
1607
1608         /*
1609          * Remove all buffers from videobuf's list...
1610          */
1611         INIT_LIST_HEAD(&q->queued_list);
1612         /*
1613          * ...and done list; userspace will not receive any buffers it
1614          * has not already dequeued before initiating cancel.
1615          */
1616         INIT_LIST_HEAD(&q->done_list);
1617         atomic_set(&q->queued_count, 0);
1618         wake_up_all(&q->done_wq);
1619
1620         /*
1621          * Reinitialize all buffers for next use.
1622          */
1623         for (i = 0; i < q->num_buffers; ++i)
1624                 __vb2_dqbuf(q->bufs[i]);
1625 }
1626
1627 /**
1628  * vb2_streamon - start streaming
1629  * @q:          videobuf2 queue
1630  * @type:       type argument passed from userspace to vidioc_streamon handler
1631  *
1632  * Should be called from vidioc_streamon handler of a driver.
1633  * This function:
1634  * 1) verifies current state
1635  * 2) passes any previously queued buffers to the driver and starts streaming
1636  *
1637  * The return values from this function are intended to be directly returned
1638  * from vidioc_streamon handler in the driver.
1639  */
1640 int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type)
1641 {
1642         struct vb2_buffer *vb;
1643         int ret;
1644
1645         if (q->fileio) {
1646                 dprintk(1, "streamon: file io in progress\n");
1647                 return -EBUSY;
1648         }
1649
1650         if (type != q->type) {
1651                 dprintk(1, "streamon: invalid stream type\n");
1652                 return -EINVAL;
1653         }
1654
1655         if (q->streaming) {
1656                 dprintk(1, "streamon: already streaming\n");
1657                 return -EBUSY;
1658         }
1659
1660         /*
1661          * If any buffers were queued before streamon,
1662          * we can now pass them to driver for processing.
1663          */
1664         list_for_each_entry(vb, &q->queued_list, queued_entry)
1665                 __enqueue_in_driver(vb);
1666
1667         /*
1668          * Let driver notice that streaming state has been enabled.
1669          */
1670         ret = call_qop(q, start_streaming, q, atomic_read(&q->queued_count));
1671         if (ret) {
1672                 dprintk(1, "streamon: driver refused to start streaming\n");
1673                 __vb2_queue_cancel(q);
1674                 return ret;
1675         }
1676
1677         q->streaming = 1;
1678
1679         dprintk(3, "Streamon successful\n");
1680         return 0;
1681 }
1682 EXPORT_SYMBOL_GPL(vb2_streamon);
1683
1684
1685 /**
1686  * vb2_streamoff - stop streaming
1687  * @q:          videobuf2 queue
1688  * @type:       type argument passed from userspace to vidioc_streamoff handler
1689  *
1690  * Should be called from vidioc_streamoff handler of a driver.
1691  * This function:
1692  * 1) verifies current state,
1693  * 2) stop streaming and dequeues any queued buffers, including those previously
1694  *    passed to the driver (after waiting for the driver to finish).
1695  *
1696  * This call can be used for pausing playback.
1697  * The return values from this function are intended to be directly returned
1698  * from vidioc_streamoff handler in the driver
1699  */
1700 int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type)
1701 {
1702         if (q->fileio) {
1703                 dprintk(1, "streamoff: file io in progress\n");
1704                 return -EBUSY;
1705         }
1706
1707         if (type != q->type) {
1708                 dprintk(1, "streamoff: invalid stream type\n");
1709                 return -EINVAL;
1710         }
1711
1712         if (!q->streaming) {
1713                 dprintk(1, "streamoff: not streaming\n");
1714                 return -EINVAL;
1715         }
1716
1717         /*
1718          * Cancel will pause streaming and remove all buffers from the driver
1719          * and videobuf, effectively returning control over them to userspace.
1720          */
1721         __vb2_queue_cancel(q);
1722
1723         dprintk(3, "Streamoff successful\n");
1724         return 0;
1725 }
1726 EXPORT_SYMBOL_GPL(vb2_streamoff);
1727
1728 /**
1729  * __find_plane_by_offset() - find plane associated with the given offset off
1730  */
1731 static int __find_plane_by_offset(struct vb2_queue *q, unsigned long off,
1732                         unsigned int *_buffer, unsigned int *_plane)
1733 {
1734         struct vb2_buffer *vb;
1735         unsigned int buffer, plane;
1736
1737         /*
1738          * Go over all buffers and their planes, comparing the given offset
1739          * with an offset assigned to each plane. If a match is found,
1740          * return its buffer and plane numbers.
1741          */
1742         for (buffer = 0; buffer < q->num_buffers; ++buffer) {
1743                 vb = q->bufs[buffer];
1744
1745                 for (plane = 0; plane < vb->num_planes; ++plane) {
1746                         if (vb->v4l2_planes[plane].m.mem_offset == off) {
1747                                 *_buffer = buffer;
1748                                 *_plane = plane;
1749                                 return 0;
1750                         }
1751                 }
1752         }
1753
1754         return -EINVAL;
1755 }
1756
1757 /**
1758  * vb2_expbuf() - Export a buffer as a file descriptor
1759  * @q:          videobuf2 queue
1760  * @eb:         export buffer structure passed from userspace to vidioc_expbuf
1761  *              handler in driver
1762  *
1763  * The return values from this function are intended to be directly returned
1764  * from vidioc_expbuf handler in driver.
1765  */
1766 int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb)
1767 {
1768         struct vb2_buffer *vb = NULL;
1769         struct vb2_plane *vb_plane;
1770         int ret;
1771         struct dma_buf *dbuf;
1772
1773         if (q->memory != V4L2_MEMORY_MMAP) {
1774                 dprintk(1, "Queue is not currently set up for mmap\n");
1775                 return -EINVAL;
1776         }
1777
1778         if (!q->mem_ops->get_dmabuf) {
1779                 dprintk(1, "Queue does not support DMA buffer exporting\n");
1780                 return -EINVAL;
1781         }
1782
1783         if (eb->flags & ~O_CLOEXEC) {
1784                 dprintk(1, "Queue does support only O_CLOEXEC flag\n");
1785                 return -EINVAL;
1786         }
1787
1788         if (eb->type != q->type) {
1789                 dprintk(1, "qbuf: invalid buffer type\n");
1790                 return -EINVAL;
1791         }
1792
1793         if (eb->index >= q->num_buffers) {
1794                 dprintk(1, "buffer index out of range\n");
1795                 return -EINVAL;
1796         }
1797
1798         vb = q->bufs[eb->index];
1799
1800         if (eb->plane >= vb->num_planes) {
1801                 dprintk(1, "buffer plane out of range\n");
1802                 return -EINVAL;
1803         }
1804
1805         vb_plane = &vb->planes[eb->plane];
1806
1807         dbuf = call_memop(q, get_dmabuf, vb_plane->mem_priv);
1808         if (IS_ERR_OR_NULL(dbuf)) {
1809                 dprintk(1, "Failed to export buffer %d, plane %d\n",
1810                         eb->index, eb->plane);
1811                 return -EINVAL;
1812         }
1813
1814         ret = dma_buf_fd(dbuf, eb->flags);
1815         if (ret < 0) {
1816                 dprintk(3, "buffer %d, plane %d failed to export (%d)\n",
1817                         eb->index, eb->plane, ret);
1818                 dma_buf_put(dbuf);
1819                 return ret;
1820         }
1821
1822         dprintk(3, "buffer %d, plane %d exported as %d descriptor\n",
1823                 eb->index, eb->plane, ret);
1824         eb->fd = ret;
1825
1826         return 0;
1827 }
1828 EXPORT_SYMBOL_GPL(vb2_expbuf);
1829
1830 /**
1831  * vb2_mmap() - map video buffers into application address space
1832  * @q:          videobuf2 queue
1833  * @vma:        vma passed to the mmap file operation handler in the driver
1834  *
1835  * Should be called from mmap file operation handler of a driver.
1836  * This function maps one plane of one of the available video buffers to
1837  * userspace. To map whole video memory allocated on reqbufs, this function
1838  * has to be called once per each plane per each buffer previously allocated.
1839  *
1840  * When the userspace application calls mmap, it passes to it an offset returned
1841  * to it earlier by the means of vidioc_querybuf handler. That offset acts as
1842  * a "cookie", which is then used to identify the plane to be mapped.
1843  * This function finds a plane with a matching offset and a mapping is performed
1844  * by the means of a provided memory operation.
1845  *
1846  * The return values from this function are intended to be directly returned
1847  * from the mmap handler in driver.
1848  */
1849 int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
1850 {
1851         unsigned long off = vma->vm_pgoff << PAGE_SHIFT;
1852         struct vb2_buffer *vb;
1853         unsigned int buffer, plane;
1854         int ret;
1855
1856         if (q->memory != V4L2_MEMORY_MMAP) {
1857                 dprintk(1, "Queue is not currently set up for mmap\n");
1858                 return -EINVAL;
1859         }
1860
1861         /*
1862          * Check memory area access mode.
1863          */
1864         if (!(vma->vm_flags & VM_SHARED)) {
1865                 dprintk(1, "Invalid vma flags, VM_SHARED needed\n");
1866                 return -EINVAL;
1867         }
1868         if (V4L2_TYPE_IS_OUTPUT(q->type)) {
1869                 if (!(vma->vm_flags & VM_WRITE)) {
1870                         dprintk(1, "Invalid vma flags, VM_WRITE needed\n");
1871                         return -EINVAL;
1872                 }
1873         } else {
1874                 if (!(vma->vm_flags & VM_READ)) {
1875                         dprintk(1, "Invalid vma flags, VM_READ needed\n");
1876                         return -EINVAL;
1877                 }
1878         }
1879
1880         /*
1881          * Find the plane corresponding to the offset passed by userspace.
1882          */
1883         ret = __find_plane_by_offset(q, off, &buffer, &plane);
1884         if (ret)
1885                 return ret;
1886
1887         vb = q->bufs[buffer];
1888
1889         ret = call_memop(q, mmap, vb->planes[plane].mem_priv, vma);
1890         if (ret)
1891                 return ret;
1892
1893         dprintk(3, "Buffer %d, plane %d successfully mapped\n", buffer, plane);
1894         return 0;
1895 }
1896 EXPORT_SYMBOL_GPL(vb2_mmap);
1897
1898 #ifndef CONFIG_MMU
1899 unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
1900                                     unsigned long addr,
1901                                     unsigned long len,
1902                                     unsigned long pgoff,
1903                                     unsigned long flags)
1904 {
1905         unsigned long off = pgoff << PAGE_SHIFT;
1906         struct vb2_buffer *vb;
1907         unsigned int buffer, plane;
1908         int ret;
1909
1910         if (q->memory != V4L2_MEMORY_MMAP) {
1911                 dprintk(1, "Queue is not currently set up for mmap\n");
1912                 return -EINVAL;
1913         }
1914
1915         /*
1916          * Find the plane corresponding to the offset passed by userspace.
1917          */
1918         ret = __find_plane_by_offset(q, off, &buffer, &plane);
1919         if (ret)
1920                 return ret;
1921
1922         vb = q->bufs[buffer];
1923
1924         return (unsigned long)vb2_plane_vaddr(vb, plane);
1925 }
1926 EXPORT_SYMBOL_GPL(vb2_get_unmapped_area);
1927 #endif
1928
1929 static int __vb2_init_fileio(struct vb2_queue *q, int read);
1930 static int __vb2_cleanup_fileio(struct vb2_queue *q);
1931
1932 /**
1933  * vb2_poll() - implements poll userspace operation
1934  * @q:          videobuf2 queue
1935  * @file:       file argument passed to the poll file operation handler
1936  * @wait:       wait argument passed to the poll file operation handler
1937  *
1938  * This function implements poll file operation handler for a driver.
1939  * For CAPTURE queues, if a buffer is ready to be dequeued, the userspace will
1940  * be informed that the file descriptor of a video device is available for
1941  * reading.
1942  * For OUTPUT queues, if a buffer is ready to be dequeued, the file descriptor
1943  * will be reported as available for writing.
1944  *
1945  * If the driver uses struct v4l2_fh, then vb2_poll() will also check for any
1946  * pending events.
1947  *
1948  * The return values from this function are intended to be directly returned
1949  * from poll handler in driver.
1950  */
1951 unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait)
1952 {
1953         struct video_device *vfd = video_devdata(file);
1954         unsigned long req_events = poll_requested_events(wait);
1955         struct vb2_buffer *vb = NULL;
1956         unsigned int res = 0;
1957         unsigned long flags;
1958
1959         if (test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags)) {
1960                 struct v4l2_fh *fh = file->private_data;
1961
1962                 if (v4l2_event_pending(fh))
1963                         res = POLLPRI;
1964                 else if (req_events & POLLPRI)
1965                         poll_wait(file, &fh->wait, wait);
1966         }
1967
1968         if (!V4L2_TYPE_IS_OUTPUT(q->type) && !(req_events & (POLLIN | POLLRDNORM)))
1969                 return res;
1970         if (V4L2_TYPE_IS_OUTPUT(q->type) && !(req_events & (POLLOUT | POLLWRNORM)))
1971                 return res;
1972
1973         /*
1974          * Start file I/O emulator only if streaming API has not been used yet.
1975          */
1976         if (q->num_buffers == 0 && q->fileio == NULL) {
1977                 if (!V4L2_TYPE_IS_OUTPUT(q->type) && (q->io_modes & VB2_READ) &&
1978                                 (req_events & (POLLIN | POLLRDNORM))) {
1979                         if (__vb2_init_fileio(q, 1))
1980                                 return res | POLLERR;
1981                 }
1982                 if (V4L2_TYPE_IS_OUTPUT(q->type) && (q->io_modes & VB2_WRITE) &&
1983                                 (req_events & (POLLOUT | POLLWRNORM))) {
1984                         if (__vb2_init_fileio(q, 0))
1985                                 return res | POLLERR;
1986                         /*
1987                          * Write to OUTPUT queue can be done immediately.
1988                          */
1989                         return res | POLLOUT | POLLWRNORM;
1990                 }
1991         }
1992
1993         /*
1994          * There is nothing to wait for if no buffers have already been queued.
1995          */
1996         if (list_empty(&q->queued_list))
1997                 return res | POLLERR;
1998
1999         poll_wait(file, &q->done_wq, wait);
2000
2001         /*
2002          * Take first buffer available for dequeuing.
2003          */
2004         spin_lock_irqsave(&q->done_lock, flags);
2005         if (!list_empty(&q->done_list))
2006                 vb = list_first_entry(&q->done_list, struct vb2_buffer,
2007                                         done_entry);
2008         spin_unlock_irqrestore(&q->done_lock, flags);
2009
2010         if (vb && (vb->state == VB2_BUF_STATE_DONE
2011                         || vb->state == VB2_BUF_STATE_ERROR)) {
2012                 return (V4L2_TYPE_IS_OUTPUT(q->type)) ?
2013                                 res | POLLOUT | POLLWRNORM :
2014                                 res | POLLIN | POLLRDNORM;
2015         }
2016         return res;
2017 }
2018 EXPORT_SYMBOL_GPL(vb2_poll);
2019
2020 /**
2021  * vb2_queue_init() - initialize a videobuf2 queue
2022  * @q:          videobuf2 queue; this structure should be allocated in driver
2023  *
2024  * The vb2_queue structure should be allocated by the driver. The driver is
2025  * responsible of clearing it's content and setting initial values for some
2026  * required entries before calling this function.
2027  * q->ops, q->mem_ops, q->type and q->io_modes are mandatory. Please refer
2028  * to the struct vb2_queue description in include/media/videobuf2-core.h
2029  * for more information.
2030  */
2031 int vb2_queue_init(struct vb2_queue *q)
2032 {
2033         /*
2034          * Sanity check
2035          */
2036         if (WARN_ON(!q)                   ||
2037             WARN_ON(!q->ops)              ||
2038             WARN_ON(!q->mem_ops)          ||
2039             WARN_ON(!q->type)             ||
2040             WARN_ON(!q->io_modes)         ||
2041             WARN_ON(!q->ops->queue_setup) ||
2042             WARN_ON(!q->ops->buf_queue))
2043                 return -EINVAL;
2044
2045         INIT_LIST_HEAD(&q->queued_list);
2046         INIT_LIST_HEAD(&q->done_list);
2047         spin_lock_init(&q->done_lock);
2048         init_waitqueue_head(&q->done_wq);
2049
2050         if (q->buf_struct_size == 0)
2051                 q->buf_struct_size = sizeof(struct vb2_buffer);
2052
2053         return 0;
2054 }
2055 EXPORT_SYMBOL_GPL(vb2_queue_init);
2056
2057 /**
2058  * vb2_queue_release() - stop streaming, release the queue and free memory
2059  * @q:          videobuf2 queue
2060  *
2061  * This function stops streaming and performs necessary clean ups, including
2062  * freeing video buffer memory. The driver is responsible for freeing
2063  * the vb2_queue structure itself.
2064  */
2065 void vb2_queue_release(struct vb2_queue *q)
2066 {
2067         __vb2_cleanup_fileio(q);
2068         __vb2_queue_cancel(q);
2069         __vb2_queue_free(q, q->num_buffers);
2070 }
2071 EXPORT_SYMBOL_GPL(vb2_queue_release);
2072
2073 /**
2074  * struct vb2_fileio_buf - buffer context used by file io emulator
2075  *
2076  * vb2 provides a compatibility layer and emulator of file io (read and
2077  * write) calls on top of streaming API. This structure is used for
2078  * tracking context related to the buffers.
2079  */
2080 struct vb2_fileio_buf {
2081         void *vaddr;
2082         unsigned int size;
2083         unsigned int pos;
2084         unsigned int queued:1;
2085 };
2086
2087 /**
2088  * struct vb2_fileio_data - queue context used by file io emulator
2089  *
2090  * vb2 provides a compatibility layer and emulator of file io (read and
2091  * write) calls on top of streaming API. For proper operation it required
2092  * this structure to save the driver state between each call of the read
2093  * or write function.
2094  */
2095 struct vb2_fileio_data {
2096         struct v4l2_requestbuffers req;
2097         struct v4l2_buffer b;
2098         struct vb2_fileio_buf bufs[VIDEO_MAX_FRAME];
2099         unsigned int index;
2100         unsigned int q_count;
2101         unsigned int dq_count;
2102         unsigned int flags;
2103 };
2104
2105 /**
2106  * __vb2_init_fileio() - initialize file io emulator
2107  * @q:          videobuf2 queue
2108  * @read:       mode selector (1 means read, 0 means write)
2109  */
2110 static int __vb2_init_fileio(struct vb2_queue *q, int read)
2111 {
2112         struct vb2_fileio_data *fileio;
2113         int i, ret;
2114         unsigned int count = 0;
2115
2116         /*
2117          * Sanity check
2118          */
2119         if ((read && !(q->io_modes & VB2_READ)) ||
2120            (!read && !(q->io_modes & VB2_WRITE)))
2121                 BUG();
2122
2123         /*
2124          * Check if device supports mapping buffers to kernel virtual space.
2125          */
2126         if (!q->mem_ops->vaddr)
2127                 return -EBUSY;
2128
2129         /*
2130          * Check if streaming api has not been already activated.
2131          */
2132         if (q->streaming || q->num_buffers > 0)
2133                 return -EBUSY;
2134
2135         /*
2136          * Start with count 1, driver can increase it in queue_setup()
2137          */
2138         count = 1;
2139
2140         dprintk(3, "setting up file io: mode %s, count %d, flags %08x\n",
2141                 (read) ? "read" : "write", count, q->io_flags);
2142
2143         fileio = kzalloc(sizeof(struct vb2_fileio_data), GFP_KERNEL);
2144         if (fileio == NULL)
2145                 return -ENOMEM;
2146
2147         fileio->flags = q->io_flags;
2148
2149         /*
2150          * Request buffers and use MMAP type to force driver
2151          * to allocate buffers by itself.
2152          */
2153         fileio->req.count = count;
2154         fileio->req.memory = V4L2_MEMORY_MMAP;
2155         fileio->req.type = q->type;
2156         ret = vb2_reqbufs(q, &fileio->req);
2157         if (ret)
2158                 goto err_kfree;
2159
2160         /*
2161          * Check if plane_count is correct
2162          * (multiplane buffers are not supported).
2163          */
2164         if (q->bufs[0]->num_planes != 1) {
2165                 ret = -EBUSY;
2166                 goto err_reqbufs;
2167         }
2168
2169         /*
2170          * Get kernel address of each buffer.
2171          */
2172         for (i = 0; i < q->num_buffers; i++) {
2173                 fileio->bufs[i].vaddr = vb2_plane_vaddr(q->bufs[i], 0);
2174                 if (fileio->bufs[i].vaddr == NULL)
2175                         goto err_reqbufs;
2176                 fileio->bufs[i].size = vb2_plane_size(q->bufs[i], 0);
2177         }
2178
2179         /*
2180          * Read mode requires pre queuing of all buffers.
2181          */
2182         if (read) {
2183                 /*
2184                  * Queue all buffers.
2185                  */
2186                 for (i = 0; i < q->num_buffers; i++) {
2187                         struct v4l2_buffer *b = &fileio->b;
2188                         memset(b, 0, sizeof(*b));
2189                         b->type = q->type;
2190                         b->memory = q->memory;
2191                         b->index = i;
2192                         ret = vb2_qbuf(q, b);
2193                         if (ret)
2194                                 goto err_reqbufs;
2195                         fileio->bufs[i].queued = 1;
2196                 }
2197
2198                 /*
2199                  * Start streaming.
2200                  */
2201                 ret = vb2_streamon(q, q->type);
2202                 if (ret)
2203                         goto err_reqbufs;
2204         }
2205
2206         q->fileio = fileio;
2207
2208         return ret;
2209
2210 err_reqbufs:
2211         fileio->req.count = 0;
2212         vb2_reqbufs(q, &fileio->req);
2213
2214 err_kfree:
2215         kfree(fileio);
2216         return ret;
2217 }
2218
2219 /**
2220  * __vb2_cleanup_fileio() - free resourced used by file io emulator
2221  * @q:          videobuf2 queue
2222  */
2223 static int __vb2_cleanup_fileio(struct vb2_queue *q)
2224 {
2225         struct vb2_fileio_data *fileio = q->fileio;
2226
2227         if (fileio) {
2228                 /*
2229                  * Hack fileio context to enable direct calls to vb2 ioctl
2230                  * interface.
2231                  */
2232                 q->fileio = NULL;
2233
2234                 vb2_streamoff(q, q->type);
2235                 fileio->req.count = 0;
2236                 vb2_reqbufs(q, &fileio->req);
2237                 kfree(fileio);
2238                 dprintk(3, "file io emulator closed\n");
2239         }
2240         return 0;
2241 }
2242
2243 /**
2244  * __vb2_perform_fileio() - perform a single file io (read or write) operation
2245  * @q:          videobuf2 queue
2246  * @data:       pointed to target userspace buffer
2247  * @count:      number of bytes to read or write
2248  * @ppos:       file handle position tracking pointer
2249  * @nonblock:   mode selector (1 means blocking calls, 0 means nonblocking)
2250  * @read:       access mode selector (1 means read, 0 means write)
2251  */
2252 static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_t count,
2253                 loff_t *ppos, int nonblock, int read)
2254 {
2255         struct vb2_fileio_data *fileio;
2256         struct vb2_fileio_buf *buf;
2257         int ret, index;
2258
2259         dprintk(3, "file io: mode %s, offset %ld, count %zd, %sblocking\n",
2260                 read ? "read" : "write", (long)*ppos, count,
2261                 nonblock ? "non" : "");
2262
2263         if (!data)
2264                 return -EINVAL;
2265
2266         /*
2267          * Initialize emulator on first call.
2268          */
2269         if (!q->fileio) {
2270                 ret = __vb2_init_fileio(q, read);
2271                 dprintk(3, "file io: vb2_init_fileio result: %d\n", ret);
2272                 if (ret)
2273                         return ret;
2274         }
2275         fileio = q->fileio;
2276
2277         /*
2278          * Hack fileio context to enable direct calls to vb2 ioctl interface.
2279          * The pointer will be restored before returning from this function.
2280          */
2281         q->fileio = NULL;
2282
2283         index = fileio->index;
2284         buf = &fileio->bufs[index];
2285
2286         /*
2287          * Check if we need to dequeue the buffer.
2288          */
2289         if (buf->queued) {
2290                 struct vb2_buffer *vb;
2291
2292                 /*
2293                  * Call vb2_dqbuf to get buffer back.
2294                  */
2295                 memset(&fileio->b, 0, sizeof(fileio->b));
2296                 fileio->b.type = q->type;
2297                 fileio->b.memory = q->memory;
2298                 fileio->b.index = index;
2299                 ret = vb2_dqbuf(q, &fileio->b, nonblock);
2300                 dprintk(5, "file io: vb2_dqbuf result: %d\n", ret);
2301                 if (ret)
2302                         goto end;
2303                 fileio->dq_count += 1;
2304
2305                 /*
2306                  * Get number of bytes filled by the driver
2307                  */
2308                 vb = q->bufs[index];
2309                 buf->size = vb2_get_plane_payload(vb, 0);
2310                 buf->queued = 0;
2311         }
2312
2313         /*
2314          * Limit count on last few bytes of the buffer.
2315          */
2316         if (buf->pos + count > buf->size) {
2317                 count = buf->size - buf->pos;
2318                 dprintk(5, "reducing read count: %zd\n", count);
2319         }
2320
2321         /*
2322          * Transfer data to userspace.
2323          */
2324         dprintk(3, "file io: copying %zd bytes - buffer %d, offset %u\n",
2325                 count, index, buf->pos);
2326         if (read)
2327                 ret = copy_to_user(data, buf->vaddr + buf->pos, count);
2328         else
2329                 ret = copy_from_user(buf->vaddr + buf->pos, data, count);
2330         if (ret) {
2331                 dprintk(3, "file io: error copying data\n");
2332                 ret = -EFAULT;
2333                 goto end;
2334         }
2335
2336         /*
2337          * Update counters.
2338          */
2339         buf->pos += count;
2340         *ppos += count;
2341
2342         /*
2343          * Queue next buffer if required.
2344          */
2345         if (buf->pos == buf->size ||
2346            (!read && (fileio->flags & VB2_FILEIO_WRITE_IMMEDIATELY))) {
2347                 /*
2348                  * Check if this is the last buffer to read.
2349                  */
2350                 if (read && (fileio->flags & VB2_FILEIO_READ_ONCE) &&
2351                     fileio->dq_count == 1) {
2352                         dprintk(3, "file io: read limit reached\n");
2353                         /*
2354                          * Restore fileio pointer and release the context.
2355                          */
2356                         q->fileio = fileio;
2357                         return __vb2_cleanup_fileio(q);
2358                 }
2359
2360                 /*
2361                  * Call vb2_qbuf and give buffer to the driver.
2362                  */
2363                 memset(&fileio->b, 0, sizeof(fileio->b));
2364                 fileio->b.type = q->type;
2365                 fileio->b.memory = q->memory;
2366                 fileio->b.index = index;
2367                 fileio->b.bytesused = buf->pos;
2368                 ret = vb2_qbuf(q, &fileio->b);
2369                 dprintk(5, "file io: vb2_dbuf result: %d\n", ret);
2370                 if (ret)
2371                         goto end;
2372
2373                 /*
2374                  * Buffer has been queued, update the status
2375                  */
2376                 buf->pos = 0;
2377                 buf->queued = 1;
2378                 buf->size = q->bufs[0]->v4l2_planes[0].length;
2379                 fileio->q_count += 1;
2380
2381                 /*
2382                  * Switch to the next buffer
2383                  */
2384                 fileio->index = (index + 1) % q->num_buffers;
2385
2386                 /*
2387                  * Start streaming if required.
2388                  */
2389                 if (!read && !q->streaming) {
2390                         ret = vb2_streamon(q, q->type);
2391                         if (ret)
2392                                 goto end;
2393                 }
2394         }
2395
2396         /*
2397          * Return proper number of bytes processed.
2398          */
2399         if (ret == 0)
2400                 ret = count;
2401 end:
2402         /*
2403          * Restore the fileio context and block vb2 ioctl interface.
2404          */
2405         q->fileio = fileio;
2406         return ret;
2407 }
2408
2409 size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count,
2410                 loff_t *ppos, int nonblocking)
2411 {
2412         return __vb2_perform_fileio(q, data, count, ppos, nonblocking, 1);
2413 }
2414 EXPORT_SYMBOL_GPL(vb2_read);
2415
2416 size_t vb2_write(struct vb2_queue *q, char __user *data, size_t count,
2417                 loff_t *ppos, int nonblocking)
2418 {
2419         return __vb2_perform_fileio(q, data, count, ppos, nonblocking, 0);
2420 }
2421 EXPORT_SYMBOL_GPL(vb2_write);
2422
2423
2424 /*
2425  * The following functions are not part of the vb2 core API, but are helper
2426  * functions that plug into struct v4l2_ioctl_ops, struct v4l2_file_operations
2427  * and struct vb2_ops.
2428  * They contain boilerplate code that most if not all drivers have to do
2429  * and so they simplify the driver code.
2430  */
2431
2432 /* The queue is busy if there is a owner and you are not that owner. */
2433 static inline bool vb2_queue_is_busy(struct video_device *vdev, struct file *file)
2434 {
2435         return vdev->queue->owner && vdev->queue->owner != file->private_data;
2436 }
2437
2438 /* vb2 ioctl helpers */
2439
2440 int vb2_ioctl_reqbufs(struct file *file, void *priv,
2441                           struct v4l2_requestbuffers *p)
2442 {
2443         struct video_device *vdev = video_devdata(file);
2444         int res = __verify_memory_type(vdev->queue, p->memory, p->type);
2445
2446         if (res)
2447                 return res;
2448         if (vb2_queue_is_busy(vdev, file))
2449                 return -EBUSY;
2450         res = __reqbufs(vdev->queue, p);
2451         /* If count == 0, then the owner has released all buffers and he
2452            is no longer owner of the queue. Otherwise we have a new owner. */
2453         if (res == 0)
2454                 vdev->queue->owner = p->count ? file->private_data : NULL;
2455         return res;
2456 }
2457 EXPORT_SYMBOL_GPL(vb2_ioctl_reqbufs);
2458
2459 int vb2_ioctl_create_bufs(struct file *file, void *priv,
2460                           struct v4l2_create_buffers *p)
2461 {
2462         struct video_device *vdev = video_devdata(file);
2463         int res = __verify_memory_type(vdev->queue, p->memory, p->format.type);
2464
2465         p->index = vdev->queue->num_buffers;
2466         /* If count == 0, then just check if memory and type are valid.
2467            Any -EBUSY result from __verify_memory_type can be mapped to 0. */
2468         if (p->count == 0)
2469                 return res != -EBUSY ? res : 0;
2470         if (res)
2471                 return res;
2472         if (vb2_queue_is_busy(vdev, file))
2473                 return -EBUSY;
2474         res = __create_bufs(vdev->queue, p);
2475         if (res == 0)
2476                 vdev->queue->owner = file->private_data;
2477         return res;
2478 }
2479 EXPORT_SYMBOL_GPL(vb2_ioctl_create_bufs);
2480
2481 int vb2_ioctl_prepare_buf(struct file *file, void *priv,
2482                           struct v4l2_buffer *p)
2483 {
2484         struct video_device *vdev = video_devdata(file);
2485
2486         if (vb2_queue_is_busy(vdev, file))
2487                 return -EBUSY;
2488         return vb2_prepare_buf(vdev->queue, p);
2489 }
2490 EXPORT_SYMBOL_GPL(vb2_ioctl_prepare_buf);
2491
2492 int vb2_ioctl_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
2493 {
2494         struct video_device *vdev = video_devdata(file);
2495
2496         /* No need to call vb2_queue_is_busy(), anyone can query buffers. */
2497         return vb2_querybuf(vdev->queue, p);
2498 }
2499 EXPORT_SYMBOL_GPL(vb2_ioctl_querybuf);
2500
2501 int vb2_ioctl_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
2502 {
2503         struct video_device *vdev = video_devdata(file);
2504
2505         if (vb2_queue_is_busy(vdev, file))
2506                 return -EBUSY;
2507         return vb2_qbuf(vdev->queue, p);
2508 }
2509 EXPORT_SYMBOL_GPL(vb2_ioctl_qbuf);
2510
2511 int vb2_ioctl_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
2512 {
2513         struct video_device *vdev = video_devdata(file);
2514
2515         if (vb2_queue_is_busy(vdev, file))
2516                 return -EBUSY;
2517         return vb2_dqbuf(vdev->queue, p, file->f_flags & O_NONBLOCK);
2518 }
2519 EXPORT_SYMBOL_GPL(vb2_ioctl_dqbuf);
2520
2521 int vb2_ioctl_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
2522 {
2523         struct video_device *vdev = video_devdata(file);
2524
2525         if (vb2_queue_is_busy(vdev, file))
2526                 return -EBUSY;
2527         return vb2_streamon(vdev->queue, i);
2528 }
2529 EXPORT_SYMBOL_GPL(vb2_ioctl_streamon);
2530
2531 int vb2_ioctl_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
2532 {
2533         struct video_device *vdev = video_devdata(file);
2534
2535         if (vb2_queue_is_busy(vdev, file))
2536                 return -EBUSY;
2537         return vb2_streamoff(vdev->queue, i);
2538 }
2539 EXPORT_SYMBOL_GPL(vb2_ioctl_streamoff);
2540
2541 int vb2_ioctl_expbuf(struct file *file, void *priv, struct v4l2_exportbuffer *p)
2542 {
2543         struct video_device *vdev = video_devdata(file);
2544
2545         if (vb2_queue_is_busy(vdev, file))
2546                 return -EBUSY;
2547         return vb2_expbuf(vdev->queue, p);
2548 }
2549 EXPORT_SYMBOL_GPL(vb2_ioctl_expbuf);
2550
2551 /* v4l2_file_operations helpers */
2552
2553 int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma)
2554 {
2555         struct video_device *vdev = video_devdata(file);
2556
2557         return vb2_mmap(vdev->queue, vma);
2558 }
2559 EXPORT_SYMBOL_GPL(vb2_fop_mmap);
2560
2561 int vb2_fop_release(struct file *file)
2562 {
2563         struct video_device *vdev = video_devdata(file);
2564
2565         if (file->private_data == vdev->queue->owner) {
2566                 vb2_queue_release(vdev->queue);
2567                 vdev->queue->owner = NULL;
2568         }
2569         return v4l2_fh_release(file);
2570 }
2571 EXPORT_SYMBOL_GPL(vb2_fop_release);
2572
2573 ssize_t vb2_fop_write(struct file *file, char __user *buf,
2574                 size_t count, loff_t *ppos)
2575 {
2576         struct video_device *vdev = video_devdata(file);
2577         struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock;
2578         int err = -EBUSY;
2579
2580         if (lock && mutex_lock_interruptible(lock))
2581                 return -ERESTARTSYS;
2582         if (vb2_queue_is_busy(vdev, file))
2583                 goto exit;
2584         err = vb2_write(vdev->queue, buf, count, ppos,
2585                        file->f_flags & O_NONBLOCK);
2586         if (vdev->queue->fileio)
2587                 vdev->queue->owner = file->private_data;
2588 exit:
2589         if (lock)
2590                 mutex_unlock(lock);
2591         return err;
2592 }
2593 EXPORT_SYMBOL_GPL(vb2_fop_write);
2594
2595 ssize_t vb2_fop_read(struct file *file, char __user *buf,
2596                 size_t count, loff_t *ppos)
2597 {
2598         struct video_device *vdev = video_devdata(file);
2599         struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock;
2600         int err = -EBUSY;
2601
2602         if (lock && mutex_lock_interruptible(lock))
2603                 return -ERESTARTSYS;
2604         if (vb2_queue_is_busy(vdev, file))
2605                 goto exit;
2606         err = vb2_read(vdev->queue, buf, count, ppos,
2607                        file->f_flags & O_NONBLOCK);
2608         if (vdev->queue->fileio)
2609                 vdev->queue->owner = file->private_data;
2610 exit:
2611         if (lock)
2612                 mutex_unlock(lock);
2613         return err;
2614 }
2615 EXPORT_SYMBOL_GPL(vb2_fop_read);
2616
2617 unsigned int vb2_fop_poll(struct file *file, poll_table *wait)
2618 {
2619         struct video_device *vdev = video_devdata(file);
2620         struct vb2_queue *q = vdev->queue;
2621         struct mutex *lock = q->lock ? q->lock : vdev->lock;
2622         unsigned long req_events = poll_requested_events(wait);
2623         unsigned res;
2624         void *fileio;
2625         bool must_lock = false;
2626
2627         /* Try to be smart: only lock if polling might start fileio,
2628            otherwise locking will only introduce unwanted delays. */
2629         if (q->num_buffers == 0 && q->fileio == NULL) {
2630                 if (!V4L2_TYPE_IS_OUTPUT(q->type) && (q->io_modes & VB2_READ) &&
2631                                 (req_events & (POLLIN | POLLRDNORM)))
2632                         must_lock = true;
2633                 else if (V4L2_TYPE_IS_OUTPUT(q->type) && (q->io_modes & VB2_WRITE) &&
2634                                 (req_events & (POLLOUT | POLLWRNORM)))
2635                         must_lock = true;
2636         }
2637
2638         /* If locking is needed, but this helper doesn't know how, then you
2639            shouldn't be using this helper but you should write your own. */
2640         WARN_ON(must_lock && !lock);
2641
2642         if (must_lock && lock && mutex_lock_interruptible(lock))
2643                 return POLLERR;
2644
2645         fileio = q->fileio;
2646
2647         res = vb2_poll(vdev->queue, file, wait);
2648
2649         /* If fileio was started, then we have a new queue owner. */
2650         if (must_lock && !fileio && q->fileio)
2651                 q->owner = file->private_data;
2652         if (must_lock && lock)
2653                 mutex_unlock(lock);
2654         return res;
2655 }
2656 EXPORT_SYMBOL_GPL(vb2_fop_poll);
2657
2658 #ifndef CONFIG_MMU
2659 unsigned long vb2_fop_get_unmapped_area(struct file *file, unsigned long addr,
2660                 unsigned long len, unsigned long pgoff, unsigned long flags)
2661 {
2662         struct video_device *vdev = video_devdata(file);
2663
2664         return vb2_get_unmapped_area(vdev->queue, addr, len, pgoff, flags);
2665 }
2666 EXPORT_SYMBOL_GPL(vb2_fop_get_unmapped_area);
2667 #endif
2668
2669 /* vb2_ops helpers. Only use if vq->lock is non-NULL. */
2670
2671 void vb2_ops_wait_prepare(struct vb2_queue *vq)
2672 {
2673         mutex_unlock(vq->lock);
2674 }
2675 EXPORT_SYMBOL_GPL(vb2_ops_wait_prepare);
2676
2677 void vb2_ops_wait_finish(struct vb2_queue *vq)
2678 {
2679         mutex_lock(vq->lock);
2680 }
2681 EXPORT_SYMBOL_GPL(vb2_ops_wait_finish);
2682
2683 MODULE_DESCRIPTION("Driver helper framework for Video for Linux 2");
2684 MODULE_AUTHOR("Pawel Osciak <pawel@osciak.com>, Marek Szyprowski");
2685 MODULE_LICENSE("GPL");