Merge tag 'm68k-for-v5.15-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / media / common / videobuf2 / videobuf2-core.c
1 /*
2  * videobuf2-core.c - video buffer 2 core 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  * The vb2_thread implementation was based on code from videobuf-dvb.c:
10  *      (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SUSE Labs]
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation.
15  */
16
17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18
19 #include <linux/err.h>
20 #include <linux/kernel.h>
21 #include <linux/module.h>
22 #include <linux/mm.h>
23 #include <linux/poll.h>
24 #include <linux/slab.h>
25 #include <linux/sched.h>
26 #include <linux/freezer.h>
27 #include <linux/kthread.h>
28
29 #include <media/videobuf2-core.h>
30 #include <media/v4l2-mc.h>
31
32 #include <trace/events/vb2.h>
33
34 static int debug;
35 module_param(debug, int, 0644);
36
37 #define dprintk(q, level, fmt, arg...)                                  \
38         do {                                                            \
39                 if (debug >= level)                                     \
40                         pr_info("[%s] %s: " fmt, (q)->name, __func__,   \
41                                 ## arg);                                \
42         } while (0)
43
44 #ifdef CONFIG_VIDEO_ADV_DEBUG
45
46 /*
47  * If advanced debugging is on, then count how often each op is called
48  * successfully, which can either be per-buffer or per-queue.
49  *
50  * This makes it easy to check that the 'init' and 'cleanup'
51  * (and variations thereof) stay balanced.
52  */
53
54 #define log_memop(vb, op)                                               \
55         dprintk((vb)->vb2_queue, 2, "call_memop(%d, %s)%s\n",           \
56                 (vb)->index, #op,                                       \
57                 (vb)->vb2_queue->mem_ops->op ? "" : " (nop)")
58
59 #define call_memop(vb, op, args...)                                     \
60 ({                                                                      \
61         struct vb2_queue *_q = (vb)->vb2_queue;                         \
62         int err;                                                        \
63                                                                         \
64         log_memop(vb, op);                                              \
65         err = _q->mem_ops->op ? _q->mem_ops->op(args) : 0;              \
66         if (!err)                                                       \
67                 (vb)->cnt_mem_ ## op++;                                 \
68         err;                                                            \
69 })
70
71 #define call_ptr_memop(vb, op, args...)                                 \
72 ({                                                                      \
73         struct vb2_queue *_q = (vb)->vb2_queue;                         \
74         void *ptr;                                                      \
75                                                                         \
76         log_memop(vb, op);                                              \
77         ptr = _q->mem_ops->op ? _q->mem_ops->op(args) : NULL;           \
78         if (!IS_ERR_OR_NULL(ptr))                                       \
79                 (vb)->cnt_mem_ ## op++;                                 \
80         ptr;                                                            \
81 })
82
83 #define call_void_memop(vb, op, args...)                                \
84 ({                                                                      \
85         struct vb2_queue *_q = (vb)->vb2_queue;                         \
86                                                                         \
87         log_memop(vb, op);                                              \
88         if (_q->mem_ops->op)                                            \
89                 _q->mem_ops->op(args);                                  \
90         (vb)->cnt_mem_ ## op++;                                         \
91 })
92
93 #define log_qop(q, op)                                                  \
94         dprintk(q, 2, "call_qop(%s)%s\n", #op,                          \
95                 (q)->ops->op ? "" : " (nop)")
96
97 #define call_qop(q, op, args...)                                        \
98 ({                                                                      \
99         int err;                                                        \
100                                                                         \
101         log_qop(q, op);                                                 \
102         err = (q)->ops->op ? (q)->ops->op(args) : 0;                    \
103         if (!err)                                                       \
104                 (q)->cnt_ ## op++;                                      \
105         err;                                                            \
106 })
107
108 #define call_void_qop(q, op, args...)                                   \
109 ({                                                                      \
110         log_qop(q, op);                                                 \
111         if ((q)->ops->op)                                               \
112                 (q)->ops->op(args);                                     \
113         (q)->cnt_ ## op++;                                              \
114 })
115
116 #define log_vb_qop(vb, op, args...)                                     \
117         dprintk((vb)->vb2_queue, 2, "call_vb_qop(%d, %s)%s\n",          \
118                 (vb)->index, #op,                                       \
119                 (vb)->vb2_queue->ops->op ? "" : " (nop)")
120
121 #define call_vb_qop(vb, op, args...)                                    \
122 ({                                                                      \
123         int err;                                                        \
124                                                                         \
125         log_vb_qop(vb, op);                                             \
126         err = (vb)->vb2_queue->ops->op ?                                \
127                 (vb)->vb2_queue->ops->op(args) : 0;                     \
128         if (!err)                                                       \
129                 (vb)->cnt_ ## op++;                                     \
130         err;                                                            \
131 })
132
133 #define call_void_vb_qop(vb, op, args...)                               \
134 ({                                                                      \
135         log_vb_qop(vb, op);                                             \
136         if ((vb)->vb2_queue->ops->op)                                   \
137                 (vb)->vb2_queue->ops->op(args);                         \
138         (vb)->cnt_ ## op++;                                             \
139 })
140
141 #else
142
143 #define call_memop(vb, op, args...)                                     \
144         ((vb)->vb2_queue->mem_ops->op ?                                 \
145                 (vb)->vb2_queue->mem_ops->op(args) : 0)
146
147 #define call_ptr_memop(vb, op, args...)                                 \
148         ((vb)->vb2_queue->mem_ops->op ?                                 \
149                 (vb)->vb2_queue->mem_ops->op(args) : NULL)
150
151 #define call_void_memop(vb, op, args...)                                \
152         do {                                                            \
153                 if ((vb)->vb2_queue->mem_ops->op)                       \
154                         (vb)->vb2_queue->mem_ops->op(args);             \
155         } while (0)
156
157 #define call_qop(q, op, args...)                                        \
158         ((q)->ops->op ? (q)->ops->op(args) : 0)
159
160 #define call_void_qop(q, op, args...)                                   \
161         do {                                                            \
162                 if ((q)->ops->op)                                       \
163                         (q)->ops->op(args);                             \
164         } while (0)
165
166 #define call_vb_qop(vb, op, args...)                                    \
167         ((vb)->vb2_queue->ops->op ? (vb)->vb2_queue->ops->op(args) : 0)
168
169 #define call_void_vb_qop(vb, op, args...)                               \
170         do {                                                            \
171                 if ((vb)->vb2_queue->ops->op)                           \
172                         (vb)->vb2_queue->ops->op(args);                 \
173         } while (0)
174
175 #endif
176
177 #define call_bufop(q, op, args...)                                      \
178 ({                                                                      \
179         int ret = 0;                                                    \
180         if (q && q->buf_ops && q->buf_ops->op)                          \
181                 ret = q->buf_ops->op(args);                             \
182         ret;                                                            \
183 })
184
185 #define call_void_bufop(q, op, args...)                                 \
186 ({                                                                      \
187         if (q && q->buf_ops && q->buf_ops->op)                          \
188                 q->buf_ops->op(args);                                   \
189 })
190
191 static void __vb2_queue_cancel(struct vb2_queue *q);
192 static void __enqueue_in_driver(struct vb2_buffer *vb);
193
194 static const char *vb2_state_name(enum vb2_buffer_state s)
195 {
196         static const char * const state_names[] = {
197                 [VB2_BUF_STATE_DEQUEUED] = "dequeued",
198                 [VB2_BUF_STATE_IN_REQUEST] = "in request",
199                 [VB2_BUF_STATE_PREPARING] = "preparing",
200                 [VB2_BUF_STATE_QUEUED] = "queued",
201                 [VB2_BUF_STATE_ACTIVE] = "active",
202                 [VB2_BUF_STATE_DONE] = "done",
203                 [VB2_BUF_STATE_ERROR] = "error",
204         };
205
206         if ((unsigned int)(s) < ARRAY_SIZE(state_names))
207                 return state_names[s];
208         return "unknown";
209 }
210
211 /*
212  * __vb2_buf_mem_alloc() - allocate video memory for the given buffer
213  */
214 static int __vb2_buf_mem_alloc(struct vb2_buffer *vb)
215 {
216         struct vb2_queue *q = vb->vb2_queue;
217         void *mem_priv;
218         int plane;
219         int ret = -ENOMEM;
220
221         /*
222          * Allocate memory for all planes in this buffer
223          * NOTE: mmapped areas should be page aligned
224          */
225         for (plane = 0; plane < vb->num_planes; ++plane) {
226                 /* Memops alloc requires size to be page aligned. */
227                 unsigned long size = PAGE_ALIGN(vb->planes[plane].length);
228
229                 /* Did it wrap around? */
230                 if (size < vb->planes[plane].length)
231                         goto free;
232
233                 mem_priv = call_ptr_memop(vb, alloc,
234                                 q->alloc_devs[plane] ? : q->dev,
235                                 q->dma_attrs, size, q->dma_dir, q->gfp_flags);
236                 if (IS_ERR_OR_NULL(mem_priv)) {
237                         if (mem_priv)
238                                 ret = PTR_ERR(mem_priv);
239                         goto free;
240                 }
241
242                 /* Associate allocator private data with this plane */
243                 vb->planes[plane].mem_priv = mem_priv;
244         }
245
246         return 0;
247 free:
248         /* Free already allocated memory if one of the allocations failed */
249         for (; plane > 0; --plane) {
250                 call_void_memop(vb, put, vb->planes[plane - 1].mem_priv);
251                 vb->planes[plane - 1].mem_priv = NULL;
252         }
253
254         return ret;
255 }
256
257 /*
258  * __vb2_buf_mem_free() - free memory of the given buffer
259  */
260 static void __vb2_buf_mem_free(struct vb2_buffer *vb)
261 {
262         unsigned int plane;
263
264         for (plane = 0; plane < vb->num_planes; ++plane) {
265                 call_void_memop(vb, put, vb->planes[plane].mem_priv);
266                 vb->planes[plane].mem_priv = NULL;
267                 dprintk(vb->vb2_queue, 3, "freed plane %d of buffer %d\n",
268                         plane, vb->index);
269         }
270 }
271
272 /*
273  * __vb2_buf_userptr_put() - release userspace memory associated with
274  * a USERPTR buffer
275  */
276 static void __vb2_buf_userptr_put(struct vb2_buffer *vb)
277 {
278         unsigned int plane;
279
280         for (plane = 0; plane < vb->num_planes; ++plane) {
281                 if (vb->planes[plane].mem_priv)
282                         call_void_memop(vb, put_userptr, vb->planes[plane].mem_priv);
283                 vb->planes[plane].mem_priv = NULL;
284         }
285 }
286
287 /*
288  * __vb2_plane_dmabuf_put() - release memory associated with
289  * a DMABUF shared plane
290  */
291 static void __vb2_plane_dmabuf_put(struct vb2_buffer *vb, struct vb2_plane *p)
292 {
293         if (!p->mem_priv)
294                 return;
295
296         if (p->dbuf_mapped)
297                 call_void_memop(vb, unmap_dmabuf, p->mem_priv);
298
299         call_void_memop(vb, detach_dmabuf, p->mem_priv);
300         dma_buf_put(p->dbuf);
301         p->mem_priv = NULL;
302         p->dbuf = NULL;
303         p->dbuf_mapped = 0;
304 }
305
306 /*
307  * __vb2_buf_dmabuf_put() - release memory associated with
308  * a DMABUF shared buffer
309  */
310 static void __vb2_buf_dmabuf_put(struct vb2_buffer *vb)
311 {
312         unsigned int plane;
313
314         for (plane = 0; plane < vb->num_planes; ++plane)
315                 __vb2_plane_dmabuf_put(vb, &vb->planes[plane]);
316 }
317
318 /*
319  * __vb2_buf_mem_prepare() - call ->prepare() on buffer's private memory
320  * to sync caches
321  */
322 static void __vb2_buf_mem_prepare(struct vb2_buffer *vb)
323 {
324         unsigned int plane;
325
326         if (vb->synced)
327                 return;
328
329         if (vb->need_cache_sync_on_prepare) {
330                 for (plane = 0; plane < vb->num_planes; ++plane)
331                         call_void_memop(vb, prepare,
332                                         vb->planes[plane].mem_priv);
333         }
334         vb->synced = 1;
335 }
336
337 /*
338  * __vb2_buf_mem_finish() - call ->finish on buffer's private memory
339  * to sync caches
340  */
341 static void __vb2_buf_mem_finish(struct vb2_buffer *vb)
342 {
343         unsigned int plane;
344
345         if (!vb->synced)
346                 return;
347
348         if (vb->need_cache_sync_on_finish) {
349                 for (plane = 0; plane < vb->num_planes; ++plane)
350                         call_void_memop(vb, finish,
351                                         vb->planes[plane].mem_priv);
352         }
353         vb->synced = 0;
354 }
355
356 /*
357  * __setup_offsets() - setup unique offsets ("cookies") for every plane in
358  * the buffer.
359  */
360 static void __setup_offsets(struct vb2_buffer *vb)
361 {
362         struct vb2_queue *q = vb->vb2_queue;
363         unsigned int plane;
364         unsigned long off = 0;
365
366         if (vb->index) {
367                 struct vb2_buffer *prev = q->bufs[vb->index - 1];
368                 struct vb2_plane *p = &prev->planes[prev->num_planes - 1];
369
370                 off = PAGE_ALIGN(p->m.offset + p->length);
371         }
372
373         for (plane = 0; plane < vb->num_planes; ++plane) {
374                 vb->planes[plane].m.offset = off;
375
376                 dprintk(q, 3, "buffer %d, plane %d offset 0x%08lx\n",
377                                 vb->index, plane, off);
378
379                 off += vb->planes[plane].length;
380                 off = PAGE_ALIGN(off);
381         }
382 }
383
384 /*
385  * __vb2_queue_alloc() - allocate videobuf buffer structures and (for MMAP type)
386  * video buffer memory for all buffers/planes on the queue and initializes the
387  * queue
388  *
389  * Returns the number of buffers successfully allocated.
390  */
391 static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory,
392                              unsigned int num_buffers, unsigned int num_planes,
393                              const unsigned plane_sizes[VB2_MAX_PLANES])
394 {
395         unsigned int buffer, plane;
396         struct vb2_buffer *vb;
397         int ret;
398
399         /* Ensure that q->num_buffers+num_buffers is below VB2_MAX_FRAME */
400         num_buffers = min_t(unsigned int, num_buffers,
401                             VB2_MAX_FRAME - q->num_buffers);
402
403         for (buffer = 0; buffer < num_buffers; ++buffer) {
404                 /* Allocate videobuf buffer structures */
405                 vb = kzalloc(q->buf_struct_size, GFP_KERNEL);
406                 if (!vb) {
407                         dprintk(q, 1, "memory alloc for buffer struct failed\n");
408                         break;
409                 }
410
411                 vb->state = VB2_BUF_STATE_DEQUEUED;
412                 vb->vb2_queue = q;
413                 vb->num_planes = num_planes;
414                 vb->index = q->num_buffers + buffer;
415                 vb->type = q->type;
416                 vb->memory = memory;
417                 /*
418                  * We need to set these flags here so that the videobuf2 core
419                  * will call ->prepare()/->finish() cache sync/flush on vb2
420                  * buffers when appropriate. However, we can avoid explicit
421                  * ->prepare() and ->finish() cache sync for DMABUF buffers,
422                  * because DMA exporter takes care of it.
423                  */
424                 if (q->memory != VB2_MEMORY_DMABUF) {
425                         vb->need_cache_sync_on_prepare = 1;
426                         vb->need_cache_sync_on_finish = 1;
427                 }
428                 for (plane = 0; plane < num_planes; ++plane) {
429                         vb->planes[plane].length = plane_sizes[plane];
430                         vb->planes[plane].min_length = plane_sizes[plane];
431                 }
432                 call_void_bufop(q, init_buffer, vb);
433
434                 q->bufs[vb->index] = vb;
435
436                 /* Allocate video buffer memory for the MMAP type */
437                 if (memory == VB2_MEMORY_MMAP) {
438                         ret = __vb2_buf_mem_alloc(vb);
439                         if (ret) {
440                                 dprintk(q, 1, "failed allocating memory for buffer %d\n",
441                                         buffer);
442                                 q->bufs[vb->index] = NULL;
443                                 kfree(vb);
444                                 break;
445                         }
446                         __setup_offsets(vb);
447                         /*
448                          * Call the driver-provided buffer initialization
449                          * callback, if given. An error in initialization
450                          * results in queue setup failure.
451                          */
452                         ret = call_vb_qop(vb, buf_init, vb);
453                         if (ret) {
454                                 dprintk(q, 1, "buffer %d %p initialization failed\n",
455                                         buffer, vb);
456                                 __vb2_buf_mem_free(vb);
457                                 q->bufs[vb->index] = NULL;
458                                 kfree(vb);
459                                 break;
460                         }
461                 }
462         }
463
464         dprintk(q, 3, "allocated %d buffers, %d plane(s) each\n",
465                 buffer, num_planes);
466
467         return buffer;
468 }
469
470 /*
471  * __vb2_free_mem() - release all video buffer memory for a given queue
472  */
473 static void __vb2_free_mem(struct vb2_queue *q, unsigned int buffers)
474 {
475         unsigned int buffer;
476         struct vb2_buffer *vb;
477
478         for (buffer = q->num_buffers - buffers; buffer < q->num_buffers;
479              ++buffer) {
480                 vb = q->bufs[buffer];
481                 if (!vb)
482                         continue;
483
484                 /* Free MMAP buffers or release USERPTR buffers */
485                 if (q->memory == VB2_MEMORY_MMAP)
486                         __vb2_buf_mem_free(vb);
487                 else if (q->memory == VB2_MEMORY_DMABUF)
488                         __vb2_buf_dmabuf_put(vb);
489                 else
490                         __vb2_buf_userptr_put(vb);
491         }
492 }
493
494 /*
495  * __vb2_queue_free() - free buffers at the end of the queue - video memory and
496  * related information, if no buffers are left return the queue to an
497  * uninitialized state. Might be called even if the queue has already been freed.
498  */
499 static int __vb2_queue_free(struct vb2_queue *q, unsigned int buffers)
500 {
501         unsigned int buffer;
502
503         /*
504          * Sanity check: when preparing a buffer the queue lock is released for
505          * a short while (see __buf_prepare for the details), which would allow
506          * a race with a reqbufs which can call this function. Removing the
507          * buffers from underneath __buf_prepare is obviously a bad idea, so we
508          * check if any of the buffers is in the state PREPARING, and if so we
509          * just return -EAGAIN.
510          */
511         for (buffer = q->num_buffers - buffers; buffer < q->num_buffers;
512              ++buffer) {
513                 if (q->bufs[buffer] == NULL)
514                         continue;
515                 if (q->bufs[buffer]->state == VB2_BUF_STATE_PREPARING) {
516                         dprintk(q, 1, "preparing buffers, cannot free\n");
517                         return -EAGAIN;
518                 }
519         }
520
521         /* Call driver-provided cleanup function for each buffer, if provided */
522         for (buffer = q->num_buffers - buffers; buffer < q->num_buffers;
523              ++buffer) {
524                 struct vb2_buffer *vb = q->bufs[buffer];
525
526                 if (vb && vb->planes[0].mem_priv)
527                         call_void_vb_qop(vb, buf_cleanup, vb);
528         }
529
530         /* Release video buffer memory */
531         __vb2_free_mem(q, buffers);
532
533 #ifdef CONFIG_VIDEO_ADV_DEBUG
534         /*
535          * Check that all the calls were balances during the life-time of this
536          * queue. If not (or if the debug level is 1 or up), then dump the
537          * counters to the kernel log.
538          */
539         if (q->num_buffers) {
540                 bool unbalanced = q->cnt_start_streaming != q->cnt_stop_streaming ||
541                                   q->cnt_wait_prepare != q->cnt_wait_finish;
542
543                 if (unbalanced || debug) {
544                         pr_info("counters for queue %p:%s\n", q,
545                                 unbalanced ? " UNBALANCED!" : "");
546                         pr_info("     setup: %u start_streaming: %u stop_streaming: %u\n",
547                                 q->cnt_queue_setup, q->cnt_start_streaming,
548                                 q->cnt_stop_streaming);
549                         pr_info("     wait_prepare: %u wait_finish: %u\n",
550                                 q->cnt_wait_prepare, q->cnt_wait_finish);
551                 }
552                 q->cnt_queue_setup = 0;
553                 q->cnt_wait_prepare = 0;
554                 q->cnt_wait_finish = 0;
555                 q->cnt_start_streaming = 0;
556                 q->cnt_stop_streaming = 0;
557         }
558         for (buffer = 0; buffer < q->num_buffers; ++buffer) {
559                 struct vb2_buffer *vb = q->bufs[buffer];
560                 bool unbalanced = vb->cnt_mem_alloc != vb->cnt_mem_put ||
561                                   vb->cnt_mem_prepare != vb->cnt_mem_finish ||
562                                   vb->cnt_mem_get_userptr != vb->cnt_mem_put_userptr ||
563                                   vb->cnt_mem_attach_dmabuf != vb->cnt_mem_detach_dmabuf ||
564                                   vb->cnt_mem_map_dmabuf != vb->cnt_mem_unmap_dmabuf ||
565                                   vb->cnt_buf_queue != vb->cnt_buf_done ||
566                                   vb->cnt_buf_prepare != vb->cnt_buf_finish ||
567                                   vb->cnt_buf_init != vb->cnt_buf_cleanup;
568
569                 if (unbalanced || debug) {
570                         pr_info("   counters for queue %p, buffer %d:%s\n",
571                                 q, buffer, unbalanced ? " UNBALANCED!" : "");
572                         pr_info("     buf_init: %u buf_cleanup: %u buf_prepare: %u buf_finish: %u\n",
573                                 vb->cnt_buf_init, vb->cnt_buf_cleanup,
574                                 vb->cnt_buf_prepare, vb->cnt_buf_finish);
575                         pr_info("     buf_out_validate: %u buf_queue: %u buf_done: %u buf_request_complete: %u\n",
576                                 vb->cnt_buf_out_validate, vb->cnt_buf_queue,
577                                 vb->cnt_buf_done, vb->cnt_buf_request_complete);
578                         pr_info("     alloc: %u put: %u prepare: %u finish: %u mmap: %u\n",
579                                 vb->cnt_mem_alloc, vb->cnt_mem_put,
580                                 vb->cnt_mem_prepare, vb->cnt_mem_finish,
581                                 vb->cnt_mem_mmap);
582                         pr_info("     get_userptr: %u put_userptr: %u\n",
583                                 vb->cnt_mem_get_userptr, vb->cnt_mem_put_userptr);
584                         pr_info("     attach_dmabuf: %u detach_dmabuf: %u map_dmabuf: %u unmap_dmabuf: %u\n",
585                                 vb->cnt_mem_attach_dmabuf, vb->cnt_mem_detach_dmabuf,
586                                 vb->cnt_mem_map_dmabuf, vb->cnt_mem_unmap_dmabuf);
587                         pr_info("     get_dmabuf: %u num_users: %u vaddr: %u cookie: %u\n",
588                                 vb->cnt_mem_get_dmabuf,
589                                 vb->cnt_mem_num_users,
590                                 vb->cnt_mem_vaddr,
591                                 vb->cnt_mem_cookie);
592                 }
593         }
594 #endif
595
596         /* Free videobuf buffers */
597         for (buffer = q->num_buffers - buffers; buffer < q->num_buffers;
598              ++buffer) {
599                 kfree(q->bufs[buffer]);
600                 q->bufs[buffer] = NULL;
601         }
602
603         q->num_buffers -= buffers;
604         if (!q->num_buffers) {
605                 q->memory = VB2_MEMORY_UNKNOWN;
606                 INIT_LIST_HEAD(&q->queued_list);
607         }
608         return 0;
609 }
610
611 bool vb2_buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb)
612 {
613         unsigned int plane;
614         for (plane = 0; plane < vb->num_planes; ++plane) {
615                 void *mem_priv = vb->planes[plane].mem_priv;
616                 /*
617                  * If num_users() has not been provided, call_memop
618                  * will return 0, apparently nobody cares about this
619                  * case anyway. If num_users() returns more than 1,
620                  * we are not the only user of the plane's memory.
621                  */
622                 if (mem_priv && call_memop(vb, num_users, mem_priv) > 1)
623                         return true;
624         }
625         return false;
626 }
627 EXPORT_SYMBOL(vb2_buffer_in_use);
628
629 /*
630  * __buffers_in_use() - return true if any buffers on the queue are in use and
631  * the queue cannot be freed (by the means of REQBUFS(0)) call
632  */
633 static bool __buffers_in_use(struct vb2_queue *q)
634 {
635         unsigned int buffer;
636         for (buffer = 0; buffer < q->num_buffers; ++buffer) {
637                 if (vb2_buffer_in_use(q, q->bufs[buffer]))
638                         return true;
639         }
640         return false;
641 }
642
643 void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb)
644 {
645         call_void_bufop(q, fill_user_buffer, q->bufs[index], pb);
646 }
647 EXPORT_SYMBOL_GPL(vb2_core_querybuf);
648
649 /*
650  * __verify_userptr_ops() - verify that all memory operations required for
651  * USERPTR queue type have been provided
652  */
653 static int __verify_userptr_ops(struct vb2_queue *q)
654 {
655         if (!(q->io_modes & VB2_USERPTR) || !q->mem_ops->get_userptr ||
656             !q->mem_ops->put_userptr)
657                 return -EINVAL;
658
659         return 0;
660 }
661
662 /*
663  * __verify_mmap_ops() - verify that all memory operations required for
664  * MMAP queue type have been provided
665  */
666 static int __verify_mmap_ops(struct vb2_queue *q)
667 {
668         if (!(q->io_modes & VB2_MMAP) || !q->mem_ops->alloc ||
669             !q->mem_ops->put || !q->mem_ops->mmap)
670                 return -EINVAL;
671
672         return 0;
673 }
674
675 /*
676  * __verify_dmabuf_ops() - verify that all memory operations required for
677  * DMABUF queue type have been provided
678  */
679 static int __verify_dmabuf_ops(struct vb2_queue *q)
680 {
681         if (!(q->io_modes & VB2_DMABUF) || !q->mem_ops->attach_dmabuf ||
682             !q->mem_ops->detach_dmabuf  || !q->mem_ops->map_dmabuf ||
683             !q->mem_ops->unmap_dmabuf)
684                 return -EINVAL;
685
686         return 0;
687 }
688
689 int vb2_verify_memory_type(struct vb2_queue *q,
690                 enum vb2_memory memory, unsigned int type)
691 {
692         if (memory != VB2_MEMORY_MMAP && memory != VB2_MEMORY_USERPTR &&
693             memory != VB2_MEMORY_DMABUF) {
694                 dprintk(q, 1, "unsupported memory type\n");
695                 return -EINVAL;
696         }
697
698         if (type != q->type) {
699                 dprintk(q, 1, "requested type is incorrect\n");
700                 return -EINVAL;
701         }
702
703         /*
704          * Make sure all the required memory ops for given memory type
705          * are available.
706          */
707         if (memory == VB2_MEMORY_MMAP && __verify_mmap_ops(q)) {
708                 dprintk(q, 1, "MMAP for current setup unsupported\n");
709                 return -EINVAL;
710         }
711
712         if (memory == VB2_MEMORY_USERPTR && __verify_userptr_ops(q)) {
713                 dprintk(q, 1, "USERPTR for current setup unsupported\n");
714                 return -EINVAL;
715         }
716
717         if (memory == VB2_MEMORY_DMABUF && __verify_dmabuf_ops(q)) {
718                 dprintk(q, 1, "DMABUF for current setup unsupported\n");
719                 return -EINVAL;
720         }
721
722         /*
723          * Place the busy tests at the end: -EBUSY can be ignored when
724          * create_bufs is called with count == 0, but count == 0 should still
725          * do the memory and type validation.
726          */
727         if (vb2_fileio_is_active(q)) {
728                 dprintk(q, 1, "file io in progress\n");
729                 return -EBUSY;
730         }
731         return 0;
732 }
733 EXPORT_SYMBOL(vb2_verify_memory_type);
734
735 int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
736                      unsigned int *count)
737 {
738         unsigned int num_buffers, allocated_buffers, num_planes = 0;
739         unsigned plane_sizes[VB2_MAX_PLANES] = { };
740         unsigned int i;
741         int ret;
742
743         if (q->streaming) {
744                 dprintk(q, 1, "streaming active\n");
745                 return -EBUSY;
746         }
747
748         if (q->waiting_in_dqbuf && *count) {
749                 dprintk(q, 1, "another dup()ped fd is waiting for a buffer\n");
750                 return -EBUSY;
751         }
752
753         if (*count == 0 || q->num_buffers != 0 ||
754             (q->memory != VB2_MEMORY_UNKNOWN && q->memory != memory)) {
755                 /*
756                  * We already have buffers allocated, so first check if they
757                  * are not in use and can be freed.
758                  */
759                 mutex_lock(&q->mmap_lock);
760                 if (debug && q->memory == VB2_MEMORY_MMAP &&
761                     __buffers_in_use(q))
762                         dprintk(q, 1, "memory in use, orphaning buffers\n");
763
764                 /*
765                  * Call queue_cancel to clean up any buffers in the
766                  * QUEUED state which is possible if buffers were prepared or
767                  * queued without ever calling STREAMON.
768                  */
769                 __vb2_queue_cancel(q);
770                 ret = __vb2_queue_free(q, q->num_buffers);
771                 mutex_unlock(&q->mmap_lock);
772                 if (ret)
773                         return ret;
774
775                 /*
776                  * In case of REQBUFS(0) return immediately without calling
777                  * driver's queue_setup() callback and allocating resources.
778                  */
779                 if (*count == 0)
780                         return 0;
781         }
782
783         /*
784          * Make sure the requested values and current defaults are sane.
785          */
786         WARN_ON(q->min_buffers_needed > VB2_MAX_FRAME);
787         num_buffers = max_t(unsigned int, *count, q->min_buffers_needed);
788         num_buffers = min_t(unsigned int, num_buffers, VB2_MAX_FRAME);
789         memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
790         q->memory = memory;
791
792         /*
793          * Ask the driver how many buffers and planes per buffer it requires.
794          * Driver also sets the size and allocator context for each plane.
795          */
796         ret = call_qop(q, queue_setup, q, &num_buffers, &num_planes,
797                        plane_sizes, q->alloc_devs);
798         if (ret)
799                 return ret;
800
801         /* Check that driver has set sane values */
802         if (WARN_ON(!num_planes))
803                 return -EINVAL;
804
805         for (i = 0; i < num_planes; i++)
806                 if (WARN_ON(!plane_sizes[i]))
807                         return -EINVAL;
808
809         /* Finally, allocate buffers and video memory */
810         allocated_buffers =
811                 __vb2_queue_alloc(q, memory, num_buffers, num_planes, plane_sizes);
812         if (allocated_buffers == 0) {
813                 dprintk(q, 1, "memory allocation failed\n");
814                 return -ENOMEM;
815         }
816
817         /*
818          * There is no point in continuing if we can't allocate the minimum
819          * number of buffers needed by this vb2_queue.
820          */
821         if (allocated_buffers < q->min_buffers_needed)
822                 ret = -ENOMEM;
823
824         /*
825          * Check if driver can handle the allocated number of buffers.
826          */
827         if (!ret && allocated_buffers < num_buffers) {
828                 num_buffers = allocated_buffers;
829                 /*
830                  * num_planes is set by the previous queue_setup(), but since it
831                  * signals to queue_setup() whether it is called from create_bufs()
832                  * vs reqbufs() we zero it here to signal that queue_setup() is
833                  * called for the reqbufs() case.
834                  */
835                 num_planes = 0;
836
837                 ret = call_qop(q, queue_setup, q, &num_buffers,
838                                &num_planes, plane_sizes, q->alloc_devs);
839
840                 if (!ret && allocated_buffers < num_buffers)
841                         ret = -ENOMEM;
842
843                 /*
844                  * Either the driver has accepted a smaller number of buffers,
845                  * or .queue_setup() returned an error
846                  */
847         }
848
849         mutex_lock(&q->mmap_lock);
850         q->num_buffers = allocated_buffers;
851
852         if (ret < 0) {
853                 /*
854                  * Note: __vb2_queue_free() will subtract 'allocated_buffers'
855                  * from q->num_buffers.
856                  */
857                 __vb2_queue_free(q, allocated_buffers);
858                 mutex_unlock(&q->mmap_lock);
859                 return ret;
860         }
861         mutex_unlock(&q->mmap_lock);
862
863         /*
864          * Return the number of successfully allocated buffers
865          * to the userspace.
866          */
867         *count = allocated_buffers;
868         q->waiting_for_buffers = !q->is_output;
869
870         return 0;
871 }
872 EXPORT_SYMBOL_GPL(vb2_core_reqbufs);
873
874 int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
875                          unsigned int *count,
876                          unsigned int requested_planes,
877                          const unsigned int requested_sizes[])
878 {
879         unsigned int num_planes = 0, num_buffers, allocated_buffers;
880         unsigned plane_sizes[VB2_MAX_PLANES] = { };
881         int ret;
882
883         if (q->num_buffers == VB2_MAX_FRAME) {
884                 dprintk(q, 1, "maximum number of buffers already allocated\n");
885                 return -ENOBUFS;
886         }
887
888         if (!q->num_buffers) {
889                 if (q->waiting_in_dqbuf && *count) {
890                         dprintk(q, 1, "another dup()ped fd is waiting for a buffer\n");
891                         return -EBUSY;
892                 }
893                 memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
894                 q->memory = memory;
895                 q->waiting_for_buffers = !q->is_output;
896         } else {
897                 if (q->memory != memory) {
898                         dprintk(q, 1, "memory model mismatch\n");
899                         return -EINVAL;
900                 }
901         }
902
903         num_buffers = min(*count, VB2_MAX_FRAME - q->num_buffers);
904
905         if (requested_planes && requested_sizes) {
906                 num_planes = requested_planes;
907                 memcpy(plane_sizes, requested_sizes, sizeof(plane_sizes));
908         }
909
910         /*
911          * Ask the driver, whether the requested number of buffers, planes per
912          * buffer and their sizes are acceptable
913          */
914         ret = call_qop(q, queue_setup, q, &num_buffers,
915                        &num_planes, plane_sizes, q->alloc_devs);
916         if (ret)
917                 return ret;
918
919         /* Finally, allocate buffers and video memory */
920         allocated_buffers = __vb2_queue_alloc(q, memory, num_buffers,
921                                 num_planes, plane_sizes);
922         if (allocated_buffers == 0) {
923                 dprintk(q, 1, "memory allocation failed\n");
924                 return -ENOMEM;
925         }
926
927         /*
928          * Check if driver can handle the so far allocated number of buffers.
929          */
930         if (allocated_buffers < num_buffers) {
931                 num_buffers = allocated_buffers;
932
933                 /*
934                  * q->num_buffers contains the total number of buffers, that the
935                  * queue driver has set up
936                  */
937                 ret = call_qop(q, queue_setup, q, &num_buffers,
938                                &num_planes, plane_sizes, q->alloc_devs);
939
940                 if (!ret && allocated_buffers < num_buffers)
941                         ret = -ENOMEM;
942
943                 /*
944                  * Either the driver has accepted a smaller number of buffers,
945                  * or .queue_setup() returned an error
946                  */
947         }
948
949         mutex_lock(&q->mmap_lock);
950         q->num_buffers += allocated_buffers;
951
952         if (ret < 0) {
953                 /*
954                  * Note: __vb2_queue_free() will subtract 'allocated_buffers'
955                  * from q->num_buffers.
956                  */
957                 __vb2_queue_free(q, allocated_buffers);
958                 mutex_unlock(&q->mmap_lock);
959                 return -ENOMEM;
960         }
961         mutex_unlock(&q->mmap_lock);
962
963         /*
964          * Return the number of successfully allocated buffers
965          * to the userspace.
966          */
967         *count = allocated_buffers;
968
969         return 0;
970 }
971 EXPORT_SYMBOL_GPL(vb2_core_create_bufs);
972
973 void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no)
974 {
975         if (plane_no >= vb->num_planes || !vb->planes[plane_no].mem_priv)
976                 return NULL;
977
978         return call_ptr_memop(vb, vaddr, vb->planes[plane_no].mem_priv);
979
980 }
981 EXPORT_SYMBOL_GPL(vb2_plane_vaddr);
982
983 void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no)
984 {
985         if (plane_no >= vb->num_planes || !vb->planes[plane_no].mem_priv)
986                 return NULL;
987
988         return call_ptr_memop(vb, cookie, vb->planes[plane_no].mem_priv);
989 }
990 EXPORT_SYMBOL_GPL(vb2_plane_cookie);
991
992 void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
993 {
994         struct vb2_queue *q = vb->vb2_queue;
995         unsigned long flags;
996
997         if (WARN_ON(vb->state != VB2_BUF_STATE_ACTIVE))
998                 return;
999
1000         if (WARN_ON(state != VB2_BUF_STATE_DONE &&
1001                     state != VB2_BUF_STATE_ERROR &&
1002                     state != VB2_BUF_STATE_QUEUED))
1003                 state = VB2_BUF_STATE_ERROR;
1004
1005 #ifdef CONFIG_VIDEO_ADV_DEBUG
1006         /*
1007          * Although this is not a callback, it still does have to balance
1008          * with the buf_queue op. So update this counter manually.
1009          */
1010         vb->cnt_buf_done++;
1011 #endif
1012         dprintk(q, 4, "done processing on buffer %d, state: %s\n",
1013                 vb->index, vb2_state_name(state));
1014
1015         if (state != VB2_BUF_STATE_QUEUED)
1016                 __vb2_buf_mem_finish(vb);
1017
1018         spin_lock_irqsave(&q->done_lock, flags);
1019         if (state == VB2_BUF_STATE_QUEUED) {
1020                 vb->state = VB2_BUF_STATE_QUEUED;
1021         } else {
1022                 /* Add the buffer to the done buffers list */
1023                 list_add_tail(&vb->done_entry, &q->done_list);
1024                 vb->state = state;
1025         }
1026         atomic_dec(&q->owned_by_drv_count);
1027
1028         if (state != VB2_BUF_STATE_QUEUED && vb->req_obj.req) {
1029                 media_request_object_unbind(&vb->req_obj);
1030                 media_request_object_put(&vb->req_obj);
1031         }
1032
1033         spin_unlock_irqrestore(&q->done_lock, flags);
1034
1035         trace_vb2_buf_done(q, vb);
1036
1037         switch (state) {
1038         case VB2_BUF_STATE_QUEUED:
1039                 return;
1040         default:
1041                 /* Inform any processes that may be waiting for buffers */
1042                 wake_up(&q->done_wq);
1043                 break;
1044         }
1045 }
1046 EXPORT_SYMBOL_GPL(vb2_buffer_done);
1047
1048 void vb2_discard_done(struct vb2_queue *q)
1049 {
1050         struct vb2_buffer *vb;
1051         unsigned long flags;
1052
1053         spin_lock_irqsave(&q->done_lock, flags);
1054         list_for_each_entry(vb, &q->done_list, done_entry)
1055                 vb->state = VB2_BUF_STATE_ERROR;
1056         spin_unlock_irqrestore(&q->done_lock, flags);
1057 }
1058 EXPORT_SYMBOL_GPL(vb2_discard_done);
1059
1060 /*
1061  * __prepare_mmap() - prepare an MMAP buffer
1062  */
1063 static int __prepare_mmap(struct vb2_buffer *vb)
1064 {
1065         int ret = 0;
1066
1067         ret = call_bufop(vb->vb2_queue, fill_vb2_buffer,
1068                          vb, vb->planes);
1069         return ret ? ret : call_vb_qop(vb, buf_prepare, vb);
1070 }
1071
1072 /*
1073  * __prepare_userptr() - prepare a USERPTR buffer
1074  */
1075 static int __prepare_userptr(struct vb2_buffer *vb)
1076 {
1077         struct vb2_plane planes[VB2_MAX_PLANES];
1078         struct vb2_queue *q = vb->vb2_queue;
1079         void *mem_priv;
1080         unsigned int plane;
1081         int ret = 0;
1082         bool reacquired = vb->planes[0].mem_priv == NULL;
1083
1084         memset(planes, 0, sizeof(planes[0]) * vb->num_planes);
1085         /* Copy relevant information provided by the userspace */
1086         ret = call_bufop(vb->vb2_queue, fill_vb2_buffer,
1087                          vb, planes);
1088         if (ret)
1089                 return ret;
1090
1091         for (plane = 0; plane < vb->num_planes; ++plane) {
1092                 /* Skip the plane if already verified */
1093                 if (vb->planes[plane].m.userptr &&
1094                         vb->planes[plane].m.userptr == planes[plane].m.userptr
1095                         && vb->planes[plane].length == planes[plane].length)
1096                         continue;
1097
1098                 dprintk(q, 3, "userspace address for plane %d changed, reacquiring memory\n",
1099                         plane);
1100
1101                 /* Check if the provided plane buffer is large enough */
1102                 if (planes[plane].length < vb->planes[plane].min_length) {
1103                         dprintk(q, 1, "provided buffer size %u is less than setup size %u for plane %d\n",
1104                                                 planes[plane].length,
1105                                                 vb->planes[plane].min_length,
1106                                                 plane);
1107                         ret = -EINVAL;
1108                         goto err;
1109                 }
1110
1111                 /* Release previously acquired memory if present */
1112                 if (vb->planes[plane].mem_priv) {
1113                         if (!reacquired) {
1114                                 reacquired = true;
1115                                 vb->copied_timestamp = 0;
1116                                 call_void_vb_qop(vb, buf_cleanup, vb);
1117                         }
1118                         call_void_memop(vb, put_userptr, vb->planes[plane].mem_priv);
1119                 }
1120
1121                 vb->planes[plane].mem_priv = NULL;
1122                 vb->planes[plane].bytesused = 0;
1123                 vb->planes[plane].length = 0;
1124                 vb->planes[plane].m.userptr = 0;
1125                 vb->planes[plane].data_offset = 0;
1126
1127                 /* Acquire each plane's memory */
1128                 mem_priv = call_ptr_memop(vb, get_userptr,
1129                                 q->alloc_devs[plane] ? : q->dev,
1130                                 planes[plane].m.userptr,
1131                                 planes[plane].length, q->dma_dir);
1132                 if (IS_ERR(mem_priv)) {
1133                         dprintk(q, 1, "failed acquiring userspace memory for plane %d\n",
1134                                 plane);
1135                         ret = PTR_ERR(mem_priv);
1136                         goto err;
1137                 }
1138                 vb->planes[plane].mem_priv = mem_priv;
1139         }
1140
1141         /*
1142          * Now that everything is in order, copy relevant information
1143          * provided by userspace.
1144          */
1145         for (plane = 0; plane < vb->num_planes; ++plane) {
1146                 vb->planes[plane].bytesused = planes[plane].bytesused;
1147                 vb->planes[plane].length = planes[plane].length;
1148                 vb->planes[plane].m.userptr = planes[plane].m.userptr;
1149                 vb->planes[plane].data_offset = planes[plane].data_offset;
1150         }
1151
1152         if (reacquired) {
1153                 /*
1154                  * One or more planes changed, so we must call buf_init to do
1155                  * the driver-specific initialization on the newly acquired
1156                  * buffer, if provided.
1157                  */
1158                 ret = call_vb_qop(vb, buf_init, vb);
1159                 if (ret) {
1160                         dprintk(q, 1, "buffer initialization failed\n");
1161                         goto err;
1162                 }
1163         }
1164
1165         ret = call_vb_qop(vb, buf_prepare, vb);
1166         if (ret) {
1167                 dprintk(q, 1, "buffer preparation failed\n");
1168                 call_void_vb_qop(vb, buf_cleanup, vb);
1169                 goto err;
1170         }
1171
1172         return 0;
1173 err:
1174         /* In case of errors, release planes that were already acquired */
1175         for (plane = 0; plane < vb->num_planes; ++plane) {
1176                 if (vb->planes[plane].mem_priv)
1177                         call_void_memop(vb, put_userptr,
1178                                 vb->planes[plane].mem_priv);
1179                 vb->planes[plane].mem_priv = NULL;
1180                 vb->planes[plane].m.userptr = 0;
1181                 vb->planes[plane].length = 0;
1182         }
1183
1184         return ret;
1185 }
1186
1187 /*
1188  * __prepare_dmabuf() - prepare a DMABUF buffer
1189  */
1190 static int __prepare_dmabuf(struct vb2_buffer *vb)
1191 {
1192         struct vb2_plane planes[VB2_MAX_PLANES];
1193         struct vb2_queue *q = vb->vb2_queue;
1194         void *mem_priv;
1195         unsigned int plane;
1196         int ret = 0;
1197         bool reacquired = vb->planes[0].mem_priv == NULL;
1198
1199         memset(planes, 0, sizeof(planes[0]) * vb->num_planes);
1200         /* Copy relevant information provided by the userspace */
1201         ret = call_bufop(vb->vb2_queue, fill_vb2_buffer,
1202                          vb, planes);
1203         if (ret)
1204                 return ret;
1205
1206         for (plane = 0; plane < vb->num_planes; ++plane) {
1207                 struct dma_buf *dbuf = dma_buf_get(planes[plane].m.fd);
1208
1209                 if (IS_ERR_OR_NULL(dbuf)) {
1210                         dprintk(q, 1, "invalid dmabuf fd for plane %d\n",
1211                                 plane);
1212                         ret = -EINVAL;
1213                         goto err;
1214                 }
1215
1216                 /* use DMABUF size if length is not provided */
1217                 if (planes[plane].length == 0)
1218                         planes[plane].length = dbuf->size;
1219
1220                 if (planes[plane].length < vb->planes[plane].min_length) {
1221                         dprintk(q, 1, "invalid dmabuf length %u for plane %d, minimum length %u\n",
1222                                 planes[plane].length, plane,
1223                                 vb->planes[plane].min_length);
1224                         dma_buf_put(dbuf);
1225                         ret = -EINVAL;
1226                         goto err;
1227                 }
1228
1229                 /* Skip the plane if already verified */
1230                 if (dbuf == vb->planes[plane].dbuf &&
1231                         vb->planes[plane].length == planes[plane].length) {
1232                         dma_buf_put(dbuf);
1233                         continue;
1234                 }
1235
1236                 dprintk(q, 3, "buffer for plane %d changed\n", plane);
1237
1238                 if (!reacquired) {
1239                         reacquired = true;
1240                         vb->copied_timestamp = 0;
1241                         call_void_vb_qop(vb, buf_cleanup, vb);
1242                 }
1243
1244                 /* Release previously acquired memory if present */
1245                 __vb2_plane_dmabuf_put(vb, &vb->planes[plane]);
1246                 vb->planes[plane].bytesused = 0;
1247                 vb->planes[plane].length = 0;
1248                 vb->planes[plane].m.fd = 0;
1249                 vb->planes[plane].data_offset = 0;
1250
1251                 /* Acquire each plane's memory */
1252                 mem_priv = call_ptr_memop(vb, attach_dmabuf,
1253                                 q->alloc_devs[plane] ? : q->dev,
1254                                 dbuf, planes[plane].length, q->dma_dir);
1255                 if (IS_ERR(mem_priv)) {
1256                         dprintk(q, 1, "failed to attach dmabuf\n");
1257                         ret = PTR_ERR(mem_priv);
1258                         dma_buf_put(dbuf);
1259                         goto err;
1260                 }
1261
1262                 vb->planes[plane].dbuf = dbuf;
1263                 vb->planes[plane].mem_priv = mem_priv;
1264         }
1265
1266         /*
1267          * This pins the buffer(s) with dma_buf_map_attachment()). It's done
1268          * here instead just before the DMA, while queueing the buffer(s) so
1269          * userspace knows sooner rather than later if the dma-buf map fails.
1270          */
1271         for (plane = 0; plane < vb->num_planes; ++plane) {
1272                 if (vb->planes[plane].dbuf_mapped)
1273                         continue;
1274
1275                 ret = call_memop(vb, map_dmabuf, vb->planes[plane].mem_priv);
1276                 if (ret) {
1277                         dprintk(q, 1, "failed to map dmabuf for plane %d\n",
1278                                 plane);
1279                         goto err;
1280                 }
1281                 vb->planes[plane].dbuf_mapped = 1;
1282         }
1283
1284         /*
1285          * Now that everything is in order, copy relevant information
1286          * provided by userspace.
1287          */
1288         for (plane = 0; plane < vb->num_planes; ++plane) {
1289                 vb->planes[plane].bytesused = planes[plane].bytesused;
1290                 vb->planes[plane].length = planes[plane].length;
1291                 vb->planes[plane].m.fd = planes[plane].m.fd;
1292                 vb->planes[plane].data_offset = planes[plane].data_offset;
1293         }
1294
1295         if (reacquired) {
1296                 /*
1297                  * Call driver-specific initialization on the newly acquired buffer,
1298                  * if provided.
1299                  */
1300                 ret = call_vb_qop(vb, buf_init, vb);
1301                 if (ret) {
1302                         dprintk(q, 1, "buffer initialization failed\n");
1303                         goto err;
1304                 }
1305         }
1306
1307         ret = call_vb_qop(vb, buf_prepare, vb);
1308         if (ret) {
1309                 dprintk(q, 1, "buffer preparation failed\n");
1310                 call_void_vb_qop(vb, buf_cleanup, vb);
1311                 goto err;
1312         }
1313
1314         return 0;
1315 err:
1316         /* In case of errors, release planes that were already acquired */
1317         __vb2_buf_dmabuf_put(vb);
1318
1319         return ret;
1320 }
1321
1322 /*
1323  * __enqueue_in_driver() - enqueue a vb2_buffer in driver for processing
1324  */
1325 static void __enqueue_in_driver(struct vb2_buffer *vb)
1326 {
1327         struct vb2_queue *q = vb->vb2_queue;
1328
1329         vb->state = VB2_BUF_STATE_ACTIVE;
1330         atomic_inc(&q->owned_by_drv_count);
1331
1332         trace_vb2_buf_queue(q, vb);
1333
1334         call_void_vb_qop(vb, buf_queue, vb);
1335 }
1336
1337 static int __buf_prepare(struct vb2_buffer *vb)
1338 {
1339         struct vb2_queue *q = vb->vb2_queue;
1340         enum vb2_buffer_state orig_state = vb->state;
1341         int ret;
1342
1343         if (q->error) {
1344                 dprintk(q, 1, "fatal error occurred on queue\n");
1345                 return -EIO;
1346         }
1347
1348         if (vb->prepared)
1349                 return 0;
1350         WARN_ON(vb->synced);
1351
1352         if (q->is_output) {
1353                 ret = call_vb_qop(vb, buf_out_validate, vb);
1354                 if (ret) {
1355                         dprintk(q, 1, "buffer validation failed\n");
1356                         return ret;
1357                 }
1358         }
1359
1360         vb->state = VB2_BUF_STATE_PREPARING;
1361
1362         switch (q->memory) {
1363         case VB2_MEMORY_MMAP:
1364                 ret = __prepare_mmap(vb);
1365                 break;
1366         case VB2_MEMORY_USERPTR:
1367                 ret = __prepare_userptr(vb);
1368                 break;
1369         case VB2_MEMORY_DMABUF:
1370                 ret = __prepare_dmabuf(vb);
1371                 break;
1372         default:
1373                 WARN(1, "Invalid queue type\n");
1374                 ret = -EINVAL;
1375                 break;
1376         }
1377
1378         if (ret) {
1379                 dprintk(q, 1, "buffer preparation failed: %d\n", ret);
1380                 vb->state = orig_state;
1381                 return ret;
1382         }
1383
1384         __vb2_buf_mem_prepare(vb);
1385         vb->prepared = 1;
1386         vb->state = orig_state;
1387
1388         return 0;
1389 }
1390
1391 static int vb2_req_prepare(struct media_request_object *obj)
1392 {
1393         struct vb2_buffer *vb = container_of(obj, struct vb2_buffer, req_obj);
1394         int ret;
1395
1396         if (WARN_ON(vb->state != VB2_BUF_STATE_IN_REQUEST))
1397                 return -EINVAL;
1398
1399         mutex_lock(vb->vb2_queue->lock);
1400         ret = __buf_prepare(vb);
1401         mutex_unlock(vb->vb2_queue->lock);
1402         return ret;
1403 }
1404
1405 static void __vb2_dqbuf(struct vb2_buffer *vb);
1406
1407 static void vb2_req_unprepare(struct media_request_object *obj)
1408 {
1409         struct vb2_buffer *vb = container_of(obj, struct vb2_buffer, req_obj);
1410
1411         mutex_lock(vb->vb2_queue->lock);
1412         __vb2_dqbuf(vb);
1413         vb->state = VB2_BUF_STATE_IN_REQUEST;
1414         mutex_unlock(vb->vb2_queue->lock);
1415         WARN_ON(!vb->req_obj.req);
1416 }
1417
1418 int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb,
1419                   struct media_request *req);
1420
1421 static void vb2_req_queue(struct media_request_object *obj)
1422 {
1423         struct vb2_buffer *vb = container_of(obj, struct vb2_buffer, req_obj);
1424
1425         mutex_lock(vb->vb2_queue->lock);
1426         vb2_core_qbuf(vb->vb2_queue, vb->index, NULL, NULL);
1427         mutex_unlock(vb->vb2_queue->lock);
1428 }
1429
1430 static void vb2_req_unbind(struct media_request_object *obj)
1431 {
1432         struct vb2_buffer *vb = container_of(obj, struct vb2_buffer, req_obj);
1433
1434         if (vb->state == VB2_BUF_STATE_IN_REQUEST)
1435                 call_void_bufop(vb->vb2_queue, init_buffer, vb);
1436 }
1437
1438 static void vb2_req_release(struct media_request_object *obj)
1439 {
1440         struct vb2_buffer *vb = container_of(obj, struct vb2_buffer, req_obj);
1441
1442         if (vb->state == VB2_BUF_STATE_IN_REQUEST) {
1443                 vb->state = VB2_BUF_STATE_DEQUEUED;
1444                 if (vb->request)
1445                         media_request_put(vb->request);
1446                 vb->request = NULL;
1447         }
1448 }
1449
1450 static const struct media_request_object_ops vb2_core_req_ops = {
1451         .prepare = vb2_req_prepare,
1452         .unprepare = vb2_req_unprepare,
1453         .queue = vb2_req_queue,
1454         .unbind = vb2_req_unbind,
1455         .release = vb2_req_release,
1456 };
1457
1458 bool vb2_request_object_is_buffer(struct media_request_object *obj)
1459 {
1460         return obj->ops == &vb2_core_req_ops;
1461 }
1462 EXPORT_SYMBOL_GPL(vb2_request_object_is_buffer);
1463
1464 unsigned int vb2_request_buffer_cnt(struct media_request *req)
1465 {
1466         struct media_request_object *obj;
1467         unsigned long flags;
1468         unsigned int buffer_cnt = 0;
1469
1470         spin_lock_irqsave(&req->lock, flags);
1471         list_for_each_entry(obj, &req->objects, list)
1472                 if (vb2_request_object_is_buffer(obj))
1473                         buffer_cnt++;
1474         spin_unlock_irqrestore(&req->lock, flags);
1475
1476         return buffer_cnt;
1477 }
1478 EXPORT_SYMBOL_GPL(vb2_request_buffer_cnt);
1479
1480 int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb)
1481 {
1482         struct vb2_buffer *vb;
1483         int ret;
1484
1485         vb = q->bufs[index];
1486         if (vb->state != VB2_BUF_STATE_DEQUEUED) {
1487                 dprintk(q, 1, "invalid buffer state %s\n",
1488                         vb2_state_name(vb->state));
1489                 return -EINVAL;
1490         }
1491         if (vb->prepared) {
1492                 dprintk(q, 1, "buffer already prepared\n");
1493                 return -EINVAL;
1494         }
1495
1496         ret = __buf_prepare(vb);
1497         if (ret)
1498                 return ret;
1499
1500         /* Fill buffer information for the userspace */
1501         call_void_bufop(q, fill_user_buffer, vb, pb);
1502
1503         dprintk(q, 2, "prepare of buffer %d succeeded\n", vb->index);
1504
1505         return 0;
1506 }
1507 EXPORT_SYMBOL_GPL(vb2_core_prepare_buf);
1508
1509 /*
1510  * vb2_start_streaming() - Attempt to start streaming.
1511  * @q:          videobuf2 queue
1512  *
1513  * Attempt to start streaming. When this function is called there must be
1514  * at least q->min_buffers_needed buffers queued up (i.e. the minimum
1515  * number of buffers required for the DMA engine to function). If the
1516  * @start_streaming op fails it is supposed to return all the driver-owned
1517  * buffers back to vb2 in state QUEUED. Check if that happened and if
1518  * not warn and reclaim them forcefully.
1519  */
1520 static int vb2_start_streaming(struct vb2_queue *q)
1521 {
1522         struct vb2_buffer *vb;
1523         int ret;
1524
1525         /*
1526          * If any buffers were queued before streamon,
1527          * we can now pass them to driver for processing.
1528          */
1529         list_for_each_entry(vb, &q->queued_list, queued_entry)
1530                 __enqueue_in_driver(vb);
1531
1532         /* Tell the driver to start streaming */
1533         q->start_streaming_called = 1;
1534         ret = call_qop(q, start_streaming, q,
1535                        atomic_read(&q->owned_by_drv_count));
1536         if (!ret)
1537                 return 0;
1538
1539         q->start_streaming_called = 0;
1540
1541         dprintk(q, 1, "driver refused to start streaming\n");
1542         /*
1543          * If you see this warning, then the driver isn't cleaning up properly
1544          * after a failed start_streaming(). See the start_streaming()
1545          * documentation in videobuf2-core.h for more information how buffers
1546          * should be returned to vb2 in start_streaming().
1547          */
1548         if (WARN_ON(atomic_read(&q->owned_by_drv_count))) {
1549                 unsigned i;
1550
1551                 /*
1552                  * Forcefully reclaim buffers if the driver did not
1553                  * correctly return them to vb2.
1554                  */
1555                 for (i = 0; i < q->num_buffers; ++i) {
1556                         vb = q->bufs[i];
1557                         if (vb->state == VB2_BUF_STATE_ACTIVE)
1558                                 vb2_buffer_done(vb, VB2_BUF_STATE_QUEUED);
1559                 }
1560                 /* Must be zero now */
1561                 WARN_ON(atomic_read(&q->owned_by_drv_count));
1562         }
1563         /*
1564          * If done_list is not empty, then start_streaming() didn't call
1565          * vb2_buffer_done(vb, VB2_BUF_STATE_QUEUED) but STATE_ERROR or
1566          * STATE_DONE.
1567          */
1568         WARN_ON(!list_empty(&q->done_list));
1569         return ret;
1570 }
1571
1572 int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb,
1573                   struct media_request *req)
1574 {
1575         struct vb2_buffer *vb;
1576         enum vb2_buffer_state orig_state;
1577         int ret;
1578
1579         if (q->error) {
1580                 dprintk(q, 1, "fatal error occurred on queue\n");
1581                 return -EIO;
1582         }
1583
1584         vb = q->bufs[index];
1585
1586         if (!req && vb->state != VB2_BUF_STATE_IN_REQUEST &&
1587             q->requires_requests) {
1588                 dprintk(q, 1, "qbuf requires a request\n");
1589                 return -EBADR;
1590         }
1591
1592         if ((req && q->uses_qbuf) ||
1593             (!req && vb->state != VB2_BUF_STATE_IN_REQUEST &&
1594              q->uses_requests)) {
1595                 dprintk(q, 1, "queue in wrong mode (qbuf vs requests)\n");
1596                 return -EBUSY;
1597         }
1598
1599         if (req) {
1600                 int ret;
1601
1602                 q->uses_requests = 1;
1603                 if (vb->state != VB2_BUF_STATE_DEQUEUED) {
1604                         dprintk(q, 1, "buffer %d not in dequeued state\n",
1605                                 vb->index);
1606                         return -EINVAL;
1607                 }
1608
1609                 if (q->is_output && !vb->prepared) {
1610                         ret = call_vb_qop(vb, buf_out_validate, vb);
1611                         if (ret) {
1612                                 dprintk(q, 1, "buffer validation failed\n");
1613                                 return ret;
1614                         }
1615                 }
1616
1617                 media_request_object_init(&vb->req_obj);
1618
1619                 /* Make sure the request is in a safe state for updating. */
1620                 ret = media_request_lock_for_update(req);
1621                 if (ret)
1622                         return ret;
1623                 ret = media_request_object_bind(req, &vb2_core_req_ops,
1624                                                 q, true, &vb->req_obj);
1625                 media_request_unlock_for_update(req);
1626                 if (ret)
1627                         return ret;
1628
1629                 vb->state = VB2_BUF_STATE_IN_REQUEST;
1630
1631                 /*
1632                  * Increment the refcount and store the request.
1633                  * The request refcount is decremented again when the
1634                  * buffer is dequeued. This is to prevent vb2_buffer_done()
1635                  * from freeing the request from interrupt context, which can
1636                  * happen if the application closed the request fd after
1637                  * queueing the request.
1638                  */
1639                 media_request_get(req);
1640                 vb->request = req;
1641
1642                 /* Fill buffer information for the userspace */
1643                 if (pb) {
1644                         call_void_bufop(q, copy_timestamp, vb, pb);
1645                         call_void_bufop(q, fill_user_buffer, vb, pb);
1646                 }
1647
1648                 dprintk(q, 2, "qbuf of buffer %d succeeded\n", vb->index);
1649                 return 0;
1650         }
1651
1652         if (vb->state != VB2_BUF_STATE_IN_REQUEST)
1653                 q->uses_qbuf = 1;
1654
1655         switch (vb->state) {
1656         case VB2_BUF_STATE_DEQUEUED:
1657         case VB2_BUF_STATE_IN_REQUEST:
1658                 if (!vb->prepared) {
1659                         ret = __buf_prepare(vb);
1660                         if (ret)
1661                                 return ret;
1662                 }
1663                 break;
1664         case VB2_BUF_STATE_PREPARING:
1665                 dprintk(q, 1, "buffer still being prepared\n");
1666                 return -EINVAL;
1667         default:
1668                 dprintk(q, 1, "invalid buffer state %s\n",
1669                         vb2_state_name(vb->state));
1670                 return -EINVAL;
1671         }
1672
1673         /*
1674          * Add to the queued buffers list, a buffer will stay on it until
1675          * dequeued in dqbuf.
1676          */
1677         orig_state = vb->state;
1678         list_add_tail(&vb->queued_entry, &q->queued_list);
1679         q->queued_count++;
1680         q->waiting_for_buffers = false;
1681         vb->state = VB2_BUF_STATE_QUEUED;
1682
1683         if (pb)
1684                 call_void_bufop(q, copy_timestamp, vb, pb);
1685
1686         trace_vb2_qbuf(q, vb);
1687
1688         /*
1689          * If already streaming, give the buffer to driver for processing.
1690          * If not, the buffer will be given to driver on next streamon.
1691          */
1692         if (q->start_streaming_called)
1693                 __enqueue_in_driver(vb);
1694
1695         /* Fill buffer information for the userspace */
1696         if (pb)
1697                 call_void_bufop(q, fill_user_buffer, vb, pb);
1698
1699         /*
1700          * If streamon has been called, and we haven't yet called
1701          * start_streaming() since not enough buffers were queued, and
1702          * we now have reached the minimum number of queued buffers,
1703          * then we can finally call start_streaming().
1704          */
1705         if (q->streaming && !q->start_streaming_called &&
1706             q->queued_count >= q->min_buffers_needed) {
1707                 ret = vb2_start_streaming(q);
1708                 if (ret) {
1709                         /*
1710                          * Since vb2_core_qbuf will return with an error,
1711                          * we should return it to state DEQUEUED since
1712                          * the error indicates that the buffer wasn't queued.
1713                          */
1714                         list_del(&vb->queued_entry);
1715                         q->queued_count--;
1716                         vb->state = orig_state;
1717                         return ret;
1718                 }
1719         }
1720
1721         dprintk(q, 2, "qbuf of buffer %d succeeded\n", vb->index);
1722         return 0;
1723 }
1724 EXPORT_SYMBOL_GPL(vb2_core_qbuf);
1725
1726 /*
1727  * __vb2_wait_for_done_vb() - wait for a buffer to become available
1728  * for dequeuing
1729  *
1730  * Will sleep if required for nonblocking == false.
1731  */
1732 static int __vb2_wait_for_done_vb(struct vb2_queue *q, int nonblocking)
1733 {
1734         /*
1735          * All operations on vb_done_list are performed under done_lock
1736          * spinlock protection. However, buffers may be removed from
1737          * it and returned to userspace only while holding both driver's
1738          * lock and the done_lock spinlock. Thus we can be sure that as
1739          * long as we hold the driver's lock, the list will remain not
1740          * empty if list_empty() check succeeds.
1741          */
1742
1743         for (;;) {
1744                 int ret;
1745
1746                 if (q->waiting_in_dqbuf) {
1747                         dprintk(q, 1, "another dup()ped fd is waiting for a buffer\n");
1748                         return -EBUSY;
1749                 }
1750
1751                 if (!q->streaming) {
1752                         dprintk(q, 1, "streaming off, will not wait for buffers\n");
1753                         return -EINVAL;
1754                 }
1755
1756                 if (q->error) {
1757                         dprintk(q, 1, "Queue in error state, will not wait for buffers\n");
1758                         return -EIO;
1759                 }
1760
1761                 if (q->last_buffer_dequeued) {
1762                         dprintk(q, 3, "last buffer dequeued already, will not wait for buffers\n");
1763                         return -EPIPE;
1764                 }
1765
1766                 if (!list_empty(&q->done_list)) {
1767                         /*
1768                          * Found a buffer that we were waiting for.
1769                          */
1770                         break;
1771                 }
1772
1773                 if (nonblocking) {
1774                         dprintk(q, 3, "nonblocking and no buffers to dequeue, will not wait\n");
1775                         return -EAGAIN;
1776                 }
1777
1778                 q->waiting_in_dqbuf = 1;
1779                 /*
1780                  * We are streaming and blocking, wait for another buffer to
1781                  * become ready or for streamoff. Driver's lock is released to
1782                  * allow streamoff or qbuf to be called while waiting.
1783                  */
1784                 call_void_qop(q, wait_prepare, q);
1785
1786                 /*
1787                  * All locks have been released, it is safe to sleep now.
1788                  */
1789                 dprintk(q, 3, "will sleep waiting for buffers\n");
1790                 ret = wait_event_interruptible(q->done_wq,
1791                                 !list_empty(&q->done_list) || !q->streaming ||
1792                                 q->error);
1793
1794                 /*
1795                  * We need to reevaluate both conditions again after reacquiring
1796                  * the locks or return an error if one occurred.
1797                  */
1798                 call_void_qop(q, wait_finish, q);
1799                 q->waiting_in_dqbuf = 0;
1800                 if (ret) {
1801                         dprintk(q, 1, "sleep was interrupted\n");
1802                         return ret;
1803                 }
1804         }
1805         return 0;
1806 }
1807
1808 /*
1809  * __vb2_get_done_vb() - get a buffer ready for dequeuing
1810  *
1811  * Will sleep if required for nonblocking == false.
1812  */
1813 static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
1814                              void *pb, int nonblocking)
1815 {
1816         unsigned long flags;
1817         int ret = 0;
1818
1819         /*
1820          * Wait for at least one buffer to become available on the done_list.
1821          */
1822         ret = __vb2_wait_for_done_vb(q, nonblocking);
1823         if (ret)
1824                 return ret;
1825
1826         /*
1827          * Driver's lock has been held since we last verified that done_list
1828          * is not empty, so no need for another list_empty(done_list) check.
1829          */
1830         spin_lock_irqsave(&q->done_lock, flags);
1831         *vb = list_first_entry(&q->done_list, struct vb2_buffer, done_entry);
1832         /*
1833          * Only remove the buffer from done_list if all planes can be
1834          * handled. Some cases such as V4L2 file I/O and DVB have pb
1835          * == NULL; skip the check then as there's nothing to verify.
1836          */
1837         if (pb)
1838                 ret = call_bufop(q, verify_planes_array, *vb, pb);
1839         if (!ret)
1840                 list_del(&(*vb)->done_entry);
1841         spin_unlock_irqrestore(&q->done_lock, flags);
1842
1843         return ret;
1844 }
1845
1846 int vb2_wait_for_all_buffers(struct vb2_queue *q)
1847 {
1848         if (!q->streaming) {
1849                 dprintk(q, 1, "streaming off, will not wait for buffers\n");
1850                 return -EINVAL;
1851         }
1852
1853         if (q->start_streaming_called)
1854                 wait_event(q->done_wq, !atomic_read(&q->owned_by_drv_count));
1855         return 0;
1856 }
1857 EXPORT_SYMBOL_GPL(vb2_wait_for_all_buffers);
1858
1859 /*
1860  * __vb2_dqbuf() - bring back the buffer to the DEQUEUED state
1861  */
1862 static void __vb2_dqbuf(struct vb2_buffer *vb)
1863 {
1864         struct vb2_queue *q = vb->vb2_queue;
1865
1866         /* nothing to do if the buffer is already dequeued */
1867         if (vb->state == VB2_BUF_STATE_DEQUEUED)
1868                 return;
1869
1870         vb->state = VB2_BUF_STATE_DEQUEUED;
1871
1872         call_void_bufop(q, init_buffer, vb);
1873 }
1874
1875 int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb,
1876                    bool nonblocking)
1877 {
1878         struct vb2_buffer *vb = NULL;
1879         int ret;
1880
1881         ret = __vb2_get_done_vb(q, &vb, pb, nonblocking);
1882         if (ret < 0)
1883                 return ret;
1884
1885         switch (vb->state) {
1886         case VB2_BUF_STATE_DONE:
1887                 dprintk(q, 3, "returning done buffer\n");
1888                 break;
1889         case VB2_BUF_STATE_ERROR:
1890                 dprintk(q, 3, "returning done buffer with errors\n");
1891                 break;
1892         default:
1893                 dprintk(q, 1, "invalid buffer state %s\n",
1894                         vb2_state_name(vb->state));
1895                 return -EINVAL;
1896         }
1897
1898         call_void_vb_qop(vb, buf_finish, vb);
1899         vb->prepared = 0;
1900
1901         if (pindex)
1902                 *pindex = vb->index;
1903
1904         /* Fill buffer information for the userspace */
1905         if (pb)
1906                 call_void_bufop(q, fill_user_buffer, vb, pb);
1907
1908         /* Remove from videobuf queue */
1909         list_del(&vb->queued_entry);
1910         q->queued_count--;
1911
1912         trace_vb2_dqbuf(q, vb);
1913
1914         /* go back to dequeued state */
1915         __vb2_dqbuf(vb);
1916
1917         if (WARN_ON(vb->req_obj.req)) {
1918                 media_request_object_unbind(&vb->req_obj);
1919                 media_request_object_put(&vb->req_obj);
1920         }
1921         if (vb->request)
1922                 media_request_put(vb->request);
1923         vb->request = NULL;
1924
1925         dprintk(q, 2, "dqbuf of buffer %d, state: %s\n",
1926                 vb->index, vb2_state_name(vb->state));
1927
1928         return 0;
1929
1930 }
1931 EXPORT_SYMBOL_GPL(vb2_core_dqbuf);
1932
1933 /*
1934  * __vb2_queue_cancel() - cancel and stop (pause) streaming
1935  *
1936  * Removes all queued buffers from driver's queue and all buffers queued by
1937  * userspace from videobuf's queue. Returns to state after reqbufs.
1938  */
1939 static void __vb2_queue_cancel(struct vb2_queue *q)
1940 {
1941         unsigned int i;
1942
1943         /*
1944          * Tell driver to stop all transactions and release all queued
1945          * buffers.
1946          */
1947         if (q->start_streaming_called)
1948                 call_void_qop(q, stop_streaming, q);
1949
1950         /*
1951          * If you see this warning, then the driver isn't cleaning up properly
1952          * in stop_streaming(). See the stop_streaming() documentation in
1953          * videobuf2-core.h for more information how buffers should be returned
1954          * to vb2 in stop_streaming().
1955          */
1956         if (WARN_ON(atomic_read(&q->owned_by_drv_count))) {
1957                 for (i = 0; i < q->num_buffers; ++i)
1958                         if (q->bufs[i]->state == VB2_BUF_STATE_ACTIVE) {
1959                                 pr_warn("driver bug: stop_streaming operation is leaving buf %p in active state\n",
1960                                         q->bufs[i]);
1961                                 vb2_buffer_done(q->bufs[i], VB2_BUF_STATE_ERROR);
1962                         }
1963                 /* Must be zero now */
1964                 WARN_ON(atomic_read(&q->owned_by_drv_count));
1965         }
1966
1967         q->streaming = 0;
1968         q->start_streaming_called = 0;
1969         q->queued_count = 0;
1970         q->error = 0;
1971         q->uses_requests = 0;
1972         q->uses_qbuf = 0;
1973
1974         /*
1975          * Remove all buffers from videobuf's list...
1976          */
1977         INIT_LIST_HEAD(&q->queued_list);
1978         /*
1979          * ...and done list; userspace will not receive any buffers it
1980          * has not already dequeued before initiating cancel.
1981          */
1982         INIT_LIST_HEAD(&q->done_list);
1983         atomic_set(&q->owned_by_drv_count, 0);
1984         wake_up_all(&q->done_wq);
1985
1986         /*
1987          * Reinitialize all buffers for next use.
1988          * Make sure to call buf_finish for any queued buffers. Normally
1989          * that's done in dqbuf, but that's not going to happen when we
1990          * cancel the whole queue. Note: this code belongs here, not in
1991          * __vb2_dqbuf() since in vb2_core_dqbuf() there is a critical
1992          * call to __fill_user_buffer() after buf_finish(). That order can't
1993          * be changed, so we can't move the buf_finish() to __vb2_dqbuf().
1994          */
1995         for (i = 0; i < q->num_buffers; ++i) {
1996                 struct vb2_buffer *vb = q->bufs[i];
1997                 struct media_request *req = vb->req_obj.req;
1998
1999                 /*
2000                  * If a request is associated with this buffer, then
2001                  * call buf_request_cancel() to give the driver to complete()
2002                  * related request objects. Otherwise those objects would
2003                  * never complete.
2004                  */
2005                 if (req) {
2006                         enum media_request_state state;
2007                         unsigned long flags;
2008
2009                         spin_lock_irqsave(&req->lock, flags);
2010                         state = req->state;
2011                         spin_unlock_irqrestore(&req->lock, flags);
2012
2013                         if (state == MEDIA_REQUEST_STATE_QUEUED)
2014                                 call_void_vb_qop(vb, buf_request_complete, vb);
2015                 }
2016
2017                 __vb2_buf_mem_finish(vb);
2018
2019                 if (vb->prepared) {
2020                         call_void_vb_qop(vb, buf_finish, vb);
2021                         vb->prepared = 0;
2022                 }
2023                 __vb2_dqbuf(vb);
2024
2025                 if (vb->req_obj.req) {
2026                         media_request_object_unbind(&vb->req_obj);
2027                         media_request_object_put(&vb->req_obj);
2028                 }
2029                 if (vb->request)
2030                         media_request_put(vb->request);
2031                 vb->request = NULL;
2032                 vb->copied_timestamp = 0;
2033         }
2034 }
2035
2036 int vb2_core_streamon(struct vb2_queue *q, unsigned int type)
2037 {
2038         int ret;
2039
2040         if (type != q->type) {
2041                 dprintk(q, 1, "invalid stream type\n");
2042                 return -EINVAL;
2043         }
2044
2045         if (q->streaming) {
2046                 dprintk(q, 3, "already streaming\n");
2047                 return 0;
2048         }
2049
2050         if (!q->num_buffers) {
2051                 dprintk(q, 1, "no buffers have been allocated\n");
2052                 return -EINVAL;
2053         }
2054
2055         if (q->num_buffers < q->min_buffers_needed) {
2056                 dprintk(q, 1, "need at least %u allocated buffers\n",
2057                                 q->min_buffers_needed);
2058                 return -EINVAL;
2059         }
2060
2061         /*
2062          * Tell driver to start streaming provided sufficient buffers
2063          * are available.
2064          */
2065         if (q->queued_count >= q->min_buffers_needed) {
2066                 ret = v4l_vb2q_enable_media_source(q);
2067                 if (ret)
2068                         return ret;
2069                 ret = vb2_start_streaming(q);
2070                 if (ret)
2071                         return ret;
2072         }
2073
2074         q->streaming = 1;
2075
2076         dprintk(q, 3, "successful\n");
2077         return 0;
2078 }
2079 EXPORT_SYMBOL_GPL(vb2_core_streamon);
2080
2081 void vb2_queue_error(struct vb2_queue *q)
2082 {
2083         q->error = 1;
2084
2085         wake_up_all(&q->done_wq);
2086 }
2087 EXPORT_SYMBOL_GPL(vb2_queue_error);
2088
2089 int vb2_core_streamoff(struct vb2_queue *q, unsigned int type)
2090 {
2091         if (type != q->type) {
2092                 dprintk(q, 1, "invalid stream type\n");
2093                 return -EINVAL;
2094         }
2095
2096         /*
2097          * Cancel will pause streaming and remove all buffers from the driver
2098          * and videobuf, effectively returning control over them to userspace.
2099          *
2100          * Note that we do this even if q->streaming == 0: if you prepare or
2101          * queue buffers, and then call streamoff without ever having called
2102          * streamon, you would still expect those buffers to be returned to
2103          * their normal dequeued state.
2104          */
2105         __vb2_queue_cancel(q);
2106         q->waiting_for_buffers = !q->is_output;
2107         q->last_buffer_dequeued = false;
2108
2109         dprintk(q, 3, "successful\n");
2110         return 0;
2111 }
2112 EXPORT_SYMBOL_GPL(vb2_core_streamoff);
2113
2114 /*
2115  * __find_plane_by_offset() - find plane associated with the given offset off
2116  */
2117 static int __find_plane_by_offset(struct vb2_queue *q, unsigned long off,
2118                         unsigned int *_buffer, unsigned int *_plane)
2119 {
2120         struct vb2_buffer *vb;
2121         unsigned int buffer, plane;
2122
2123         /*
2124          * Go over all buffers and their planes, comparing the given offset
2125          * with an offset assigned to each plane. If a match is found,
2126          * return its buffer and plane numbers.
2127          */
2128         for (buffer = 0; buffer < q->num_buffers; ++buffer) {
2129                 vb = q->bufs[buffer];
2130
2131                 for (plane = 0; plane < vb->num_planes; ++plane) {
2132                         if (vb->planes[plane].m.offset == off) {
2133                                 *_buffer = buffer;
2134                                 *_plane = plane;
2135                                 return 0;
2136                         }
2137                 }
2138         }
2139
2140         return -EINVAL;
2141 }
2142
2143 int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type,
2144                 unsigned int index, unsigned int plane, unsigned int flags)
2145 {
2146         struct vb2_buffer *vb = NULL;
2147         struct vb2_plane *vb_plane;
2148         int ret;
2149         struct dma_buf *dbuf;
2150
2151         if (q->memory != VB2_MEMORY_MMAP) {
2152                 dprintk(q, 1, "queue is not currently set up for mmap\n");
2153                 return -EINVAL;
2154         }
2155
2156         if (!q->mem_ops->get_dmabuf) {
2157                 dprintk(q, 1, "queue does not support DMA buffer exporting\n");
2158                 return -EINVAL;
2159         }
2160
2161         if (flags & ~(O_CLOEXEC | O_ACCMODE)) {
2162                 dprintk(q, 1, "queue does support only O_CLOEXEC and access mode flags\n");
2163                 return -EINVAL;
2164         }
2165
2166         if (type != q->type) {
2167                 dprintk(q, 1, "invalid buffer type\n");
2168                 return -EINVAL;
2169         }
2170
2171         if (index >= q->num_buffers) {
2172                 dprintk(q, 1, "buffer index out of range\n");
2173                 return -EINVAL;
2174         }
2175
2176         vb = q->bufs[index];
2177
2178         if (plane >= vb->num_planes) {
2179                 dprintk(q, 1, "buffer plane out of range\n");
2180                 return -EINVAL;
2181         }
2182
2183         if (vb2_fileio_is_active(q)) {
2184                 dprintk(q, 1, "expbuf: file io in progress\n");
2185                 return -EBUSY;
2186         }
2187
2188         vb_plane = &vb->planes[plane];
2189
2190         dbuf = call_ptr_memop(vb, get_dmabuf, vb_plane->mem_priv,
2191                                 flags & O_ACCMODE);
2192         if (IS_ERR_OR_NULL(dbuf)) {
2193                 dprintk(q, 1, "failed to export buffer %d, plane %d\n",
2194                         index, plane);
2195                 return -EINVAL;
2196         }
2197
2198         ret = dma_buf_fd(dbuf, flags & ~O_ACCMODE);
2199         if (ret < 0) {
2200                 dprintk(q, 3, "buffer %d, plane %d failed to export (%d)\n",
2201                         index, plane, ret);
2202                 dma_buf_put(dbuf);
2203                 return ret;
2204         }
2205
2206         dprintk(q, 3, "buffer %d, plane %d exported as %d descriptor\n",
2207                 index, plane, ret);
2208         *fd = ret;
2209
2210         return 0;
2211 }
2212 EXPORT_SYMBOL_GPL(vb2_core_expbuf);
2213
2214 int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
2215 {
2216         unsigned long off = vma->vm_pgoff << PAGE_SHIFT;
2217         struct vb2_buffer *vb;
2218         unsigned int buffer = 0, plane = 0;
2219         int ret;
2220         unsigned long length;
2221
2222         if (q->memory != VB2_MEMORY_MMAP) {
2223                 dprintk(q, 1, "queue is not currently set up for mmap\n");
2224                 return -EINVAL;
2225         }
2226
2227         /*
2228          * Check memory area access mode.
2229          */
2230         if (!(vma->vm_flags & VM_SHARED)) {
2231                 dprintk(q, 1, "invalid vma flags, VM_SHARED needed\n");
2232                 return -EINVAL;
2233         }
2234         if (q->is_output) {
2235                 if (!(vma->vm_flags & VM_WRITE)) {
2236                         dprintk(q, 1, "invalid vma flags, VM_WRITE needed\n");
2237                         return -EINVAL;
2238                 }
2239         } else {
2240                 if (!(vma->vm_flags & VM_READ)) {
2241                         dprintk(q, 1, "invalid vma flags, VM_READ needed\n");
2242                         return -EINVAL;
2243                 }
2244         }
2245
2246         mutex_lock(&q->mmap_lock);
2247
2248         if (vb2_fileio_is_active(q)) {
2249                 dprintk(q, 1, "mmap: file io in progress\n");
2250                 ret = -EBUSY;
2251                 goto unlock;
2252         }
2253
2254         /*
2255          * Find the plane corresponding to the offset passed by userspace.
2256          */
2257         ret = __find_plane_by_offset(q, off, &buffer, &plane);
2258         if (ret)
2259                 goto unlock;
2260
2261         vb = q->bufs[buffer];
2262
2263         /*
2264          * MMAP requires page_aligned buffers.
2265          * The buffer length was page_aligned at __vb2_buf_mem_alloc(),
2266          * so, we need to do the same here.
2267          */
2268         length = PAGE_ALIGN(vb->planes[plane].length);
2269         if (length < (vma->vm_end - vma->vm_start)) {
2270                 dprintk(q, 1,
2271                         "MMAP invalid, as it would overflow buffer length\n");
2272                 ret = -EINVAL;
2273                 goto unlock;
2274         }
2275
2276         /*
2277          * vm_pgoff is treated in V4L2 API as a 'cookie' to select a buffer,
2278          * not as a in-buffer offset. We always want to mmap a whole buffer
2279          * from its beginning.
2280          */
2281         vma->vm_pgoff = 0;
2282
2283         ret = call_memop(vb, mmap, vb->planes[plane].mem_priv, vma);
2284
2285 unlock:
2286         mutex_unlock(&q->mmap_lock);
2287         if (ret)
2288                 return ret;
2289
2290         dprintk(q, 3, "buffer %d, plane %d successfully mapped\n", buffer, plane);
2291         return 0;
2292 }
2293 EXPORT_SYMBOL_GPL(vb2_mmap);
2294
2295 #ifndef CONFIG_MMU
2296 unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
2297                                     unsigned long addr,
2298                                     unsigned long len,
2299                                     unsigned long pgoff,
2300                                     unsigned long flags)
2301 {
2302         unsigned long off = pgoff << PAGE_SHIFT;
2303         struct vb2_buffer *vb;
2304         unsigned int buffer, plane;
2305         void *vaddr;
2306         int ret;
2307
2308         if (q->memory != VB2_MEMORY_MMAP) {
2309                 dprintk(q, 1, "queue is not currently set up for mmap\n");
2310                 return -EINVAL;
2311         }
2312
2313         /*
2314          * Find the plane corresponding to the offset passed by userspace.
2315          */
2316         ret = __find_plane_by_offset(q, off, &buffer, &plane);
2317         if (ret)
2318                 return ret;
2319
2320         vb = q->bufs[buffer];
2321
2322         vaddr = vb2_plane_vaddr(vb, plane);
2323         return vaddr ? (unsigned long)vaddr : -EINVAL;
2324 }
2325 EXPORT_SYMBOL_GPL(vb2_get_unmapped_area);
2326 #endif
2327
2328 int vb2_core_queue_init(struct vb2_queue *q)
2329 {
2330         /*
2331          * Sanity check
2332          */
2333         if (WARN_ON(!q)                   ||
2334             WARN_ON(!q->ops)              ||
2335             WARN_ON(!q->mem_ops)          ||
2336             WARN_ON(!q->type)             ||
2337             WARN_ON(!q->io_modes)         ||
2338             WARN_ON(!q->ops->queue_setup) ||
2339             WARN_ON(!q->ops->buf_queue))
2340                 return -EINVAL;
2341
2342         if (WARN_ON(q->requires_requests && !q->supports_requests))
2343                 return -EINVAL;
2344
2345         INIT_LIST_HEAD(&q->queued_list);
2346         INIT_LIST_HEAD(&q->done_list);
2347         spin_lock_init(&q->done_lock);
2348         mutex_init(&q->mmap_lock);
2349         init_waitqueue_head(&q->done_wq);
2350
2351         q->memory = VB2_MEMORY_UNKNOWN;
2352
2353         if (q->buf_struct_size == 0)
2354                 q->buf_struct_size = sizeof(struct vb2_buffer);
2355
2356         if (q->bidirectional)
2357                 q->dma_dir = DMA_BIDIRECTIONAL;
2358         else
2359                 q->dma_dir = q->is_output ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
2360
2361         if (q->name[0] == '\0')
2362                 snprintf(q->name, sizeof(q->name), "%s-%p",
2363                          q->is_output ? "out" : "cap", q);
2364
2365         return 0;
2366 }
2367 EXPORT_SYMBOL_GPL(vb2_core_queue_init);
2368
2369 static int __vb2_init_fileio(struct vb2_queue *q, int read);
2370 static int __vb2_cleanup_fileio(struct vb2_queue *q);
2371 void vb2_core_queue_release(struct vb2_queue *q)
2372 {
2373         __vb2_cleanup_fileio(q);
2374         __vb2_queue_cancel(q);
2375         mutex_lock(&q->mmap_lock);
2376         __vb2_queue_free(q, q->num_buffers);
2377         mutex_unlock(&q->mmap_lock);
2378 }
2379 EXPORT_SYMBOL_GPL(vb2_core_queue_release);
2380
2381 __poll_t vb2_core_poll(struct vb2_queue *q, struct file *file,
2382                 poll_table *wait)
2383 {
2384         __poll_t req_events = poll_requested_events(wait);
2385         struct vb2_buffer *vb = NULL;
2386         unsigned long flags;
2387
2388         /*
2389          * poll_wait() MUST be called on the first invocation on all the
2390          * potential queues of interest, even if we are not interested in their
2391          * events during this first call. Failure to do so will result in
2392          * queue's events to be ignored because the poll_table won't be capable
2393          * of adding new wait queues thereafter.
2394          */
2395         poll_wait(file, &q->done_wq, wait);
2396
2397         if (!q->is_output && !(req_events & (EPOLLIN | EPOLLRDNORM)))
2398                 return 0;
2399         if (q->is_output && !(req_events & (EPOLLOUT | EPOLLWRNORM)))
2400                 return 0;
2401
2402         /*
2403          * Start file I/O emulator only if streaming API has not been used yet.
2404          */
2405         if (q->num_buffers == 0 && !vb2_fileio_is_active(q)) {
2406                 if (!q->is_output && (q->io_modes & VB2_READ) &&
2407                                 (req_events & (EPOLLIN | EPOLLRDNORM))) {
2408                         if (__vb2_init_fileio(q, 1))
2409                                 return EPOLLERR;
2410                 }
2411                 if (q->is_output && (q->io_modes & VB2_WRITE) &&
2412                                 (req_events & (EPOLLOUT | EPOLLWRNORM))) {
2413                         if (__vb2_init_fileio(q, 0))
2414                                 return EPOLLERR;
2415                         /*
2416                          * Write to OUTPUT queue can be done immediately.
2417                          */
2418                         return EPOLLOUT | EPOLLWRNORM;
2419                 }
2420         }
2421
2422         /*
2423          * There is nothing to wait for if the queue isn't streaming, or if the
2424          * error flag is set.
2425          */
2426         if (!vb2_is_streaming(q) || q->error)
2427                 return EPOLLERR;
2428
2429         /*
2430          * If this quirk is set and QBUF hasn't been called yet then
2431          * return EPOLLERR as well. This only affects capture queues, output
2432          * queues will always initialize waiting_for_buffers to false.
2433          * This quirk is set by V4L2 for backwards compatibility reasons.
2434          */
2435         if (q->quirk_poll_must_check_waiting_for_buffers &&
2436             q->waiting_for_buffers && (req_events & (EPOLLIN | EPOLLRDNORM)))
2437                 return EPOLLERR;
2438
2439         /*
2440          * For output streams you can call write() as long as there are fewer
2441          * buffers queued than there are buffers available.
2442          */
2443         if (q->is_output && q->fileio && q->queued_count < q->num_buffers)
2444                 return EPOLLOUT | EPOLLWRNORM;
2445
2446         if (list_empty(&q->done_list)) {
2447                 /*
2448                  * If the last buffer was dequeued from a capture queue,
2449                  * return immediately. DQBUF will return -EPIPE.
2450                  */
2451                 if (q->last_buffer_dequeued)
2452                         return EPOLLIN | EPOLLRDNORM;
2453         }
2454
2455         /*
2456          * Take first buffer available for dequeuing.
2457          */
2458         spin_lock_irqsave(&q->done_lock, flags);
2459         if (!list_empty(&q->done_list))
2460                 vb = list_first_entry(&q->done_list, struct vb2_buffer,
2461                                         done_entry);
2462         spin_unlock_irqrestore(&q->done_lock, flags);
2463
2464         if (vb && (vb->state == VB2_BUF_STATE_DONE
2465                         || vb->state == VB2_BUF_STATE_ERROR)) {
2466                 return (q->is_output) ?
2467                                 EPOLLOUT | EPOLLWRNORM :
2468                                 EPOLLIN | EPOLLRDNORM;
2469         }
2470         return 0;
2471 }
2472 EXPORT_SYMBOL_GPL(vb2_core_poll);
2473
2474 /*
2475  * struct vb2_fileio_buf - buffer context used by file io emulator
2476  *
2477  * vb2 provides a compatibility layer and emulator of file io (read and
2478  * write) calls on top of streaming API. This structure is used for
2479  * tracking context related to the buffers.
2480  */
2481 struct vb2_fileio_buf {
2482         void *vaddr;
2483         unsigned int size;
2484         unsigned int pos;
2485         unsigned int queued:1;
2486 };
2487
2488 /*
2489  * struct vb2_fileio_data - queue context used by file io emulator
2490  *
2491  * @cur_index:  the index of the buffer currently being read from or
2492  *              written to. If equal to q->num_buffers then a new buffer
2493  *              must be dequeued.
2494  * @initial_index: in the read() case all buffers are queued up immediately
2495  *              in __vb2_init_fileio() and __vb2_perform_fileio() just cycles
2496  *              buffers. However, in the write() case no buffers are initially
2497  *              queued, instead whenever a buffer is full it is queued up by
2498  *              __vb2_perform_fileio(). Only once all available buffers have
2499  *              been queued up will __vb2_perform_fileio() start to dequeue
2500  *              buffers. This means that initially __vb2_perform_fileio()
2501  *              needs to know what buffer index to use when it is queuing up
2502  *              the buffers for the first time. That initial index is stored
2503  *              in this field. Once it is equal to q->num_buffers all
2504  *              available buffers have been queued and __vb2_perform_fileio()
2505  *              should start the normal dequeue/queue cycle.
2506  *
2507  * vb2 provides a compatibility layer and emulator of file io (read and
2508  * write) calls on top of streaming API. For proper operation it required
2509  * this structure to save the driver state between each call of the read
2510  * or write function.
2511  */
2512 struct vb2_fileio_data {
2513         unsigned int count;
2514         unsigned int type;
2515         unsigned int memory;
2516         struct vb2_fileio_buf bufs[VB2_MAX_FRAME];
2517         unsigned int cur_index;
2518         unsigned int initial_index;
2519         unsigned int q_count;
2520         unsigned int dq_count;
2521         unsigned read_once:1;
2522         unsigned write_immediately:1;
2523 };
2524
2525 /*
2526  * __vb2_init_fileio() - initialize file io emulator
2527  * @q:          videobuf2 queue
2528  * @read:       mode selector (1 means read, 0 means write)
2529  */
2530 static int __vb2_init_fileio(struct vb2_queue *q, int read)
2531 {
2532         struct vb2_fileio_data *fileio;
2533         int i, ret;
2534         unsigned int count = 0;
2535
2536         /*
2537          * Sanity check
2538          */
2539         if (WARN_ON((read && !(q->io_modes & VB2_READ)) ||
2540                     (!read && !(q->io_modes & VB2_WRITE))))
2541                 return -EINVAL;
2542
2543         /*
2544          * Check if device supports mapping buffers to kernel virtual space.
2545          */
2546         if (!q->mem_ops->vaddr)
2547                 return -EBUSY;
2548
2549         /*
2550          * Check if streaming api has not been already activated.
2551          */
2552         if (q->streaming || q->num_buffers > 0)
2553                 return -EBUSY;
2554
2555         /*
2556          * Start with count 1, driver can increase it in queue_setup()
2557          */
2558         count = 1;
2559
2560         dprintk(q, 3, "setting up file io: mode %s, count %d, read_once %d, write_immediately %d\n",
2561                 (read) ? "read" : "write", count, q->fileio_read_once,
2562                 q->fileio_write_immediately);
2563
2564         fileio = kzalloc(sizeof(*fileio), GFP_KERNEL);
2565         if (fileio == NULL)
2566                 return -ENOMEM;
2567
2568         fileio->read_once = q->fileio_read_once;
2569         fileio->write_immediately = q->fileio_write_immediately;
2570
2571         /*
2572          * Request buffers and use MMAP type to force driver
2573          * to allocate buffers by itself.
2574          */
2575         fileio->count = count;
2576         fileio->memory = VB2_MEMORY_MMAP;
2577         fileio->type = q->type;
2578         q->fileio = fileio;
2579         ret = vb2_core_reqbufs(q, fileio->memory, &fileio->count);
2580         if (ret)
2581                 goto err_kfree;
2582
2583         /*
2584          * Check if plane_count is correct
2585          * (multiplane buffers are not supported).
2586          */
2587         if (q->bufs[0]->num_planes != 1) {
2588                 ret = -EBUSY;
2589                 goto err_reqbufs;
2590         }
2591
2592         /*
2593          * Get kernel address of each buffer.
2594          */
2595         for (i = 0; i < q->num_buffers; i++) {
2596                 fileio->bufs[i].vaddr = vb2_plane_vaddr(q->bufs[i], 0);
2597                 if (fileio->bufs[i].vaddr == NULL) {
2598                         ret = -EINVAL;
2599                         goto err_reqbufs;
2600                 }
2601                 fileio->bufs[i].size = vb2_plane_size(q->bufs[i], 0);
2602         }
2603
2604         /*
2605          * Read mode requires pre queuing of all buffers.
2606          */
2607         if (read) {
2608                 /*
2609                  * Queue all buffers.
2610                  */
2611                 for (i = 0; i < q->num_buffers; i++) {
2612                         ret = vb2_core_qbuf(q, i, NULL, NULL);
2613                         if (ret)
2614                                 goto err_reqbufs;
2615                         fileio->bufs[i].queued = 1;
2616                 }
2617                 /*
2618                  * All buffers have been queued, so mark that by setting
2619                  * initial_index to q->num_buffers
2620                  */
2621                 fileio->initial_index = q->num_buffers;
2622                 fileio->cur_index = q->num_buffers;
2623         }
2624
2625         /*
2626          * Start streaming.
2627          */
2628         ret = vb2_core_streamon(q, q->type);
2629         if (ret)
2630                 goto err_reqbufs;
2631
2632         return ret;
2633
2634 err_reqbufs:
2635         fileio->count = 0;
2636         vb2_core_reqbufs(q, fileio->memory, &fileio->count);
2637
2638 err_kfree:
2639         q->fileio = NULL;
2640         kfree(fileio);
2641         return ret;
2642 }
2643
2644 /*
2645  * __vb2_cleanup_fileio() - free resourced used by file io emulator
2646  * @q:          videobuf2 queue
2647  */
2648 static int __vb2_cleanup_fileio(struct vb2_queue *q)
2649 {
2650         struct vb2_fileio_data *fileio = q->fileio;
2651
2652         if (fileio) {
2653                 vb2_core_streamoff(q, q->type);
2654                 q->fileio = NULL;
2655                 fileio->count = 0;
2656                 vb2_core_reqbufs(q, fileio->memory, &fileio->count);
2657                 kfree(fileio);
2658                 dprintk(q, 3, "file io emulator closed\n");
2659         }
2660         return 0;
2661 }
2662
2663 /*
2664  * __vb2_perform_fileio() - perform a single file io (read or write) operation
2665  * @q:          videobuf2 queue
2666  * @data:       pointed to target userspace buffer
2667  * @count:      number of bytes to read or write
2668  * @ppos:       file handle position tracking pointer
2669  * @nonblock:   mode selector (1 means blocking calls, 0 means nonblocking)
2670  * @read:       access mode selector (1 means read, 0 means write)
2671  */
2672 static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_t count,
2673                 loff_t *ppos, int nonblock, int read)
2674 {
2675         struct vb2_fileio_data *fileio;
2676         struct vb2_fileio_buf *buf;
2677         bool is_multiplanar = q->is_multiplanar;
2678         /*
2679          * When using write() to write data to an output video node the vb2 core
2680          * should copy timestamps if V4L2_BUF_FLAG_TIMESTAMP_COPY is set. Nobody
2681          * else is able to provide this information with the write() operation.
2682          */
2683         bool copy_timestamp = !read && q->copy_timestamp;
2684         unsigned index;
2685         int ret;
2686
2687         dprintk(q, 3, "mode %s, offset %ld, count %zd, %sblocking\n",
2688                 read ? "read" : "write", (long)*ppos, count,
2689                 nonblock ? "non" : "");
2690
2691         if (!data)
2692                 return -EINVAL;
2693
2694         if (q->waiting_in_dqbuf) {
2695                 dprintk(q, 3, "another dup()ped fd is %s\n",
2696                         read ? "reading" : "writing");
2697                 return -EBUSY;
2698         }
2699
2700         /*
2701          * Initialize emulator on first call.
2702          */
2703         if (!vb2_fileio_is_active(q)) {
2704                 ret = __vb2_init_fileio(q, read);
2705                 dprintk(q, 3, "vb2_init_fileio result: %d\n", ret);
2706                 if (ret)
2707                         return ret;
2708         }
2709         fileio = q->fileio;
2710
2711         /*
2712          * Check if we need to dequeue the buffer.
2713          */
2714         index = fileio->cur_index;
2715         if (index >= q->num_buffers) {
2716                 struct vb2_buffer *b;
2717
2718                 /*
2719                  * Call vb2_dqbuf to get buffer back.
2720                  */
2721                 ret = vb2_core_dqbuf(q, &index, NULL, nonblock);
2722                 dprintk(q, 5, "vb2_dqbuf result: %d\n", ret);
2723                 if (ret)
2724                         return ret;
2725                 fileio->dq_count += 1;
2726
2727                 fileio->cur_index = index;
2728                 buf = &fileio->bufs[index];
2729                 b = q->bufs[index];
2730
2731                 /*
2732                  * Get number of bytes filled by the driver
2733                  */
2734                 buf->pos = 0;
2735                 buf->queued = 0;
2736                 buf->size = read ? vb2_get_plane_payload(q->bufs[index], 0)
2737                                  : vb2_plane_size(q->bufs[index], 0);
2738                 /* Compensate for data_offset on read in the multiplanar case. */
2739                 if (is_multiplanar && read &&
2740                                 b->planes[0].data_offset < buf->size) {
2741                         buf->pos = b->planes[0].data_offset;
2742                         buf->size -= buf->pos;
2743                 }
2744         } else {
2745                 buf = &fileio->bufs[index];
2746         }
2747
2748         /*
2749          * Limit count on last few bytes of the buffer.
2750          */
2751         if (buf->pos + count > buf->size) {
2752                 count = buf->size - buf->pos;
2753                 dprintk(q, 5, "reducing read count: %zd\n", count);
2754         }
2755
2756         /*
2757          * Transfer data to userspace.
2758          */
2759         dprintk(q, 3, "copying %zd bytes - buffer %d, offset %u\n",
2760                 count, index, buf->pos);
2761         if (read)
2762                 ret = copy_to_user(data, buf->vaddr + buf->pos, count);
2763         else
2764                 ret = copy_from_user(buf->vaddr + buf->pos, data, count);
2765         if (ret) {
2766                 dprintk(q, 3, "error copying data\n");
2767                 return -EFAULT;
2768         }
2769
2770         /*
2771          * Update counters.
2772          */
2773         buf->pos += count;
2774         *ppos += count;
2775
2776         /*
2777          * Queue next buffer if required.
2778          */
2779         if (buf->pos == buf->size || (!read && fileio->write_immediately)) {
2780                 struct vb2_buffer *b = q->bufs[index];
2781
2782                 /*
2783                  * Check if this is the last buffer to read.
2784                  */
2785                 if (read && fileio->read_once && fileio->dq_count == 1) {
2786                         dprintk(q, 3, "read limit reached\n");
2787                         return __vb2_cleanup_fileio(q);
2788                 }
2789
2790                 /*
2791                  * Call vb2_qbuf and give buffer to the driver.
2792                  */
2793                 b->planes[0].bytesused = buf->pos;
2794
2795                 if (copy_timestamp)
2796                         b->timestamp = ktime_get_ns();
2797                 ret = vb2_core_qbuf(q, index, NULL, NULL);
2798                 dprintk(q, 5, "vb2_dbuf result: %d\n", ret);
2799                 if (ret)
2800                         return ret;
2801
2802                 /*
2803                  * Buffer has been queued, update the status
2804                  */
2805                 buf->pos = 0;
2806                 buf->queued = 1;
2807                 buf->size = vb2_plane_size(q->bufs[index], 0);
2808                 fileio->q_count += 1;
2809                 /*
2810                  * If we are queuing up buffers for the first time, then
2811                  * increase initial_index by one.
2812                  */
2813                 if (fileio->initial_index < q->num_buffers)
2814                         fileio->initial_index++;
2815                 /*
2816                  * The next buffer to use is either a buffer that's going to be
2817                  * queued for the first time (initial_index < q->num_buffers)
2818                  * or it is equal to q->num_buffers, meaning that the next
2819                  * time we need to dequeue a buffer since we've now queued up
2820                  * all the 'first time' buffers.
2821                  */
2822                 fileio->cur_index = fileio->initial_index;
2823         }
2824
2825         /*
2826          * Return proper number of bytes processed.
2827          */
2828         if (ret == 0)
2829                 ret = count;
2830         return ret;
2831 }
2832
2833 size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count,
2834                 loff_t *ppos, int nonblocking)
2835 {
2836         return __vb2_perform_fileio(q, data, count, ppos, nonblocking, 1);
2837 }
2838 EXPORT_SYMBOL_GPL(vb2_read);
2839
2840 size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count,
2841                 loff_t *ppos, int nonblocking)
2842 {
2843         return __vb2_perform_fileio(q, (char __user *) data, count,
2844                                                         ppos, nonblocking, 0);
2845 }
2846 EXPORT_SYMBOL_GPL(vb2_write);
2847
2848 struct vb2_threadio_data {
2849         struct task_struct *thread;
2850         vb2_thread_fnc fnc;
2851         void *priv;
2852         bool stop;
2853 };
2854
2855 static int vb2_thread(void *data)
2856 {
2857         struct vb2_queue *q = data;
2858         struct vb2_threadio_data *threadio = q->threadio;
2859         bool copy_timestamp = false;
2860         unsigned prequeue = 0;
2861         unsigned index = 0;
2862         int ret = 0;
2863
2864         if (q->is_output) {
2865                 prequeue = q->num_buffers;
2866                 copy_timestamp = q->copy_timestamp;
2867         }
2868
2869         set_freezable();
2870
2871         for (;;) {
2872                 struct vb2_buffer *vb;
2873
2874                 /*
2875                  * Call vb2_dqbuf to get buffer back.
2876                  */
2877                 if (prequeue) {
2878                         vb = q->bufs[index++];
2879                         prequeue--;
2880                 } else {
2881                         call_void_qop(q, wait_finish, q);
2882                         if (!threadio->stop)
2883                                 ret = vb2_core_dqbuf(q, &index, NULL, 0);
2884                         call_void_qop(q, wait_prepare, q);
2885                         dprintk(q, 5, "file io: vb2_dqbuf result: %d\n", ret);
2886                         if (!ret)
2887                                 vb = q->bufs[index];
2888                 }
2889                 if (ret || threadio->stop)
2890                         break;
2891                 try_to_freeze();
2892
2893                 if (vb->state != VB2_BUF_STATE_ERROR)
2894                         if (threadio->fnc(vb, threadio->priv))
2895                                 break;
2896                 call_void_qop(q, wait_finish, q);
2897                 if (copy_timestamp)
2898                         vb->timestamp = ktime_get_ns();
2899                 if (!threadio->stop)
2900                         ret = vb2_core_qbuf(q, vb->index, NULL, NULL);
2901                 call_void_qop(q, wait_prepare, q);
2902                 if (ret || threadio->stop)
2903                         break;
2904         }
2905
2906         /* Hmm, linux becomes *very* unhappy without this ... */
2907         while (!kthread_should_stop()) {
2908                 set_current_state(TASK_INTERRUPTIBLE);
2909                 schedule();
2910         }
2911         return 0;
2912 }
2913
2914 /*
2915  * This function should not be used for anything else but the videobuf2-dvb
2916  * support. If you think you have another good use-case for this, then please
2917  * contact the linux-media mailinglist first.
2918  */
2919 int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv,
2920                      const char *thread_name)
2921 {
2922         struct vb2_threadio_data *threadio;
2923         int ret = 0;
2924
2925         if (q->threadio)
2926                 return -EBUSY;
2927         if (vb2_is_busy(q))
2928                 return -EBUSY;
2929         if (WARN_ON(q->fileio))
2930                 return -EBUSY;
2931
2932         threadio = kzalloc(sizeof(*threadio), GFP_KERNEL);
2933         if (threadio == NULL)
2934                 return -ENOMEM;
2935         threadio->fnc = fnc;
2936         threadio->priv = priv;
2937
2938         ret = __vb2_init_fileio(q, !q->is_output);
2939         dprintk(q, 3, "file io: vb2_init_fileio result: %d\n", ret);
2940         if (ret)
2941                 goto nomem;
2942         q->threadio = threadio;
2943         threadio->thread = kthread_run(vb2_thread, q, "vb2-%s", thread_name);
2944         if (IS_ERR(threadio->thread)) {
2945                 ret = PTR_ERR(threadio->thread);
2946                 threadio->thread = NULL;
2947                 goto nothread;
2948         }
2949         return 0;
2950
2951 nothread:
2952         __vb2_cleanup_fileio(q);
2953 nomem:
2954         kfree(threadio);
2955         return ret;
2956 }
2957 EXPORT_SYMBOL_GPL(vb2_thread_start);
2958
2959 int vb2_thread_stop(struct vb2_queue *q)
2960 {
2961         struct vb2_threadio_data *threadio = q->threadio;
2962         int err;
2963
2964         if (threadio == NULL)
2965                 return 0;
2966         threadio->stop = true;
2967         /* Wake up all pending sleeps in the thread */
2968         vb2_queue_error(q);
2969         err = kthread_stop(threadio->thread);
2970         __vb2_cleanup_fileio(q);
2971         threadio->thread = NULL;
2972         kfree(threadio);
2973         q->threadio = NULL;
2974         return err;
2975 }
2976 EXPORT_SYMBOL_GPL(vb2_thread_stop);
2977
2978 MODULE_DESCRIPTION("Media buffer core framework");
2979 MODULE_AUTHOR("Pawel Osciak <pawel@osciak.com>, Marek Szyprowski");
2980 MODULE_LICENSE("GPL");