1/* 2 * videobuf2-core.c - V4L2 driver helper framework 3 * 4 * Copyright (C) 2010 Samsung Electronics 5 * 6 * Author: Pawel Osciak <pawel@osciak.com> 7 * Marek Szyprowski <m.szyprowski@samsung.com> 8 * 9 * 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#include <linux/err.h> 18#include <linux/kernel.h> 19#include <linux/module.h> 20#include <linux/mm.h> 21#include <linux/poll.h> 22#include <linux/slab.h> 23#include <linux/sched.h> 24#include <linux/freezer.h> 25#include <linux/kthread.h> 26 27#include <media/v4l2-dev.h> 28#include <media/v4l2-fh.h> 29#include <media/v4l2-event.h> 30#include <media/v4l2-common.h> 31#include <media/videobuf2-core.h> 32 33static int debug; 34module_param(debug, int, 0644); 35 36#define dprintk(level, fmt, arg...) \ 37 do { \ 38 if (debug >= level) \ 39 pr_info("vb2: %s: " fmt, __func__, ## arg); \ 40 } while (0) 41 42#ifdef CONFIG_VIDEO_ADV_DEBUG 43 44/* 45 * If advanced debugging is on, then count how often each op is called 46 * successfully, which can either be per-buffer or per-queue. 47 * 48 * This makes it easy to check that the 'init' and 'cleanup' 49 * (and variations thereof) stay balanced. 50 */ 51 52#define log_memop(vb, op) \ 53 dprintk(2, "call_memop(%p, %d, %s)%s\n", \ 54 (vb)->vb2_queue, (vb)->v4l2_buf.index, #op, \ 55 (vb)->vb2_queue->mem_ops->op ? "" : " (nop)") 56 57#define call_memop(vb, op, args...) \ 58({ \ 59 struct vb2_queue *_q = (vb)->vb2_queue; \ 60 int err; \ 61 \ 62 log_memop(vb, op); \ 63 err = _q->mem_ops->op ? _q->mem_ops->op(args) : 0; \ 64 if (!err) \ 65 (vb)->cnt_mem_ ## op++; \ 66 err; \ 67}) 68 69#define call_ptr_memop(vb, op, args...) \ 70({ \ 71 struct vb2_queue *_q = (vb)->vb2_queue; \ 72 void *ptr; \ 73 \ 74 log_memop(vb, op); \ 75 ptr = _q->mem_ops->op ? _q->mem_ops->op(args) : NULL; \ 76 if (!IS_ERR_OR_NULL(ptr)) \ 77 (vb)->cnt_mem_ ## op++; \ 78 ptr; \ 79}) 80 81#define call_void_memop(vb, op, args...) \ 82({ \ 83 struct vb2_queue *_q = (vb)->vb2_queue; \ 84 \ 85 log_memop(vb, op); \ 86 if (_q->mem_ops->op) \ 87 _q->mem_ops->op(args); \ 88 (vb)->cnt_mem_ ## op++; \ 89}) 90 91#define log_qop(q, op) \ 92 dprintk(2, "call_qop(%p, %s)%s\n", q, #op, \ 93 (q)->ops->op ? "" : " (nop)") 94 95#define call_qop(q, op, args...) \ 96({ \ 97 int err; \ 98 \ 99 log_qop(q, op); \ 100 err = (q)->ops->op ? (q)->ops->op(args) : 0; \ 101 if (!err) \ 102 (q)->cnt_ ## op++; \ 103 err; \ 104}) 105 106#define call_void_qop(q, op, args...) \ 107({ \ 108 log_qop(q, op); \ 109 if ((q)->ops->op) \ 110 (q)->ops->op(args); \ 111 (q)->cnt_ ## op++; \ 112}) 113 114#define log_vb_qop(vb, op, args...) \ 115 dprintk(2, "call_vb_qop(%p, %d, %s)%s\n", \ 116 (vb)->vb2_queue, (vb)->v4l2_buf.index, #op, \ 117 (vb)->vb2_queue->ops->op ? "" : " (nop)") 118 119#define call_vb_qop(vb, op, args...) \ 120({ \ 121 int err; \ 122 \ 123 log_vb_qop(vb, op); \ 124 err = (vb)->vb2_queue->ops->op ? \ 125 (vb)->vb2_queue->ops->op(args) : 0; \ 126 if (!err) \ 127 (vb)->cnt_ ## op++; \ 128 err; \ 129}) 130 131#define call_void_vb_qop(vb, op, args...) \ 132({ \ 133 log_vb_qop(vb, op); \ 134 if ((vb)->vb2_queue->ops->op) \ 135 (vb)->vb2_queue->ops->op(args); \ 136 (vb)->cnt_ ## op++; \ 137}) 138 139#else 140 141#define call_memop(vb, op, args...) \ 142 ((vb)->vb2_queue->mem_ops->op ? \ 143 (vb)->vb2_queue->mem_ops->op(args) : 0) 144 145#define call_ptr_memop(vb, op, args...) \ 146 ((vb)->vb2_queue->mem_ops->op ? \ 147 (vb)->vb2_queue->mem_ops->op(args) : NULL) 148 149#define call_void_memop(vb, op, args...) \ 150 do { \ 151 if ((vb)->vb2_queue->mem_ops->op) \ 152 (vb)->vb2_queue->mem_ops->op(args); \ 153 } while (0) 154 155#define call_qop(q, op, args...) \ 156 ((q)->ops->op ? (q)->ops->op(args) : 0) 157 158#define call_void_qop(q, op, args...) \ 159 do { \ 160 if ((q)->ops->op) \ 161 (q)->ops->op(args); \ 162 } while (0) 163 164#define call_vb_qop(vb, op, args...) \ 165 ((vb)->vb2_queue->ops->op ? (vb)->vb2_queue->ops->op(args) : 0) 166 167#define call_void_vb_qop(vb, op, args...) \ 168 do { \ 169 if ((vb)->vb2_queue->ops->op) \ 170 (vb)->vb2_queue->ops->op(args); \ 171 } while (0) 172 173#endif 174 175/* Flags that are set by the vb2 core */ 176#define V4L2_BUFFER_MASK_FLAGS (V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_QUEUED | \ 177 V4L2_BUF_FLAG_DONE | V4L2_BUF_FLAG_ERROR | \ 178 V4L2_BUF_FLAG_PREPARED | \ 179 V4L2_BUF_FLAG_TIMESTAMP_MASK) 180/* Output buffer flags that should be passed on to the driver */ 181#define V4L2_BUFFER_OUT_FLAGS (V4L2_BUF_FLAG_PFRAME | V4L2_BUF_FLAG_BFRAME | \ 182 V4L2_BUF_FLAG_KEYFRAME | V4L2_BUF_FLAG_TIMECODE) 183 184static void __vb2_queue_cancel(struct vb2_queue *q); 185 186/** 187 * __vb2_buf_mem_alloc() - allocate video memory for the given buffer 188 */ 189static int __vb2_buf_mem_alloc(struct vb2_buffer *vb) 190{ 191 struct vb2_queue *q = vb->vb2_queue; 192 enum dma_data_direction dma_dir = 193 V4L2_TYPE_IS_OUTPUT(q->type) ? DMA_TO_DEVICE : DMA_FROM_DEVICE; 194 void *mem_priv; 195 int plane; 196 197 /* 198 * Allocate memory for all planes in this buffer 199 * NOTE: mmapped areas should be page aligned 200 */ 201 for (plane = 0; plane < vb->num_planes; ++plane) { 202 unsigned long size = PAGE_ALIGN(q->plane_sizes[plane]); 203 204 mem_priv = call_ptr_memop(vb, alloc, q->alloc_ctx[plane], 205 size, dma_dir, q->gfp_flags); 206 if (IS_ERR_OR_NULL(mem_priv)) 207 goto free; 208 209 /* Associate allocator private data with this plane */ 210 vb->planes[plane].mem_priv = mem_priv; 211 vb->v4l2_planes[plane].length = q->plane_sizes[plane]; 212 } 213 214 return 0; 215free: 216 /* Free already allocated memory if one of the allocations failed */ 217 for (; plane > 0; --plane) { 218 call_void_memop(vb, put, vb->planes[plane - 1].mem_priv); 219 vb->planes[plane - 1].mem_priv = NULL; 220 } 221 222 return -ENOMEM; 223} 224 225/** 226 * __vb2_buf_mem_free() - free memory of the given buffer 227 */ 228static void __vb2_buf_mem_free(struct vb2_buffer *vb) 229{ 230 unsigned int plane; 231 232 for (plane = 0; plane < vb->num_planes; ++plane) { 233 call_void_memop(vb, put, vb->planes[plane].mem_priv); 234 vb->planes[plane].mem_priv = NULL; 235 dprintk(3, "freed plane %d of buffer %d\n", plane, 236 vb->v4l2_buf.index); 237 } 238} 239 240/** 241 * __vb2_buf_userptr_put() - release userspace memory associated with 242 * a USERPTR buffer 243 */ 244static void __vb2_buf_userptr_put(struct vb2_buffer *vb) 245{ 246 unsigned int plane; 247 248 for (plane = 0; plane < vb->num_planes; ++plane) { 249 if (vb->planes[plane].mem_priv) 250 call_void_memop(vb, put_userptr, vb->planes[plane].mem_priv); 251 vb->planes[plane].mem_priv = NULL; 252 } 253} 254 255/** 256 * __vb2_plane_dmabuf_put() - release memory associated with 257 * a DMABUF shared plane 258 */ 259static void __vb2_plane_dmabuf_put(struct vb2_buffer *vb, struct vb2_plane *p) 260{ 261 if (!p->mem_priv) 262 return; 263 264 if (p->dbuf_mapped) 265 call_void_memop(vb, unmap_dmabuf, p->mem_priv); 266 267 call_void_memop(vb, detach_dmabuf, p->mem_priv); 268 dma_buf_put(p->dbuf); 269 memset(p, 0, sizeof(*p)); 270} 271 272/** 273 * __vb2_buf_dmabuf_put() - release memory associated with 274 * a DMABUF shared buffer 275 */ 276static void __vb2_buf_dmabuf_put(struct vb2_buffer *vb) 277{ 278 unsigned int plane; 279 280 for (plane = 0; plane < vb->num_planes; ++plane) 281 __vb2_plane_dmabuf_put(vb, &vb->planes[plane]); 282} 283 284/** 285 * __setup_lengths() - setup initial lengths for every plane in 286 * every buffer on the queue 287 */ 288static void __setup_lengths(struct vb2_queue *q, unsigned int n) 289{ 290 unsigned int buffer, plane; 291 struct vb2_buffer *vb; 292 293 for (buffer = q->num_buffers; buffer < q->num_buffers + n; ++buffer) { 294 vb = q->bufs[buffer]; 295 if (!vb) 296 continue; 297 298 for (plane = 0; plane < vb->num_planes; ++plane) 299 vb->v4l2_planes[plane].length = q->plane_sizes[plane]; 300 } 301} 302 303/** 304 * __setup_offsets() - setup unique offsets ("cookies") for every plane in 305 * every buffer on the queue 306 */ 307static void __setup_offsets(struct vb2_queue *q, unsigned int n) 308{ 309 unsigned int buffer, plane; 310 struct vb2_buffer *vb; 311 unsigned long off; 312 313 if (q->num_buffers) { 314 struct v4l2_plane *p; 315 vb = q->bufs[q->num_buffers - 1]; 316 p = &vb->v4l2_planes[vb->num_planes - 1]; 317 off = PAGE_ALIGN(p->m.mem_offset + p->length); 318 } else { 319 off = 0; 320 } 321 322 for (buffer = q->num_buffers; buffer < q->num_buffers + n; ++buffer) { 323 vb = q->bufs[buffer]; 324 if (!vb) 325 continue; 326 327 for (plane = 0; plane < vb->num_planes; ++plane) { 328 vb->v4l2_planes[plane].m.mem_offset = off; 329 330 dprintk(3, "buffer %d, plane %d offset 0x%08lx\n", 331 buffer, plane, off); 332 333 off += vb->v4l2_planes[plane].length; 334 off = PAGE_ALIGN(off); 335 } 336 } 337} 338 339/** 340 * __vb2_queue_alloc() - allocate videobuf buffer structures and (for MMAP type) 341 * video buffer memory for all buffers/planes on the queue and initializes the 342 * queue 343 * 344 * Returns the number of buffers successfully allocated. 345 */ 346static int __vb2_queue_alloc(struct vb2_queue *q, enum v4l2_memory memory, 347 unsigned int num_buffers, unsigned int num_planes) 348{ 349 unsigned int buffer; 350 struct vb2_buffer *vb; 351 int ret; 352 353 for (buffer = 0; buffer < num_buffers; ++buffer) { 354 /* Allocate videobuf buffer structures */ 355 vb = kzalloc(q->buf_struct_size, GFP_KERNEL); 356 if (!vb) { 357 dprintk(1, "memory alloc for buffer struct failed\n"); 358 break; 359 } 360 361 /* Length stores number of planes for multiplanar buffers */ 362 if (V4L2_TYPE_IS_MULTIPLANAR(q->type)) 363 vb->v4l2_buf.length = num_planes; 364 365 vb->state = VB2_BUF_STATE_DEQUEUED; 366 vb->vb2_queue = q; 367 vb->num_planes = num_planes; 368 vb->v4l2_buf.index = q->num_buffers + buffer; 369 vb->v4l2_buf.type = q->type; 370 vb->v4l2_buf.memory = memory; 371 372 /* Allocate video buffer memory for the MMAP type */ 373 if (memory == V4L2_MEMORY_MMAP) { 374 ret = __vb2_buf_mem_alloc(vb); 375 if (ret) { 376 dprintk(1, "failed allocating memory for " 377 "buffer %d\n", buffer); 378 kfree(vb); 379 break; 380 } 381 /* 382 * Call the driver-provided buffer initialization 383 * callback, if given. An error in initialization 384 * results in queue setup failure. 385 */ 386 ret = call_vb_qop(vb, buf_init, vb); 387 if (ret) { 388 dprintk(1, "buffer %d %p initialization" 389 " failed\n", buffer, vb); 390 __vb2_buf_mem_free(vb); 391 kfree(vb); 392 break; 393 } 394 } 395 396 q->bufs[q->num_buffers + buffer] = vb; 397 } 398 399 __setup_lengths(q, buffer); 400 if (memory == V4L2_MEMORY_MMAP) 401 __setup_offsets(q, buffer); 402 403 dprintk(1, "allocated %d buffers, %d plane(s) each\n", 404 buffer, num_planes); 405 406 return buffer; 407} 408 409/** 410 * __vb2_free_mem() - release all video buffer memory for a given queue 411 */ 412static void __vb2_free_mem(struct vb2_queue *q, unsigned int buffers) 413{ 414 unsigned int buffer; 415 struct vb2_buffer *vb; 416 417 for (buffer = q->num_buffers - buffers; buffer < q->num_buffers; 418 ++buffer) { 419 vb = q->bufs[buffer]; 420 if (!vb) 421 continue; 422 423 /* Free MMAP buffers or release USERPTR buffers */ 424 if (q->memory == V4L2_MEMORY_MMAP) 425 __vb2_buf_mem_free(vb); 426 else if (q->memory == V4L2_MEMORY_DMABUF) 427 __vb2_buf_dmabuf_put(vb); 428 else 429 __vb2_buf_userptr_put(vb); 430 } 431} 432 433/** 434 * __vb2_queue_free() - free buffers at the end of the queue - video memory and 435 * related information, if no buffers are left return the queue to an 436 * uninitialized state. Might be called even if the queue has already been freed. 437 */ 438static int __vb2_queue_free(struct vb2_queue *q, unsigned int buffers) 439{ 440 unsigned int buffer; 441 442 /* 443 * Sanity check: when preparing a buffer the queue lock is released for 444 * a short while (see __buf_prepare for the details), which would allow 445 * a race with a reqbufs which can call this function. Removing the 446 * buffers from underneath __buf_prepare is obviously a bad idea, so we 447 * check if any of the buffers is in the state PREPARING, and if so we 448 * just return -EAGAIN. 449 */ 450 for (buffer = q->num_buffers - buffers; buffer < q->num_buffers; 451 ++buffer) { 452 if (q->bufs[buffer] == NULL) 453 continue; 454 if (q->bufs[buffer]->state == VB2_BUF_STATE_PREPARING) { 455 dprintk(1, "preparing buffers, cannot free\n"); 456 return -EAGAIN; 457 } 458 } 459 460 /* Call driver-provided cleanup function for each buffer, if provided */ 461 for (buffer = q->num_buffers - buffers; buffer < q->num_buffers; 462 ++buffer) { 463 struct vb2_buffer *vb = q->bufs[buffer]; 464 465 if (vb && vb->planes[0].mem_priv) 466 call_void_vb_qop(vb, buf_cleanup, vb); 467 } 468 469 /* Release video buffer memory */ 470 __vb2_free_mem(q, buffers); 471 472#ifdef CONFIG_VIDEO_ADV_DEBUG 473 /* 474 * Check that all the calls were balances during the life-time of this 475 * queue. If not (or if the debug level is 1 or up), then dump the 476 * counters to the kernel log. 477 */ 478 if (q->num_buffers) { 479 bool unbalanced = q->cnt_start_streaming != q->cnt_stop_streaming || 480 q->cnt_wait_prepare != q->cnt_wait_finish; 481 482 if (unbalanced || debug) { 483 pr_info("vb2: counters for queue %p:%s\n", q, 484 unbalanced ? " UNBALANCED!" : ""); 485 pr_info("vb2: setup: %u start_streaming: %u stop_streaming: %u\n", 486 q->cnt_queue_setup, q->cnt_start_streaming, 487 q->cnt_stop_streaming); 488 pr_info("vb2: wait_prepare: %u wait_finish: %u\n", 489 q->cnt_wait_prepare, q->cnt_wait_finish); 490 } 491 q->cnt_queue_setup = 0; 492 q->cnt_wait_prepare = 0; 493 q->cnt_wait_finish = 0; 494 q->cnt_start_streaming = 0; 495 q->cnt_stop_streaming = 0; 496 } 497 for (buffer = 0; buffer < q->num_buffers; ++buffer) { 498 struct vb2_buffer *vb = q->bufs[buffer]; 499 bool unbalanced = vb->cnt_mem_alloc != vb->cnt_mem_put || 500 vb->cnt_mem_prepare != vb->cnt_mem_finish || 501 vb->cnt_mem_get_userptr != vb->cnt_mem_put_userptr || 502 vb->cnt_mem_attach_dmabuf != vb->cnt_mem_detach_dmabuf || 503 vb->cnt_mem_map_dmabuf != vb->cnt_mem_unmap_dmabuf || 504 vb->cnt_buf_queue != vb->cnt_buf_done || 505 vb->cnt_buf_prepare != vb->cnt_buf_finish || 506 vb->cnt_buf_init != vb->cnt_buf_cleanup; 507 508 if (unbalanced || debug) { 509 pr_info("vb2: counters for queue %p, buffer %d:%s\n", 510 q, buffer, unbalanced ? " UNBALANCED!" : ""); 511 pr_info("vb2: buf_init: %u buf_cleanup: %u buf_prepare: %u buf_finish: %u\n", 512 vb->cnt_buf_init, vb->cnt_buf_cleanup, 513 vb->cnt_buf_prepare, vb->cnt_buf_finish); 514 pr_info("vb2: buf_queue: %u buf_done: %u\n", 515 vb->cnt_buf_queue, vb->cnt_buf_done); 516 pr_info("vb2: alloc: %u put: %u prepare: %u finish: %u mmap: %u\n", 517 vb->cnt_mem_alloc, vb->cnt_mem_put, 518 vb->cnt_mem_prepare, vb->cnt_mem_finish, 519 vb->cnt_mem_mmap); 520 pr_info("vb2: get_userptr: %u put_userptr: %u\n", 521 vb->cnt_mem_get_userptr, vb->cnt_mem_put_userptr); 522 pr_info("vb2: attach_dmabuf: %u detach_dmabuf: %u map_dmabuf: %u unmap_dmabuf: %u\n", 523 vb->cnt_mem_attach_dmabuf, vb->cnt_mem_detach_dmabuf, 524 vb->cnt_mem_map_dmabuf, vb->cnt_mem_unmap_dmabuf); 525 pr_info("vb2: get_dmabuf: %u num_users: %u vaddr: %u cookie: %u\n", 526 vb->cnt_mem_get_dmabuf, 527 vb->cnt_mem_num_users, 528 vb->cnt_mem_vaddr, 529 vb->cnt_mem_cookie); 530 } 531 } 532#endif 533 534 /* Free videobuf buffers */ 535 for (buffer = q->num_buffers - buffers; buffer < q->num_buffers; 536 ++buffer) { 537 kfree(q->bufs[buffer]); 538 q->bufs[buffer] = NULL; 539 } 540 541 q->num_buffers -= buffers; 542 if (!q->num_buffers) { 543 q->memory = 0; 544 INIT_LIST_HEAD(&q->queued_list); 545 } 546 return 0; 547} 548 549/** 550 * __verify_planes_array() - verify that the planes array passed in struct 551 * v4l2_buffer from userspace can be safely used 552 */ 553static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer *b) 554{ 555 if (!V4L2_TYPE_IS_MULTIPLANAR(b->type)) 556 return 0; 557 558 /* Is memory for copying plane information present? */ 559 if (NULL == b->m.planes) { 560 dprintk(1, "multi-planar buffer passed but " 561 "planes array not provided\n"); 562 return -EINVAL; 563 } 564 565 if (b->length < vb->num_planes || b->length > VIDEO_MAX_PLANES) { 566 dprintk(1, "incorrect planes array length, " 567 "expected %d, got %d\n", vb->num_planes, b->length); 568 return -EINVAL; 569 } 570 571 return 0; 572} 573 574/** 575 * __verify_length() - Verify that the bytesused value for each plane fits in 576 * the plane length and that the data offset doesn't exceed the bytesused value. 577 */ 578static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b) 579{ 580 unsigned int length; 581 unsigned int bytesused; 582 unsigned int plane; 583 584 if (!V4L2_TYPE_IS_OUTPUT(b->type)) 585 return 0; 586 587 if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) { 588 for (plane = 0; plane < vb->num_planes; ++plane) { 589 length = (b->memory == V4L2_MEMORY_USERPTR || 590 b->memory == V4L2_MEMORY_DMABUF) 591 ? b->m.planes[plane].length 592 : vb->v4l2_planes[plane].length; 593 bytesused = b->m.planes[plane].bytesused 594 ? b->m.planes[plane].bytesused : length; 595 596 if (b->m.planes[plane].bytesused > length) 597 return -EINVAL; 598 599 if (b->m.planes[plane].data_offset > 0 && 600 b->m.planes[plane].data_offset >= bytesused) 601 return -EINVAL; 602 } 603 } else { 604 length = (b->memory == V4L2_MEMORY_USERPTR) 605 ? b->length : vb->v4l2_planes[0].length; 606 bytesused = b->bytesused ? b->bytesused : length; 607 608 if (b->bytesused > length) 609 return -EINVAL; 610 } 611 612 return 0; 613} 614 615/** 616 * __buffer_in_use() - return true if the buffer is in use and 617 * the queue cannot be freed (by the means of REQBUFS(0)) call 618 */ 619static bool __buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb) 620{ 621 unsigned int plane; 622 for (plane = 0; plane < vb->num_planes; ++plane) { 623 void *mem_priv = vb->planes[plane].mem_priv; 624 /* 625 * If num_users() has not been provided, call_memop 626 * will return 0, apparently nobody cares about this 627 * case anyway. If num_users() returns more than 1, 628 * we are not the only user of the plane's memory. 629 */ 630 if (mem_priv && call_memop(vb, num_users, mem_priv) > 1) 631 return true; 632 } 633 return false; 634} 635 636/** 637 * __buffers_in_use() - return true if any buffers on the queue are in use and 638 * the queue cannot be freed (by the means of REQBUFS(0)) call 639 */ 640static bool __buffers_in_use(struct vb2_queue *q) 641{ 642 unsigned int buffer; 643 for (buffer = 0; buffer < q->num_buffers; ++buffer) { 644 if (__buffer_in_use(q, q->bufs[buffer])) 645 return true; 646 } 647 return false; 648} 649 650/** 651 * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be 652 * returned to userspace 653 */ 654static void __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b) 655{ 656 struct vb2_queue *q = vb->vb2_queue; 657 658 /* Copy back data such as timestamp, flags, etc. */ 659 memcpy(b, &vb->v4l2_buf, offsetof(struct v4l2_buffer, m)); 660 b->reserved2 = vb->v4l2_buf.reserved2; 661 b->reserved = vb->v4l2_buf.reserved; 662 663 if (V4L2_TYPE_IS_MULTIPLANAR(q->type)) { 664 /* 665 * Fill in plane-related data if userspace provided an array 666 * for it. The caller has already verified memory and size. 667 */ 668 b->length = vb->num_planes; 669 memcpy(b->m.planes, vb->v4l2_planes, 670 b->length * sizeof(struct v4l2_plane)); 671 } else { 672 /* 673 * We use length and offset in v4l2_planes array even for 674 * single-planar buffers, but userspace does not. 675 */ 676 b->length = vb->v4l2_planes[0].length; 677 b->bytesused = vb->v4l2_planes[0].bytesused; 678 if (q->memory == V4L2_MEMORY_MMAP) 679 b->m.offset = vb->v4l2_planes[0].m.mem_offset; 680 else if (q->memory == V4L2_MEMORY_USERPTR) 681 b->m.userptr = vb->v4l2_planes[0].m.userptr; 682 else if (q->memory == V4L2_MEMORY_DMABUF) 683 b->m.fd = vb->v4l2_planes[0].m.fd; 684 } 685 686 /* 687 * Clear any buffer state related flags. 688 */ 689 b->flags &= ~V4L2_BUFFER_MASK_FLAGS; 690 b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK; 691 if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) != 692 V4L2_BUF_FLAG_TIMESTAMP_COPY) { 693 /* 694 * For non-COPY timestamps, drop timestamp source bits 695 * and obtain the timestamp source from the queue. 696 */ 697 b->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; 698 b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; 699 } 700 701 switch (vb->state) { 702 case VB2_BUF_STATE_QUEUED: 703 case VB2_BUF_STATE_ACTIVE: 704 b->flags |= V4L2_BUF_FLAG_QUEUED; 705 break; 706 case VB2_BUF_STATE_ERROR: 707 b->flags |= V4L2_BUF_FLAG_ERROR; 708 /* fall through */ 709 case VB2_BUF_STATE_DONE: 710 b->flags |= V4L2_BUF_FLAG_DONE; 711 break; 712 case VB2_BUF_STATE_PREPARED: 713 b->flags |= V4L2_BUF_FLAG_PREPARED; 714 break; 715 case VB2_BUF_STATE_PREPARING: 716 case VB2_BUF_STATE_DEQUEUED: 717 /* nothing */ 718 break; 719 } 720 721 if (__buffer_in_use(q, vb)) 722 b->flags |= V4L2_BUF_FLAG_MAPPED; 723} 724 725/** 726 * vb2_querybuf() - query video buffer information 727 * @q: videobuf queue 728 * @b: buffer struct passed from userspace to vidioc_querybuf handler 729 * in driver 730 * 731 * Should be called from vidioc_querybuf ioctl handler in driver. 732 * This function will verify the passed v4l2_buffer structure and fill the 733 * relevant information for the userspace. 734 * 735 * The return values from this function are intended to be directly returned 736 * from vidioc_querybuf handler in driver. 737 */ 738int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b) 739{ 740 struct vb2_buffer *vb; 741 int ret; 742 743 if (b->type != q->type) { 744 dprintk(1, "wrong buffer type\n"); 745 return -EINVAL; 746 } 747 748 if (b->index >= q->num_buffers) { 749 dprintk(1, "buffer index out of range\n"); 750 return -EINVAL; 751 } 752 vb = q->bufs[b->index]; 753 ret = __verify_planes_array(vb, b); 754 if (!ret) 755 __fill_v4l2_buffer(vb, b); 756 return ret; 757} 758EXPORT_SYMBOL(vb2_querybuf); 759 760/** 761 * __verify_userptr_ops() - verify that all memory operations required for 762 * USERPTR queue type have been provided 763 */ 764static int __verify_userptr_ops(struct vb2_queue *q) 765{ 766 if (!(q->io_modes & VB2_USERPTR) || !q->mem_ops->get_userptr || 767 !q->mem_ops->put_userptr) 768 return -EINVAL; 769 770 return 0; 771} 772 773/** 774 * __verify_mmap_ops() - verify that all memory operations required for 775 * MMAP queue type have been provided 776 */ 777static int __verify_mmap_ops(struct vb2_queue *q) 778{ 779 if (!(q->io_modes & VB2_MMAP) || !q->mem_ops->alloc || 780 !q->mem_ops->put || !q->mem_ops->mmap) 781 return -EINVAL; 782 783 return 0; 784} 785 786/** 787 * __verify_dmabuf_ops() - verify that all memory operations required for 788 * DMABUF queue type have been provided 789 */ 790static int __verify_dmabuf_ops(struct vb2_queue *q) 791{ 792 if (!(q->io_modes & VB2_DMABUF) || !q->mem_ops->attach_dmabuf || 793 !q->mem_ops->detach_dmabuf || !q->mem_ops->map_dmabuf || 794 !q->mem_ops->unmap_dmabuf) 795 return -EINVAL; 796 797 return 0; 798} 799 800/** 801 * __verify_memory_type() - Check whether the memory type and buffer type 802 * passed to a buffer operation are compatible with the queue. 803 */ 804static int __verify_memory_type(struct vb2_queue *q, 805 enum v4l2_memory memory, enum v4l2_buf_type type) 806{ 807 if (memory != V4L2_MEMORY_MMAP && memory != V4L2_MEMORY_USERPTR && 808 memory != V4L2_MEMORY_DMABUF) { 809 dprintk(1, "unsupported memory type\n"); 810 return -EINVAL; 811 } 812 813 if (type != q->type) { 814 dprintk(1, "requested type is incorrect\n"); 815 return -EINVAL; 816 } 817 818 /* 819 * Make sure all the required memory ops for given memory type 820 * are available. 821 */ 822 if (memory == V4L2_MEMORY_MMAP && __verify_mmap_ops(q)) { 823 dprintk(1, "MMAP for current setup unsupported\n"); 824 return -EINVAL; 825 } 826 827 if (memory == V4L2_MEMORY_USERPTR && __verify_userptr_ops(q)) { 828 dprintk(1, "USERPTR for current setup unsupported\n"); 829 return -EINVAL; 830 } 831 832 if (memory == V4L2_MEMORY_DMABUF && __verify_dmabuf_ops(q)) { 833 dprintk(1, "DMABUF for current setup unsupported\n"); 834 return -EINVAL; 835 } 836 837 /* 838 * Place the busy tests at the end: -EBUSY can be ignored when 839 * create_bufs is called with count == 0, but count == 0 should still 840 * do the memory and type validation. 841 */ 842 if (vb2_fileio_is_active(q)) { 843 dprintk(1, "file io in progress\n"); 844 return -EBUSY; 845 } 846 return 0; 847} 848 849/** 850 * __reqbufs() - Initiate streaming 851 * @q: videobuf2 queue 852 * @req: struct passed from userspace to vidioc_reqbufs handler in driver 853 * 854 * Should be called from vidioc_reqbufs ioctl handler of a driver. 855 * This function: 856 * 1) verifies streaming parameters passed from the userspace, 857 * 2) sets up the queue, 858 * 3) negotiates number of buffers and planes per buffer with the driver 859 * to be used during streaming, 860 * 4) allocates internal buffer structures (struct vb2_buffer), according to 861 * the agreed parameters, 862 * 5) for MMAP memory type, allocates actual video memory, using the 863 * memory handling/allocation routines provided during queue initialization 864 * 865 * If req->count is 0, all the memory will be freed instead. 866 * If the queue has been allocated previously (by a previous vb2_reqbufs) call 867 * and the queue is not busy, memory will be reallocated. 868 * 869 * The return values from this function are intended to be directly returned 870 * from vidioc_reqbufs handler in driver. 871 */ 872static int __reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req) 873{ 874 unsigned int num_buffers, allocated_buffers, num_planes = 0; 875 int ret; 876 877 if (q->streaming) { 878 dprintk(1, "streaming active\n"); 879 return -EBUSY; 880 } 881 882 if (req->count == 0 || q->num_buffers != 0 || q->memory != req->memory) { 883 /* 884 * We already have buffers allocated, so first check if they 885 * are not in use and can be freed. 886 */ 887 mutex_lock(&q->mmap_lock); 888 if (q->memory == V4L2_MEMORY_MMAP && __buffers_in_use(q)) { 889 mutex_unlock(&q->mmap_lock); 890 dprintk(1, "memory in use, cannot free\n"); 891 return -EBUSY; 892 } 893 894 /* 895 * Call queue_cancel to clean up any buffers in the PREPARED or 896 * QUEUED state which is possible if buffers were prepared or 897 * queued without ever calling STREAMON. 898 */ 899 __vb2_queue_cancel(q); 900 ret = __vb2_queue_free(q, q->num_buffers); 901 mutex_unlock(&q->mmap_lock); 902 if (ret) 903 return ret; 904 905 /* 906 * In case of REQBUFS(0) return immediately without calling 907 * driver's queue_setup() callback and allocating resources. 908 */ 909 if (req->count == 0) 910 return 0; 911 } 912 913 /* 914 * Make sure the requested values and current defaults are sane. 915 */ 916 num_buffers = min_t(unsigned int, req->count, VIDEO_MAX_FRAME); 917 num_buffers = max_t(unsigned int, num_buffers, q->min_buffers_needed); 918 memset(q->plane_sizes, 0, sizeof(q->plane_sizes)); 919 memset(q->alloc_ctx, 0, sizeof(q->alloc_ctx)); 920 q->memory = req->memory; 921 922 /* 923 * Ask the driver how many buffers and planes per buffer it requires. 924 * Driver also sets the size and allocator context for each plane. 925 */ 926 ret = call_qop(q, queue_setup, q, NULL, &num_buffers, &num_planes, 927 q->plane_sizes, q->alloc_ctx); 928 if (ret) 929 return ret; 930 931 /* Finally, allocate buffers and video memory */ 932 allocated_buffers = __vb2_queue_alloc(q, req->memory, num_buffers, num_planes); 933 if (allocated_buffers == 0) { 934 dprintk(1, "memory allocation failed\n"); 935 return -ENOMEM; 936 } 937 938 /* 939 * There is no point in continuing if we can't allocate the minimum 940 * number of buffers needed by this vb2_queue. 941 */ 942 if (allocated_buffers < q->min_buffers_needed) 943 ret = -ENOMEM; 944 945 /* 946 * Check if driver can handle the allocated number of buffers. 947 */ 948 if (!ret && allocated_buffers < num_buffers) { 949 num_buffers = allocated_buffers; 950 951 ret = call_qop(q, queue_setup, q, NULL, &num_buffers, 952 &num_planes, q->plane_sizes, q->alloc_ctx); 953 954 if (!ret && allocated_buffers < num_buffers) 955 ret = -ENOMEM; 956 957 /* 958 * Either the driver has accepted a smaller number of buffers, 959 * or .queue_setup() returned an error 960 */ 961 } 962 963 mutex_lock(&q->mmap_lock); 964 q->num_buffers = allocated_buffers; 965 966 if (ret < 0) { 967 /* 968 * Note: __vb2_queue_free() will subtract 'allocated_buffers' 969 * from q->num_buffers. 970 */ 971 __vb2_queue_free(q, allocated_buffers); 972 mutex_unlock(&q->mmap_lock); 973 return ret; 974 } 975 mutex_unlock(&q->mmap_lock); 976 977 /* 978 * Return the number of successfully allocated buffers 979 * to the userspace. 980 */ 981 req->count = allocated_buffers; 982 q->waiting_for_buffers = !V4L2_TYPE_IS_OUTPUT(q->type); 983 984 return 0; 985} 986 987/** 988 * vb2_reqbufs() - Wrapper for __reqbufs() that also verifies the memory and 989 * type values. 990 * @q: videobuf2 queue 991 * @req: struct passed from userspace to vidioc_reqbufs handler in driver 992 */ 993int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req) 994{ 995 int ret = __verify_memory_type(q, req->memory, req->type); 996 997 return ret ? ret : __reqbufs(q, req); 998} 999EXPORT_SYMBOL_GPL(vb2_reqbufs); 1000 1001/** 1002 * __create_bufs() - Allocate buffers and any required auxiliary structs 1003 * @q: videobuf2 queue 1004 * @create: creation parameters, passed from userspace to vidioc_create_bufs 1005 * handler in driver 1006 * 1007 * Should be called from vidioc_create_bufs ioctl handler of a driver. 1008 * This function: 1009 * 1) verifies parameter sanity 1010 * 2) calls the .queue_setup() queue operation 1011 * 3) performs any necessary memory allocations 1012 * 1013 * The return values from this function are intended to be directly returned 1014 * from vidioc_create_bufs handler in driver. 1015 */ 1016static int __create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create) 1017{ 1018 unsigned int num_planes = 0, num_buffers, allocated_buffers; 1019 int ret; 1020 1021 if (q->num_buffers == VIDEO_MAX_FRAME) { 1022 dprintk(1, "maximum number of buffers already allocated\n"); 1023 return -ENOBUFS; 1024 } 1025 1026 if (!q->num_buffers) { 1027 memset(q->plane_sizes, 0, sizeof(q->plane_sizes)); 1028 memset(q->alloc_ctx, 0, sizeof(q->alloc_ctx)); 1029 q->memory = create->memory; 1030 q->waiting_for_buffers = !V4L2_TYPE_IS_OUTPUT(q->type); 1031 } 1032 1033 num_buffers = min(create->count, VIDEO_MAX_FRAME - q->num_buffers); 1034 1035 /* 1036 * Ask the driver, whether the requested number of buffers, planes per 1037 * buffer and their sizes are acceptable 1038 */ 1039 ret = call_qop(q, queue_setup, q, &create->format, &num_buffers, 1040 &num_planes, q->plane_sizes, q->alloc_ctx); 1041 if (ret) 1042 return ret; 1043 1044 /* Finally, allocate buffers and video memory */ 1045 allocated_buffers = __vb2_queue_alloc(q, create->memory, num_buffers, 1046 num_planes); 1047 if (allocated_buffers == 0) { 1048 dprintk(1, "memory allocation failed\n"); 1049 return -ENOMEM; 1050 } 1051 1052 /* 1053 * Check if driver can handle the so far allocated number of buffers. 1054 */ 1055 if (allocated_buffers < num_buffers) { 1056 num_buffers = allocated_buffers; 1057 1058 /* 1059 * q->num_buffers contains the total number of buffers, that the 1060 * queue driver has set up 1061 */ 1062 ret = call_qop(q, queue_setup, q, &create->format, &num_buffers, 1063 &num_planes, q->plane_sizes, q->alloc_ctx); 1064 1065 if (!ret && allocated_buffers < num_buffers) 1066 ret = -ENOMEM; 1067 1068 /* 1069 * Either the driver has accepted a smaller number of buffers, 1070 * or .queue_setup() returned an error 1071 */ 1072 } 1073 1074 mutex_lock(&q->mmap_lock); 1075 q->num_buffers += allocated_buffers; 1076 1077 if (ret < 0) { 1078 /* 1079 * Note: __vb2_queue_free() will subtract 'allocated_buffers' 1080 * from q->num_buffers. 1081 */ 1082 __vb2_queue_free(q, allocated_buffers); 1083 mutex_unlock(&q->mmap_lock); 1084 return -ENOMEM; 1085 } 1086 mutex_unlock(&q->mmap_lock); 1087 1088 /* 1089 * Return the number of successfully allocated buffers 1090 * to the userspace. 1091 */ 1092 create->count = allocated_buffers; 1093 1094 return 0; 1095} 1096 1097/** 1098 * vb2_create_bufs() - Wrapper for __create_bufs() that also verifies the 1099 * memory and type values. 1100 * @q: videobuf2 queue 1101 * @create: creation parameters, passed from userspace to vidioc_create_bufs 1102 * handler in driver 1103 */ 1104int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create) 1105{ 1106 int ret = __verify_memory_type(q, create->memory, create->format.type); 1107 1108 create->index = q->num_buffers; 1109 if (create->count == 0) 1110 return ret != -EBUSY ? ret : 0; 1111 return ret ? ret : __create_bufs(q, create); 1112} 1113EXPORT_SYMBOL_GPL(vb2_create_bufs); 1114 1115/** 1116 * vb2_plane_vaddr() - Return a kernel virtual address of a given plane 1117 * @vb: vb2_buffer to which the plane in question belongs to 1118 * @plane_no: plane number for which the address is to be returned 1119 * 1120 * This function returns a kernel virtual address of a given plane if 1121 * such a mapping exist, NULL otherwise. 1122 */ 1123void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no) 1124{ 1125 if (plane_no > vb->num_planes || !vb->planes[plane_no].mem_priv) 1126 return NULL; 1127 1128 return call_ptr_memop(vb, vaddr, vb->planes[plane_no].mem_priv); 1129 1130} 1131EXPORT_SYMBOL_GPL(vb2_plane_vaddr); 1132 1133/** 1134 * vb2_plane_cookie() - Return allocator specific cookie for the given plane 1135 * @vb: vb2_buffer to which the plane in question belongs to 1136 * @plane_no: plane number for which the cookie is to be returned 1137 * 1138 * This function returns an allocator specific cookie for a given plane if 1139 * available, NULL otherwise. The allocator should provide some simple static 1140 * inline function, which would convert this cookie to the allocator specific 1141 * type that can be used directly by the driver to access the buffer. This can 1142 * be for example physical address, pointer to scatter list or IOMMU mapping. 1143 */ 1144void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no) 1145{ 1146 if (plane_no >= vb->num_planes || !vb->planes[plane_no].mem_priv) 1147 return NULL; 1148 1149 return call_ptr_memop(vb, cookie, vb->planes[plane_no].mem_priv); 1150} 1151EXPORT_SYMBOL_GPL(vb2_plane_cookie); 1152 1153/** 1154 * vb2_buffer_done() - inform videobuf that an operation on a buffer is finished 1155 * @vb: vb2_buffer returned from the driver 1156 * @state: either VB2_BUF_STATE_DONE if the operation finished successfully 1157 * or VB2_BUF_STATE_ERROR if the operation finished with an error. 1158 * If start_streaming fails then it should return buffers with state 1159 * VB2_BUF_STATE_QUEUED to put them back into the queue. 1160 * 1161 * This function should be called by the driver after a hardware operation on 1162 * a buffer is finished and the buffer may be returned to userspace. The driver 1163 * cannot use this buffer anymore until it is queued back to it by videobuf 1164 * by the means of buf_queue callback. Only buffers previously queued to the 1165 * driver by buf_queue can be passed to this function. 1166 * 1167 * While streaming a buffer can only be returned in state DONE or ERROR. 1168 * The start_streaming op can also return them in case the DMA engine cannot 1169 * be started for some reason. In that case the buffers should be returned with 1170 * state QUEUED. 1171 */ 1172void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state) 1173{ 1174 struct vb2_queue *q = vb->vb2_queue; 1175 unsigned long flags; 1176 unsigned int plane; 1177 1178 if (WARN_ON(vb->state != VB2_BUF_STATE_ACTIVE)) 1179 return; 1180 1181 if (WARN_ON(state != VB2_BUF_STATE_DONE && 1182 state != VB2_BUF_STATE_ERROR && 1183 state != VB2_BUF_STATE_QUEUED)) 1184 state = VB2_BUF_STATE_ERROR; 1185 1186#ifdef CONFIG_VIDEO_ADV_DEBUG 1187 /* 1188 * Although this is not a callback, it still does have to balance 1189 * with the buf_queue op. So update this counter manually. 1190 */ 1191 vb->cnt_buf_done++; 1192#endif 1193 dprintk(4, "done processing on buffer %d, state: %d\n", 1194 vb->v4l2_buf.index, state); 1195 1196 /* sync buffers */ 1197 for (plane = 0; plane < vb->num_planes; ++plane) 1198 call_void_memop(vb, finish, vb->planes[plane].mem_priv); 1199 1200 /* Add the buffer to the done buffers list */ 1201 spin_lock_irqsave(&q->done_lock, flags); 1202 vb->state = state; 1203 if (state != VB2_BUF_STATE_QUEUED) 1204 list_add_tail(&vb->done_entry, &q->done_list); 1205 atomic_dec(&q->owned_by_drv_count); 1206 spin_unlock_irqrestore(&q->done_lock, flags); 1207 1208 if (state == VB2_BUF_STATE_QUEUED) 1209 return; 1210 1211 /* Inform any processes that may be waiting for buffers */ 1212 wake_up(&q->done_wq); 1213} 1214EXPORT_SYMBOL_GPL(vb2_buffer_done); 1215 1216/** 1217 * vb2_discard_done() - discard all buffers marked as DONE 1218 * @q: videobuf2 queue 1219 * 1220 * This function is intended to be used with suspend/resume operations. It 1221 * discards all 'done' buffers as they would be too old to be requested after 1222 * resume. 1223 * 1224 * Drivers must stop the hardware and synchronize with interrupt handlers and/or 1225 * delayed works before calling this function to make sure no buffer will be 1226 * touched by the driver and/or hardware. 1227 */ 1228void vb2_discard_done(struct vb2_queue *q) 1229{ 1230 struct vb2_buffer *vb; 1231 unsigned long flags; 1232 1233 spin_lock_irqsave(&q->done_lock, flags); 1234 list_for_each_entry(vb, &q->done_list, done_entry) 1235 vb->state = VB2_BUF_STATE_ERROR; 1236 spin_unlock_irqrestore(&q->done_lock, flags); 1237} 1238EXPORT_SYMBOL_GPL(vb2_discard_done); 1239 1240static void vb2_warn_zero_bytesused(struct vb2_buffer *vb) 1241{ 1242 static bool __check_once __read_mostly; 1243 1244 if (__check_once) 1245 return; 1246 1247 __check_once = true; 1248 __WARN(); 1249 1250 pr_warn_once("use of bytesused == 0 is deprecated and will be removed in the future,\n"); 1251 if (vb->vb2_queue->allow_zero_bytesused) 1252 pr_warn_once("use VIDIOC_DECODER_CMD(V4L2_DEC_CMD_STOP) instead.\n"); 1253 else 1254 pr_warn_once("use the actual size instead.\n"); 1255} 1256 1257/** 1258 * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a 1259 * v4l2_buffer by the userspace. The caller has already verified that struct 1260 * v4l2_buffer has a valid number of planes. 1261 */ 1262static void __fill_vb2_buffer(struct vb2_buffer *vb, const struct v4l2_buffer *b, 1263 struct v4l2_plane *v4l2_planes) 1264{ 1265 unsigned int plane; 1266 1267 if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) { 1268 if (b->memory == V4L2_MEMORY_USERPTR) { 1269 for (plane = 0; plane < vb->num_planes; ++plane) { 1270 v4l2_planes[plane].m.userptr = 1271 b->m.planes[plane].m.userptr; 1272 v4l2_planes[plane].length = 1273 b->m.planes[plane].length; 1274 } 1275 } 1276 if (b->memory == V4L2_MEMORY_DMABUF) { 1277 for (plane = 0; plane < vb->num_planes; ++plane) { 1278 v4l2_planes[plane].m.fd = 1279 b->m.planes[plane].m.fd; 1280 v4l2_planes[plane].length = 1281 b->m.planes[plane].length; 1282 } 1283 } 1284 1285 /* Fill in driver-provided information for OUTPUT types */ 1286 if (V4L2_TYPE_IS_OUTPUT(b->type)) { 1287 /* 1288 * Will have to go up to b->length when API starts 1289 * accepting variable number of planes. 1290 * 1291 * If bytesused == 0 for the output buffer, then fall 1292 * back to the full buffer size. In that case 1293 * userspace clearly never bothered to set it and 1294 * it's a safe assumption that they really meant to 1295 * use the full plane sizes. 1296 * 1297 * Some drivers, e.g. old codec drivers, use bytesused == 0 1298 * as a way to indicate that streaming is finished. 1299 * In that case, the driver should use the 1300 * allow_zero_bytesused flag to keep old userspace 1301 * applications working. 1302 */ 1303 for (plane = 0; plane < vb->num_planes; ++plane) { 1304 struct v4l2_plane *pdst = &v4l2_planes[plane]; 1305 struct v4l2_plane *psrc = &b->m.planes[plane]; 1306 1307 if (psrc->bytesused == 0) 1308 vb2_warn_zero_bytesused(vb); 1309 1310 if (vb->vb2_queue->allow_zero_bytesused) 1311 pdst->bytesused = psrc->bytesused; 1312 else 1313 pdst->bytesused = psrc->bytesused ? 1314 psrc->bytesused : pdst->length; 1315 pdst->data_offset = psrc->data_offset; 1316 } 1317 } 1318 } else { 1319 /* 1320 * Single-planar buffers do not use planes array, 1321 * so fill in relevant v4l2_buffer struct fields instead. 1322 * In videobuf we use our internal V4l2_planes struct for 1323 * single-planar buffers as well, for simplicity. 1324 * 1325 * If bytesused == 0 for the output buffer, then fall back 1326 * to the full buffer size as that's a sensible default. 1327 * 1328 * Some drivers, e.g. old codec drivers, use bytesused == 0 as 1329 * a way to indicate that streaming is finished. In that case, 1330 * the driver should use the allow_zero_bytesused flag to keep 1331 * old userspace applications working. 1332 */ 1333 if (b->memory == V4L2_MEMORY_USERPTR) { 1334 v4l2_planes[0].m.userptr = b->m.userptr; 1335 v4l2_planes[0].length = b->length; 1336 } 1337 1338 if (b->memory == V4L2_MEMORY_DMABUF) { 1339 v4l2_planes[0].m.fd = b->m.fd; 1340 v4l2_planes[0].length = b->length; 1341 } 1342 1343 if (V4L2_TYPE_IS_OUTPUT(b->type)) { 1344 if (b->bytesused == 0) 1345 vb2_warn_zero_bytesused(vb); 1346 1347 if (vb->vb2_queue->allow_zero_bytesused) 1348 v4l2_planes[0].bytesused = b->bytesused; 1349 else 1350 v4l2_planes[0].bytesused = b->bytesused ? 1351 b->bytesused : v4l2_planes[0].length; 1352 } else 1353 v4l2_planes[0].bytesused = 0; 1354 1355 } 1356 1357 /* Zero flags that the vb2 core handles */ 1358 vb->v4l2_buf.flags = b->flags & ~V4L2_BUFFER_MASK_FLAGS; 1359 if ((vb->vb2_queue->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) != 1360 V4L2_BUF_FLAG_TIMESTAMP_COPY || !V4L2_TYPE_IS_OUTPUT(b->type)) { 1361 /* 1362 * Non-COPY timestamps and non-OUTPUT queues will get 1363 * their timestamp and timestamp source flags from the 1364 * queue. 1365 */ 1366 vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; 1367 } 1368 1369 if (V4L2_TYPE_IS_OUTPUT(b->type)) { 1370 /* 1371 * For output buffers mask out the timecode flag: 1372 * this will be handled later in vb2_internal_qbuf(). 1373 * The 'field' is valid metadata for this output buffer 1374 * and so that needs to be copied here. 1375 */ 1376 vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TIMECODE; 1377 vb->v4l2_buf.field = b->field; 1378 } else { 1379 /* Zero any output buffer flags as this is a capture buffer */ 1380 vb->v4l2_buf.flags &= ~V4L2_BUFFER_OUT_FLAGS; 1381 } 1382} 1383 1384/** 1385 * __qbuf_mmap() - handle qbuf of an MMAP buffer 1386 */ 1387static int __qbuf_mmap(struct vb2_buffer *vb, const struct v4l2_buffer *b) 1388{ 1389 __fill_vb2_buffer(vb, b, vb->v4l2_planes); 1390 return call_vb_qop(vb, buf_prepare, vb); 1391} 1392 1393/** 1394 * __qbuf_userptr() - handle qbuf of a USERPTR buffer 1395 */ 1396static int __qbuf_userptr(struct vb2_buffer *vb, const struct v4l2_buffer *b) 1397{ 1398 struct v4l2_plane planes[VIDEO_MAX_PLANES]; 1399 struct vb2_queue *q = vb->vb2_queue; 1400 void *mem_priv; 1401 unsigned int plane; 1402 int ret; 1403 enum dma_data_direction dma_dir = 1404 V4L2_TYPE_IS_OUTPUT(q->type) ? DMA_TO_DEVICE : DMA_FROM_DEVICE; 1405 bool reacquired = vb->planes[0].mem_priv == NULL; 1406 1407 memset(planes, 0, sizeof(planes[0]) * vb->num_planes); 1408 /* Copy relevant information provided by the userspace */ 1409 __fill_vb2_buffer(vb, b, planes); 1410 1411 for (plane = 0; plane < vb->num_planes; ++plane) { 1412 /* Skip the plane if already verified */ 1413 if (vb->v4l2_planes[plane].m.userptr && 1414 vb->v4l2_planes[plane].m.userptr == planes[plane].m.userptr 1415 && vb->v4l2_planes[plane].length == planes[plane].length) 1416 continue; 1417 1418 dprintk(3, "userspace address for plane %d changed, " 1419 "reacquiring memory\n", plane); 1420 1421 /* Check if the provided plane buffer is large enough */ 1422 if (planes[plane].length < q->plane_sizes[plane]) { 1423 dprintk(1, "provided buffer size %u is less than " 1424 "setup size %u for plane %d\n", 1425 planes[plane].length, 1426 q->plane_sizes[plane], plane); 1427 ret = -EINVAL; 1428 goto err; 1429 } 1430 1431 /* Release previously acquired memory if present */ 1432 if (vb->planes[plane].mem_priv) { 1433 if (!reacquired) { 1434 reacquired = true; 1435 call_void_vb_qop(vb, buf_cleanup, vb); 1436 } 1437 call_void_memop(vb, put_userptr, vb->planes[plane].mem_priv); 1438 } 1439 1440 vb->planes[plane].mem_priv = NULL; 1441 memset(&vb->v4l2_planes[plane], 0, sizeof(struct v4l2_plane)); 1442 1443 /* Acquire each plane's memory */ 1444 mem_priv = call_ptr_memop(vb, get_userptr, q->alloc_ctx[plane], 1445 planes[plane].m.userptr, 1446 planes[plane].length, dma_dir); 1447 if (IS_ERR_OR_NULL(mem_priv)) { 1448 dprintk(1, "failed acquiring userspace " 1449 "memory for plane %d\n", plane); 1450 ret = mem_priv ? PTR_ERR(mem_priv) : -EINVAL; 1451 goto err; 1452 } 1453 vb->planes[plane].mem_priv = mem_priv; 1454 } 1455 1456 /* 1457 * Now that everything is in order, copy relevant information 1458 * provided by userspace. 1459 */ 1460 for (plane = 0; plane < vb->num_planes; ++plane) 1461 vb->v4l2_planes[plane] = planes[plane]; 1462 1463 if (reacquired) { 1464 /* 1465 * One or more planes changed, so we must call buf_init to do 1466 * the driver-specific initialization on the newly acquired 1467 * buffer, if provided. 1468 */ 1469 ret = call_vb_qop(vb, buf_init, vb); 1470 if (ret) { 1471 dprintk(1, "buffer initialization failed\n"); 1472 goto err; 1473 } 1474 } 1475 1476 ret = call_vb_qop(vb, buf_prepare, vb); 1477 if (ret) { 1478 dprintk(1, "buffer preparation failed\n"); 1479 call_void_vb_qop(vb, buf_cleanup, vb); 1480 goto err; 1481 } 1482 1483 return 0; 1484err: 1485 /* In case of errors, release planes that were already acquired */ 1486 for (plane = 0; plane < vb->num_planes; ++plane) { 1487 if (vb->planes[plane].mem_priv) 1488 call_void_memop(vb, put_userptr, vb->planes[plane].mem_priv); 1489 vb->planes[plane].mem_priv = NULL; 1490 vb->v4l2_planes[plane].m.userptr = 0; 1491 vb->v4l2_planes[plane].length = 0; 1492 } 1493 1494 return ret; 1495} 1496 1497/** 1498 * __qbuf_dmabuf() - handle qbuf of a DMABUF buffer 1499 */ 1500static int __qbuf_dmabuf(struct vb2_buffer *vb, const struct v4l2_buffer *b) 1501{ 1502 struct v4l2_plane planes[VIDEO_MAX_PLANES]; 1503 struct vb2_queue *q = vb->vb2_queue; 1504 void *mem_priv; 1505 unsigned int plane; 1506 int ret; 1507 enum dma_data_direction dma_dir = 1508 V4L2_TYPE_IS_OUTPUT(q->type) ? DMA_TO_DEVICE : DMA_FROM_DEVICE; 1509 bool reacquired = vb->planes[0].mem_priv == NULL; 1510 1511 memset(planes, 0, sizeof(planes[0]) * vb->num_planes); 1512 /* Copy relevant information provided by the userspace */ 1513 __fill_vb2_buffer(vb, b, planes); 1514 1515 for (plane = 0; plane < vb->num_planes; ++plane) { 1516 struct dma_buf *dbuf = dma_buf_get(planes[plane].m.fd); 1517 1518 if (IS_ERR_OR_NULL(dbuf)) { 1519 dprintk(1, "invalid dmabuf fd for plane %d\n", 1520 plane); 1521 ret = -EINVAL; 1522 goto err; 1523 } 1524 1525 /* use DMABUF size if length is not provided */ 1526 if (planes[plane].length == 0) 1527 planes[plane].length = dbuf->size; 1528 1529 if (planes[plane].length < q->plane_sizes[plane]) { 1530 dprintk(1, "invalid dmabuf length for plane %d\n", 1531 plane); 1532 ret = -EINVAL; 1533 goto err; 1534 } 1535 1536 /* Skip the plane if already verified */ 1537 if (dbuf == vb->planes[plane].dbuf && 1538 vb->v4l2_planes[plane].length == planes[plane].length) { 1539 dma_buf_put(dbuf); 1540 continue; 1541 } 1542 1543 dprintk(1, "buffer for plane %d changed\n", plane); 1544 1545 if (!reacquired) { 1546 reacquired = true; 1547 call_void_vb_qop(vb, buf_cleanup, vb); 1548 } 1549 1550 /* Release previously acquired memory if present */ 1551 __vb2_plane_dmabuf_put(vb, &vb->planes[plane]); 1552 memset(&vb->v4l2_planes[plane], 0, sizeof(struct v4l2_plane)); 1553 1554 /* Acquire each plane's memory */ 1555 mem_priv = call_ptr_memop(vb, attach_dmabuf, q->alloc_ctx[plane], 1556 dbuf, planes[plane].length, dma_dir); 1557 if (IS_ERR(mem_priv)) { 1558 dprintk(1, "failed to attach dmabuf\n"); 1559 ret = PTR_ERR(mem_priv); 1560 dma_buf_put(dbuf); 1561 goto err; 1562 } 1563 1564 vb->planes[plane].dbuf = dbuf; 1565 vb->planes[plane].mem_priv = mem_priv; 1566 } 1567 1568 /* TODO: This pins the buffer(s) with dma_buf_map_attachment()).. but 1569 * really we want to do this just before the DMA, not while queueing 1570 * the buffer(s).. 1571 */ 1572 for (plane = 0; plane < vb->num_planes; ++plane) { 1573 ret = call_memop(vb, map_dmabuf, vb->planes[plane].mem_priv); 1574 if (ret) { 1575 dprintk(1, "failed to map dmabuf for plane %d\n", 1576 plane); 1577 goto err; 1578 } 1579 vb->planes[plane].dbuf_mapped = 1; 1580 } 1581 1582 /* 1583 * Now that everything is in order, copy relevant information 1584 * provided by userspace. 1585 */ 1586 for (plane = 0; plane < vb->num_planes; ++plane) 1587 vb->v4l2_planes[plane] = planes[plane]; 1588 1589 if (reacquired) { 1590 /* 1591 * Call driver-specific initialization on the newly acquired buffer, 1592 * if provided. 1593 */ 1594 ret = call_vb_qop(vb, buf_init, vb); 1595 if (ret) { 1596 dprintk(1, "buffer initialization failed\n"); 1597 goto err; 1598 } 1599 } 1600 1601 ret = call_vb_qop(vb, buf_prepare, vb); 1602 if (ret) { 1603 dprintk(1, "buffer preparation failed\n"); 1604 call_void_vb_qop(vb, buf_cleanup, vb); 1605 goto err; 1606 } 1607 1608 return 0; 1609err: 1610 /* In case of errors, release planes that were already acquired */ 1611 __vb2_buf_dmabuf_put(vb); 1612 1613 return ret; 1614} 1615 1616/** 1617 * __enqueue_in_driver() - enqueue a vb2_buffer in driver for processing 1618 */ 1619static void __enqueue_in_driver(struct vb2_buffer *vb) 1620{ 1621 struct vb2_queue *q = vb->vb2_queue; 1622 unsigned int plane; 1623 1624 vb->state = VB2_BUF_STATE_ACTIVE; 1625 atomic_inc(&q->owned_by_drv_count); 1626 1627 /* sync buffers */ 1628 for (plane = 0; plane < vb->num_planes; ++plane) 1629 call_void_memop(vb, prepare, vb->planes[plane].mem_priv); 1630 1631 call_void_vb_qop(vb, buf_queue, vb); 1632} 1633 1634static int __buf_prepare(struct vb2_buffer *vb, const struct v4l2_buffer *b) 1635{ 1636 struct vb2_queue *q = vb->vb2_queue; 1637 int ret; 1638 1639 ret = __verify_length(vb, b); 1640 if (ret < 0) { 1641 dprintk(1, "plane parameters verification failed: %d\n", ret); 1642 return ret; 1643 } 1644 if (b->field == V4L2_FIELD_ALTERNATE && V4L2_TYPE_IS_OUTPUT(q->type)) { 1645 /* 1646 * If the format's field is ALTERNATE, then the buffer's field 1647 * should be either TOP or BOTTOM, not ALTERNATE since that 1648 * makes no sense. The driver has to know whether the 1649 * buffer represents a top or a bottom field in order to 1650 * program any DMA correctly. Using ALTERNATE is wrong, since 1651 * that just says that it is either a top or a bottom field, 1652 * but not which of the two it is. 1653 */ 1654 dprintk(1, "the field is incorrectly set to ALTERNATE for an output buffer\n"); 1655 return -EINVAL; 1656 } 1657 1658 if (q->error) { 1659 dprintk(1, "fatal error occurred on queue\n"); 1660 return -EIO; 1661 } 1662 1663 vb->state = VB2_BUF_STATE_PREPARING; 1664 vb->v4l2_buf.timestamp.tv_sec = 0; 1665 vb->v4l2_buf.timestamp.tv_usec = 0; 1666 vb->v4l2_buf.sequence = 0; 1667 1668 switch (q->memory) { 1669 case V4L2_MEMORY_MMAP: 1670 ret = __qbuf_mmap(vb, b); 1671 break; 1672 case V4L2_MEMORY_USERPTR: 1673 down_read(¤t->mm->mmap_sem); 1674 ret = __qbuf_userptr(vb, b); 1675 up_read(¤t->mm->mmap_sem); 1676 break; 1677 case V4L2_MEMORY_DMABUF: 1678 ret = __qbuf_dmabuf(vb, b); 1679 break; 1680 default: 1681 WARN(1, "Invalid queue type\n"); 1682 ret = -EINVAL; 1683 } 1684 1685 if (ret) 1686 dprintk(1, "buffer preparation failed: %d\n", ret); 1687 vb->state = ret ? VB2_BUF_STATE_DEQUEUED : VB2_BUF_STATE_PREPARED; 1688 1689 return ret; 1690} 1691 1692static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b, 1693 const char *opname) 1694{ 1695 if (b->type != q->type) { 1696 dprintk(1, "%s: invalid buffer type\n", opname); 1697 return -EINVAL; 1698 } 1699 1700 if (b->index >= q->num_buffers) { 1701 dprintk(1, "%s: buffer index out of range\n", opname); 1702 return -EINVAL; 1703 } 1704 1705 if (q->bufs[b->index] == NULL) { 1706 /* Should never happen */ 1707 dprintk(1, "%s: buffer is NULL\n", opname); 1708 return -EINVAL; 1709 } 1710 1711 if (b->memory != q->memory) { 1712 dprintk(1, "%s: invalid memory type\n", opname); 1713 return -EINVAL; 1714 } 1715 1716 return __verify_planes_array(q->bufs[b->index], b); 1717} 1718 1719/** 1720 * vb2_prepare_buf() - Pass ownership of a buffer from userspace to the kernel 1721 * @q: videobuf2 queue 1722 * @b: buffer structure passed from userspace to vidioc_prepare_buf 1723 * handler in driver 1724 * 1725 * Should be called from vidioc_prepare_buf ioctl handler of a driver. 1726 * This function: 1727 * 1) verifies the passed buffer, 1728 * 2) calls buf_prepare callback in the driver (if provided), in which 1729 * driver-specific buffer initialization can be performed, 1730 * 1731 * The return values from this function are intended to be directly returned 1732 * from vidioc_prepare_buf handler in driver. 1733 */ 1734int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b) 1735{ 1736 struct vb2_buffer *vb; 1737 int ret; 1738 1739 if (vb2_fileio_is_active(q)) { 1740 dprintk(1, "file io in progress\n"); 1741 return -EBUSY; 1742 } 1743 1744 ret = vb2_queue_or_prepare_buf(q, b, "prepare_buf"); 1745 if (ret) 1746 return ret; 1747 1748 vb = q->bufs[b->index]; 1749 if (vb->state != VB2_BUF_STATE_DEQUEUED) { 1750 dprintk(1, "invalid buffer state %d\n", 1751 vb->state); 1752 return -EINVAL; 1753 } 1754 1755 ret = __buf_prepare(vb, b); 1756 if (!ret) { 1757 /* Fill buffer information for the userspace */ 1758 __fill_v4l2_buffer(vb, b); 1759 1760 dprintk(1, "prepare of buffer %d succeeded\n", vb->v4l2_buf.index); 1761 } 1762 return ret; 1763} 1764EXPORT_SYMBOL_GPL(vb2_prepare_buf); 1765 1766/** 1767 * vb2_start_streaming() - Attempt to start streaming. 1768 * @q: videobuf2 queue 1769 * 1770 * Attempt to start streaming. When this function is called there must be 1771 * at least q->min_buffers_needed buffers queued up (i.e. the minimum 1772 * number of buffers required for the DMA engine to function). If the 1773 * @start_streaming op fails it is supposed to return all the driver-owned 1774 * buffers back to vb2 in state QUEUED. Check if that happened and if 1775 * not warn and reclaim them forcefully. 1776 */ 1777static int vb2_start_streaming(struct vb2_queue *q) 1778{ 1779 struct vb2_buffer *vb; 1780 int ret; 1781 1782 /* 1783 * If any buffers were queued before streamon, 1784 * we can now pass them to driver for processing. 1785 */ 1786 list_for_each_entry(vb, &q->queued_list, queued_entry) 1787 __enqueue_in_driver(vb); 1788 1789 /* Tell the driver to start streaming */ 1790 q->start_streaming_called = 1; 1791 ret = call_qop(q, start_streaming, q, 1792 atomic_read(&q->owned_by_drv_count)); 1793 if (!ret) 1794 return 0; 1795 1796 q->start_streaming_called = 0; 1797 1798 dprintk(1, "driver refused to start streaming\n"); 1799 /* 1800 * If you see this warning, then the driver isn't cleaning up properly 1801 * after a failed start_streaming(). See the start_streaming() 1802 * documentation in videobuf2-core.h for more information how buffers 1803 * should be returned to vb2 in start_streaming(). 1804 */ 1805 if (WARN_ON(atomic_read(&q->owned_by_drv_count))) { 1806 unsigned i; 1807 1808 /* 1809 * Forcefully reclaim buffers if the driver did not 1810 * correctly return them to vb2. 1811 */ 1812 for (i = 0; i < q->num_buffers; ++i) { 1813 vb = q->bufs[i]; 1814 if (vb->state == VB2_BUF_STATE_ACTIVE) 1815 vb2_buffer_done(vb, VB2_BUF_STATE_QUEUED); 1816 } 1817 /* Must be zero now */ 1818 WARN_ON(atomic_read(&q->owned_by_drv_count)); 1819 } 1820 /* 1821 * If done_list is not empty, then start_streaming() didn't call 1822 * vb2_buffer_done(vb, VB2_BUF_STATE_QUEUED) but STATE_ERROR or 1823 * STATE_DONE. 1824 */ 1825 WARN_ON(!list_empty(&q->done_list)); 1826 return ret; 1827} 1828 1829static int vb2_internal_qbuf(struct vb2_queue *q, struct v4l2_buffer *b) 1830{ 1831 int ret = vb2_queue_or_prepare_buf(q, b, "qbuf"); 1832 struct vb2_buffer *vb; 1833 1834 if (ret) 1835 return ret; 1836 1837 vb = q->bufs[b->index]; 1838 1839 switch (vb->state) { 1840 case VB2_BUF_STATE_DEQUEUED: 1841 ret = __buf_prepare(vb, b); 1842 if (ret) 1843 return ret; 1844 break; 1845 case VB2_BUF_STATE_PREPARED: 1846 break; 1847 case VB2_BUF_STATE_PREPARING: 1848 dprintk(1, "buffer still being prepared\n"); 1849 return -EINVAL; 1850 default: 1851 dprintk(1, "invalid buffer state %d\n", vb->state); 1852 return -EINVAL; 1853 } 1854 1855 /* 1856 * Add to the queued buffers list, a buffer will stay on it until 1857 * dequeued in dqbuf. 1858 */ 1859 list_add_tail(&vb->queued_entry, &q->queued_list); 1860 q->queued_count++; 1861 q->waiting_for_buffers = false; 1862 vb->state = VB2_BUF_STATE_QUEUED; 1863 if (V4L2_TYPE_IS_OUTPUT(q->type)) { 1864 /* 1865 * For output buffers copy the timestamp if needed, 1866 * and the timecode field and flag if needed. 1867 */ 1868 if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == 1869 V4L2_BUF_FLAG_TIMESTAMP_COPY) 1870 vb->v4l2_buf.timestamp = b->timestamp; 1871 vb->v4l2_buf.flags |= b->flags & V4L2_BUF_FLAG_TIMECODE; 1872 if (b->flags & V4L2_BUF_FLAG_TIMECODE) 1873 vb->v4l2_buf.timecode = b->timecode; 1874 } 1875 1876 /* 1877 * If already streaming, give the buffer to driver for processing. 1878 * If not, the buffer will be given to driver on next streamon. 1879 */ 1880 if (q->start_streaming_called) 1881 __enqueue_in_driver(vb); 1882 1883 /* Fill buffer information for the userspace */ 1884 __fill_v4l2_buffer(vb, b); 1885 1886 /* 1887 * If streamon has been called, and we haven't yet called 1888 * start_streaming() since not enough buffers were queued, and 1889 * we now have reached the minimum number of queued buffers, 1890 * then we can finally call start_streaming(). 1891 */ 1892 if (q->streaming && !q->start_streaming_called && 1893 q->queued_count >= q->min_buffers_needed) { 1894 ret = vb2_start_streaming(q); 1895 if (ret) 1896 return ret; 1897 } 1898 1899 dprintk(1, "qbuf of buffer %d succeeded\n", vb->v4l2_buf.index); 1900 return 0; 1901} 1902 1903/** 1904 * vb2_qbuf() - Queue a buffer from userspace 1905 * @q: videobuf2 queue 1906 * @b: buffer structure passed from userspace to vidioc_qbuf handler 1907 * in driver 1908 * 1909 * Should be called from vidioc_qbuf ioctl handler of a driver. 1910 * This function: 1911 * 1) verifies the passed buffer, 1912 * 2) if necessary, calls buf_prepare callback in the driver (if provided), in 1913 * which driver-specific buffer initialization can be performed, 1914 * 3) if streaming is on, queues the buffer in driver by the means of buf_queue 1915 * callback for processing. 1916 * 1917 * The return values from this function are intended to be directly returned 1918 * from vidioc_qbuf handler in driver. 1919 */ 1920int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b) 1921{ 1922 if (vb2_fileio_is_active(q)) { 1923 dprintk(1, "file io in progress\n"); 1924 return -EBUSY; 1925 } 1926 1927 return vb2_internal_qbuf(q, b); 1928} 1929EXPORT_SYMBOL_GPL(vb2_qbuf); 1930 1931/** 1932 * __vb2_wait_for_done_vb() - wait for a buffer to become available 1933 * for dequeuing 1934 * 1935 * Will sleep if required for nonblocking == false. 1936 */ 1937static int __vb2_wait_for_done_vb(struct vb2_queue *q, int nonblocking) 1938{ 1939 /* 1940 * All operations on vb_done_list are performed under done_lock 1941 * spinlock protection. However, buffers may be removed from 1942 * it and returned to userspace only while holding both driver's 1943 * lock and the done_lock spinlock. Thus we can be sure that as 1944 * long as we hold the driver's lock, the list will remain not 1945 * empty if list_empty() check succeeds. 1946 */ 1947 1948 for (;;) { 1949 int ret; 1950 1951 if (!q->streaming) { 1952 dprintk(1, "streaming off, will not wait for buffers\n"); 1953 return -EINVAL; 1954 } 1955 1956 if (q->error) { 1957 dprintk(1, "Queue in error state, will not wait for buffers\n"); 1958 return -EIO; 1959 } 1960 1961 if (!list_empty(&q->done_list)) { 1962 /* 1963 * Found a buffer that we were waiting for. 1964 */ 1965 break; 1966 } 1967 1968 if (nonblocking) { 1969 dprintk(1, "nonblocking and no buffers to dequeue, " 1970 "will not wait\n"); 1971 return -EAGAIN; 1972 } 1973 1974 /* 1975 * We are streaming and blocking, wait for another buffer to 1976 * become ready or for streamoff. Driver's lock is released to 1977 * allow streamoff or qbuf to be called while waiting. 1978 */ 1979 call_void_qop(q, wait_prepare, q); 1980 1981 /* 1982 * All locks have been released, it is safe to sleep now. 1983 */ 1984 dprintk(3, "will sleep waiting for buffers\n"); 1985 ret = wait_event_interruptible(q->done_wq, 1986 !list_empty(&q->done_list) || !q->streaming || 1987 q->error); 1988 1989 /* 1990 * We need to reevaluate both conditions again after reacquiring 1991 * the locks or return an error if one occurred. 1992 */ 1993 call_void_qop(q, wait_finish, q); 1994 if (ret) { 1995 dprintk(1, "sleep was interrupted\n"); 1996 return ret; 1997 } 1998 } 1999 return 0; 2000} 2001 2002/** 2003 * __vb2_get_done_vb() - get a buffer ready for dequeuing 2004 * 2005 * Will sleep if required for nonblocking == false. 2006 */ 2007static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb, 2008 struct v4l2_buffer *b, int nonblocking) 2009{ 2010 unsigned long flags; 2011 int ret; 2012 2013 /* 2014 * Wait for at least one buffer to become available on the done_list. 2015 */ 2016 ret = __vb2_wait_for_done_vb(q, nonblocking); 2017 if (ret) 2018 return ret; 2019 2020 /* 2021 * Driver's lock has been held since we last verified that done_list 2022 * is not empty, so no need for another list_empty(done_list) check. 2023 */ 2024 spin_lock_irqsave(&q->done_lock, flags); 2025 *vb = list_first_entry(&q->done_list, struct vb2_buffer, done_entry); 2026 /* 2027 * Only remove the buffer from done_list if v4l2_buffer can handle all 2028 * the planes. 2029 */ 2030 ret = __verify_planes_array(*vb, b); 2031 if (!ret) 2032 list_del(&(*vb)->done_entry); 2033 spin_unlock_irqrestore(&q->done_lock, flags); 2034 2035 return ret; 2036} 2037 2038/** 2039 * vb2_wait_for_all_buffers() - wait until all buffers are given back to vb2 2040 * @q: videobuf2 queue 2041 * 2042 * This function will wait until all buffers that have been given to the driver 2043 * by buf_queue() are given back to vb2 with vb2_buffer_done(). It doesn't call 2044 * wait_prepare, wait_finish pair. It is intended to be called with all locks 2045 * taken, for example from stop_streaming() callback. 2046 */ 2047int vb2_wait_for_all_buffers(struct vb2_queue *q) 2048{ 2049 if (!q->streaming) { 2050 dprintk(1, "streaming off, will not wait for buffers\n"); 2051 return -EINVAL; 2052 } 2053 2054 if (q->start_streaming_called) 2055 wait_event(q->done_wq, !atomic_read(&q->owned_by_drv_count)); 2056 return 0; 2057} 2058EXPORT_SYMBOL_GPL(vb2_wait_for_all_buffers); 2059 2060/** 2061 * __vb2_dqbuf() - bring back the buffer to the DEQUEUED state 2062 */ 2063static void __vb2_dqbuf(struct vb2_buffer *vb) 2064{ 2065 struct vb2_queue *q = vb->vb2_queue; 2066 unsigned int i; 2067 2068 /* nothing to do if the buffer is already dequeued */ 2069 if (vb->state == VB2_BUF_STATE_DEQUEUED) 2070 return; 2071 2072 vb->state = VB2_BUF_STATE_DEQUEUED; 2073 2074 /* unmap DMABUF buffer */ 2075 if (q->memory == V4L2_MEMORY_DMABUF) 2076 for (i = 0; i < vb->num_planes; ++i) { 2077 if (!vb->planes[i].dbuf_mapped) 2078 continue; 2079 call_void_memop(vb, unmap_dmabuf, vb->planes[i].mem_priv); 2080 vb->planes[i].dbuf_mapped = 0; 2081 } 2082} 2083 2084static int vb2_internal_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking) 2085{ 2086 struct vb2_buffer *vb = NULL; 2087 int ret; 2088 2089 if (b->type != q->type) { 2090 dprintk(1, "invalid buffer type\n"); 2091 return -EINVAL; 2092 } 2093 ret = __vb2_get_done_vb(q, &vb, b, nonblocking); 2094 if (ret < 0) 2095 return ret; 2096 2097 switch (vb->state) { 2098 case VB2_BUF_STATE_DONE: 2099 dprintk(3, "returning done buffer\n"); 2100 break; 2101 case VB2_BUF_STATE_ERROR: 2102 dprintk(3, "returning done buffer with errors\n"); 2103 break; 2104 default: 2105 dprintk(1, "invalid buffer state\n"); 2106 return -EINVAL; 2107 } 2108 2109 call_void_vb_qop(vb, buf_finish, vb); 2110 2111 /* Fill buffer information for the userspace */ 2112 __fill_v4l2_buffer(vb, b); 2113 /* Remove from videobuf queue */ 2114 list_del(&vb->queued_entry); 2115 q->queued_count--; 2116 /* go back to dequeued state */ 2117 __vb2_dqbuf(vb); 2118 2119 dprintk(1, "dqbuf of buffer %d, with state %d\n", 2120 vb->v4l2_buf.index, vb->state); 2121 2122 return 0; 2123} 2124 2125/** 2126 * vb2_dqbuf() - Dequeue a buffer to the userspace 2127 * @q: videobuf2 queue 2128 * @b: buffer structure passed from userspace to vidioc_dqbuf handler 2129 * in driver 2130 * @nonblocking: if true, this call will not sleep waiting for a buffer if no 2131 * buffers ready for dequeuing are present. Normally the driver 2132 * would be passing (file->f_flags & O_NONBLOCK) here 2133 * 2134 * Should be called from vidioc_dqbuf ioctl handler of a driver. 2135 * This function: 2136 * 1) verifies the passed buffer, 2137 * 2) calls buf_finish callback in the driver (if provided), in which 2138 * driver can perform any additional operations that may be required before 2139 * returning the buffer to userspace, such as cache sync, 2140 * 3) the buffer struct members are filled with relevant information for 2141 * the userspace. 2142 * 2143 * The return values from this function are intended to be directly returned 2144 * from vidioc_dqbuf handler in driver. 2145 */ 2146int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking) 2147{ 2148 if (vb2_fileio_is_active(q)) { 2149 dprintk(1, "file io in progress\n"); 2150 return -EBUSY; 2151 } 2152 return vb2_internal_dqbuf(q, b, nonblocking); 2153} 2154EXPORT_SYMBOL_GPL(vb2_dqbuf); 2155 2156/** 2157 * __vb2_queue_cancel() - cancel and stop (pause) streaming 2158 * 2159 * Removes all queued buffers from driver's queue and all buffers queued by 2160 * userspace from videobuf's queue. Returns to state after reqbufs. 2161 */ 2162static void __vb2_queue_cancel(struct vb2_queue *q) 2163{ 2164 unsigned int i; 2165 2166 /* 2167 * Tell driver to stop all transactions and release all queued 2168 * buffers. 2169 */ 2170 if (q->start_streaming_called) 2171 call_void_qop(q, stop_streaming, q); 2172 2173 /* 2174 * If you see this warning, then the driver isn't cleaning up properly 2175 * in stop_streaming(). See the stop_streaming() documentation in 2176 * videobuf2-core.h for more information how buffers should be returned 2177 * to vb2 in stop_streaming(). 2178 */ 2179 if (WARN_ON(atomic_read(&q->owned_by_drv_count))) { 2180 for (i = 0; i < q->num_buffers; ++i) 2181 if (q->bufs[i]->state == VB2_BUF_STATE_ACTIVE) 2182 vb2_buffer_done(q->bufs[i], VB2_BUF_STATE_ERROR); 2183 /* Must be zero now */ 2184 WARN_ON(atomic_read(&q->owned_by_drv_count)); 2185 } 2186 2187 q->streaming = 0; 2188 q->start_streaming_called = 0; 2189 q->queued_count = 0; 2190 q->error = 0; 2191 2192 /* 2193 * Remove all buffers from videobuf's list... 2194 */ 2195 INIT_LIST_HEAD(&q->queued_list); 2196 /* 2197 * ...and done list; userspace will not receive any buffers it 2198 * has not already dequeued before initiating cancel. 2199 */ 2200 INIT_LIST_HEAD(&q->done_list); 2201 atomic_set(&q->owned_by_drv_count, 0); 2202 wake_up_all(&q->done_wq); 2203 2204 /* 2205 * Reinitialize all buffers for next use. 2206 * Make sure to call buf_finish for any queued buffers. Normally 2207 * that's done in dqbuf, but that's not going to happen when we 2208 * cancel the whole queue. Note: this code belongs here, not in 2209 * __vb2_dqbuf() since in vb2_internal_dqbuf() there is a critical 2210 * call to __fill_v4l2_buffer() after buf_finish(). That order can't 2211 * be changed, so we can't move the buf_finish() to __vb2_dqbuf(). 2212 */ 2213 for (i = 0; i < q->num_buffers; ++i) { 2214 struct vb2_buffer *vb = q->bufs[i]; 2215 2216 if (vb->state != VB2_BUF_STATE_DEQUEUED) { 2217 vb->state = VB2_BUF_STATE_PREPARED; 2218 call_void_vb_qop(vb, buf_finish, vb); 2219 } 2220 __vb2_dqbuf(vb); 2221 } 2222} 2223 2224static int vb2_internal_streamon(struct vb2_queue *q, enum v4l2_buf_type type) 2225{ 2226 int ret; 2227 2228 if (type != q->type) { 2229 dprintk(1, "invalid stream type\n"); 2230 return -EINVAL; 2231 } 2232 2233 if (q->streaming) { 2234 dprintk(3, "already streaming\n"); 2235 return 0; 2236 } 2237 2238 if (!q->num_buffers) { 2239 dprintk(1, "no buffers have been allocated\n"); 2240 return -EINVAL; 2241 } 2242 2243 if (q->num_buffers < q->min_buffers_needed) { 2244 dprintk(1, "need at least %u allocated buffers\n", 2245 q->min_buffers_needed); 2246 return -EINVAL; 2247 } 2248 2249 /* 2250 * Tell driver to start streaming provided sufficient buffers 2251 * are available. 2252 */ 2253 if (q->queued_count >= q->min_buffers_needed) { 2254 ret = vb2_start_streaming(q); 2255 if (ret) { 2256 __vb2_queue_cancel(q); 2257 return ret; 2258 } 2259 } 2260 2261 q->streaming = 1; 2262 2263 dprintk(3, "successful\n"); 2264 return 0; 2265} 2266 2267/** 2268 * vb2_queue_error() - signal a fatal error on the queue 2269 * @q: videobuf2 queue 2270 * 2271 * Flag that a fatal unrecoverable error has occurred and wake up all processes 2272 * waiting on the queue. Polling will now set POLLERR and queuing and dequeuing 2273 * buffers will return -EIO. 2274 * 2275 * The error flag will be cleared when cancelling the queue, either from 2276 * vb2_streamoff or vb2_queue_release. Drivers should thus not call this 2277 * function before starting the stream, otherwise the error flag will remain set 2278 * until the queue is released when closing the device node. 2279 */ 2280void vb2_queue_error(struct vb2_queue *q) 2281{ 2282 q->error = 1; 2283 2284 wake_up_all(&q->done_wq); 2285} 2286EXPORT_SYMBOL_GPL(vb2_queue_error); 2287 2288/** 2289 * vb2_streamon - start streaming 2290 * @q: videobuf2 queue 2291 * @type: type argument passed from userspace to vidioc_streamon handler 2292 * 2293 * Should be called from vidioc_streamon handler of a driver. 2294 * This function: 2295 * 1) verifies current state 2296 * 2) passes any previously queued buffers to the driver and starts streaming 2297 * 2298 * The return values from this function are intended to be directly returned 2299 * from vidioc_streamon handler in the driver. 2300 */ 2301int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type) 2302{ 2303 if (vb2_fileio_is_active(q)) { 2304 dprintk(1, "file io in progress\n"); 2305 return -EBUSY; 2306 } 2307 return vb2_internal_streamon(q, type); 2308} 2309EXPORT_SYMBOL_GPL(vb2_streamon); 2310 2311static int vb2_internal_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) 2312{ 2313 if (type != q->type) { 2314 dprintk(1, "invalid stream type\n"); 2315 return -EINVAL; 2316 } 2317 2318 /* 2319 * Cancel will pause streaming and remove all buffers from the driver 2320 * and videobuf, effectively returning control over them to userspace. 2321 * 2322 * Note that we do this even if q->streaming == 0: if you prepare or 2323 * queue buffers, and then call streamoff without ever having called 2324 * streamon, you would still expect those buffers to be returned to 2325 * their normal dequeued state. 2326 */ 2327 __vb2_queue_cancel(q); 2328 q->waiting_for_buffers = !V4L2_TYPE_IS_OUTPUT(q->type); 2329 2330 dprintk(3, "successful\n"); 2331 return 0; 2332} 2333 2334/** 2335 * vb2_streamoff - stop streaming 2336 * @q: videobuf2 queue 2337 * @type: type argument passed from userspace to vidioc_streamoff handler 2338 * 2339 * Should be called from vidioc_streamoff handler of a driver. 2340 * This function: 2341 * 1) verifies current state, 2342 * 2) stop streaming and dequeues any queued buffers, including those previously 2343 * passed to the driver (after waiting for the driver to finish). 2344 * 2345 * This call can be used for pausing playback. 2346 * The return values from this function are intended to be directly returned 2347 * from vidioc_streamoff handler in the driver 2348 */ 2349int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) 2350{ 2351 if (vb2_fileio_is_active(q)) { 2352 dprintk(1, "file io in progress\n"); 2353 return -EBUSY; 2354 } 2355 return vb2_internal_streamoff(q, type); 2356} 2357EXPORT_SYMBOL_GPL(vb2_streamoff); 2358 2359/** 2360 * __find_plane_by_offset() - find plane associated with the given offset off 2361 */ 2362static int __find_plane_by_offset(struct vb2_queue *q, unsigned long off, 2363 unsigned int *_buffer, unsigned int *_plane) 2364{ 2365 struct vb2_buffer *vb; 2366 unsigned int buffer, plane; 2367 2368 /* 2369 * Go over all buffers and their planes, comparing the given offset 2370 * with an offset assigned to each plane. If a match is found, 2371 * return its buffer and plane numbers. 2372 */ 2373 for (buffer = 0; buffer < q->num_buffers; ++buffer) { 2374 vb = q->bufs[buffer]; 2375 2376 for (plane = 0; plane < vb->num_planes; ++plane) { 2377 if (vb->v4l2_planes[plane].m.mem_offset == off) { 2378 *_buffer = buffer; 2379 *_plane = plane; 2380 return 0; 2381 } 2382 } 2383 } 2384 2385 return -EINVAL; 2386} 2387 2388/** 2389 * vb2_expbuf() - Export a buffer as a file descriptor 2390 * @q: videobuf2 queue 2391 * @eb: export buffer structure passed from userspace to vidioc_expbuf 2392 * handler in driver 2393 * 2394 * The return values from this function are intended to be directly returned 2395 * from vidioc_expbuf handler in driver. 2396 */ 2397int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb) 2398{ 2399 struct vb2_buffer *vb = NULL; 2400 struct vb2_plane *vb_plane; 2401 int ret; 2402 struct dma_buf *dbuf; 2403 2404 if (q->memory != V4L2_MEMORY_MMAP) { 2405 dprintk(1, "queue is not currently set up for mmap\n"); 2406 return -EINVAL; 2407 } 2408 2409 if (!q->mem_ops->get_dmabuf) { 2410 dprintk(1, "queue does not support DMA buffer exporting\n"); 2411 return -EINVAL; 2412 } 2413 2414 if (eb->flags & ~(O_CLOEXEC | O_ACCMODE)) { 2415 dprintk(1, "queue does support only O_CLOEXEC and access mode flags\n"); 2416 return -EINVAL; 2417 } 2418 2419 if (eb->type != q->type) { 2420 dprintk(1, "invalid buffer type\n"); 2421 return -EINVAL; 2422 } 2423 2424 if (eb->index >= q->num_buffers) { 2425 dprintk(1, "buffer index out of range\n"); 2426 return -EINVAL; 2427 } 2428 2429 vb = q->bufs[eb->index]; 2430 2431 if (eb->plane >= vb->num_planes) { 2432 dprintk(1, "buffer plane out of range\n"); 2433 return -EINVAL; 2434 } 2435 2436 if (vb2_fileio_is_active(q)) { 2437 dprintk(1, "expbuf: file io in progress\n"); 2438 return -EBUSY; 2439 } 2440 2441 vb_plane = &vb->planes[eb->plane]; 2442 2443 dbuf = call_ptr_memop(vb, get_dmabuf, vb_plane->mem_priv, eb->flags & O_ACCMODE); 2444 if (IS_ERR_OR_NULL(dbuf)) { 2445 dprintk(1, "failed to export buffer %d, plane %d\n", 2446 eb->index, eb->plane); 2447 return -EINVAL; 2448 } 2449 2450 ret = dma_buf_fd(dbuf, eb->flags & ~O_ACCMODE); 2451 if (ret < 0) { 2452 dprintk(3, "buffer %d, plane %d failed to export (%d)\n", 2453 eb->index, eb->plane, ret); 2454 dma_buf_put(dbuf); 2455 return ret; 2456 } 2457 2458 dprintk(3, "buffer %d, plane %d exported as %d descriptor\n", 2459 eb->index, eb->plane, ret); 2460 eb->fd = ret; 2461 2462 return 0; 2463} 2464EXPORT_SYMBOL_GPL(vb2_expbuf); 2465 2466/** 2467 * vb2_mmap() - map video buffers into application address space 2468 * @q: videobuf2 queue 2469 * @vma: vma passed to the mmap file operation handler in the driver 2470 * 2471 * Should be called from mmap file operation handler of a driver. 2472 * This function maps one plane of one of the available video buffers to 2473 * userspace. To map whole video memory allocated on reqbufs, this function 2474 * has to be called once per each plane per each buffer previously allocated. 2475 * 2476 * When the userspace application calls mmap, it passes to it an offset returned 2477 * to it earlier by the means of vidioc_querybuf handler. That offset acts as 2478 * a "cookie", which is then used to identify the plane to be mapped. 2479 * This function finds a plane with a matching offset and a mapping is performed 2480 * by the means of a provided memory operation. 2481 * 2482 * The return values from this function are intended to be directly returned 2483 * from the mmap handler in driver. 2484 */ 2485int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma) 2486{ 2487 unsigned long off = vma->vm_pgoff << PAGE_SHIFT; 2488 struct vb2_buffer *vb; 2489 unsigned int buffer = 0, plane = 0; 2490 int ret; 2491 unsigned long length; 2492 2493 if (q->memory != V4L2_MEMORY_MMAP) { 2494 dprintk(1, "queue is not currently set up for mmap\n"); 2495 return -EINVAL; 2496 } 2497 2498 /* 2499 * Check memory area access mode. 2500 */ 2501 if (!(vma->vm_flags & VM_SHARED)) { 2502 dprintk(1, "invalid vma flags, VM_SHARED needed\n"); 2503 return -EINVAL; 2504 } 2505 if (V4L2_TYPE_IS_OUTPUT(q->type)) { 2506 if (!(vma->vm_flags & VM_WRITE)) { 2507 dprintk(1, "invalid vma flags, VM_WRITE needed\n"); 2508 return -EINVAL; 2509 } 2510 } else { 2511 if (!(vma->vm_flags & VM_READ)) { 2512 dprintk(1, "invalid vma flags, VM_READ needed\n"); 2513 return -EINVAL; 2514 } 2515 } 2516 if (vb2_fileio_is_active(q)) { 2517 dprintk(1, "mmap: file io in progress\n"); 2518 return -EBUSY; 2519 } 2520 2521 /* 2522 * Find the plane corresponding to the offset passed by userspace. 2523 */ 2524 ret = __find_plane_by_offset(q, off, &buffer, &plane); 2525 if (ret) 2526 return ret; 2527 2528 vb = q->bufs[buffer]; 2529 2530 /* 2531 * MMAP requires page_aligned buffers. 2532 * The buffer length was page_aligned at __vb2_buf_mem_alloc(), 2533 * so, we need to do the same here. 2534 */ 2535 length = PAGE_ALIGN(vb->v4l2_planes[plane].length); 2536 if (length < (vma->vm_end - vma->vm_start)) { 2537 dprintk(1, 2538 "MMAP invalid, as it would overflow buffer length\n"); 2539 return -EINVAL; 2540 } 2541 2542 mutex_lock(&q->mmap_lock); 2543 ret = call_memop(vb, mmap, vb->planes[plane].mem_priv, vma); 2544 mutex_unlock(&q->mmap_lock); 2545 if (ret) 2546 return ret; 2547 2548 dprintk(3, "buffer %d, plane %d successfully mapped\n", buffer, plane); 2549 return 0; 2550} 2551EXPORT_SYMBOL_GPL(vb2_mmap); 2552 2553#ifndef CONFIG_MMU 2554unsigned long vb2_get_unmapped_area(struct vb2_queue *q, 2555 unsigned long addr, 2556 unsigned long len, 2557 unsigned long pgoff, 2558 unsigned long flags) 2559{ 2560 unsigned long off = pgoff << PAGE_SHIFT; 2561 struct vb2_buffer *vb; 2562 unsigned int buffer, plane; 2563 void *vaddr; 2564 int ret; 2565 2566 if (q->memory != V4L2_MEMORY_MMAP) { 2567 dprintk(1, "queue is not currently set up for mmap\n"); 2568 return -EINVAL; 2569 } 2570 2571 /* 2572 * Find the plane corresponding to the offset passed by userspace. 2573 */ 2574 ret = __find_plane_by_offset(q, off, &buffer, &plane); 2575 if (ret) 2576 return ret; 2577 2578 vb = q->bufs[buffer]; 2579 2580 vaddr = vb2_plane_vaddr(vb, plane); 2581 return vaddr ? (unsigned long)vaddr : -EINVAL; 2582} 2583EXPORT_SYMBOL_GPL(vb2_get_unmapped_area); 2584#endif 2585 2586static int __vb2_init_fileio(struct vb2_queue *q, int read); 2587static int __vb2_cleanup_fileio(struct vb2_queue *q); 2588 2589/** 2590 * vb2_poll() - implements poll userspace operation 2591 * @q: videobuf2 queue 2592 * @file: file argument passed to the poll file operation handler 2593 * @wait: wait argument passed to the poll file operation handler 2594 * 2595 * This function implements poll file operation handler for a driver. 2596 * For CAPTURE queues, if a buffer is ready to be dequeued, the userspace will 2597 * be informed that the file descriptor of a video device is available for 2598 * reading. 2599 * For OUTPUT queues, if a buffer is ready to be dequeued, the file descriptor 2600 * will be reported as available for writing. 2601 * 2602 * If the driver uses struct v4l2_fh, then vb2_poll() will also check for any 2603 * pending events. 2604 * 2605 * The return values from this function are intended to be directly returned 2606 * from poll handler in driver. 2607 */ 2608unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait) 2609{ 2610 struct video_device *vfd = video_devdata(file); 2611 unsigned long req_events = poll_requested_events(wait); 2612 struct vb2_buffer *vb = NULL; 2613 unsigned int res = 0; 2614 unsigned long flags; 2615 2616 if (test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags)) { 2617 struct v4l2_fh *fh = file->private_data; 2618 2619 if (v4l2_event_pending(fh)) 2620 res = POLLPRI; 2621 else if (req_events & POLLPRI) 2622 poll_wait(file, &fh->wait, wait); 2623 } 2624 2625 if (!V4L2_TYPE_IS_OUTPUT(q->type) && !(req_events & (POLLIN | POLLRDNORM))) 2626 return res; 2627 if (V4L2_TYPE_IS_OUTPUT(q->type) && !(req_events & (POLLOUT | POLLWRNORM))) 2628 return res; 2629 2630 /* 2631 * Start file I/O emulator only if streaming API has not been used yet. 2632 */ 2633 if (q->num_buffers == 0 && !vb2_fileio_is_active(q)) { 2634 if (!V4L2_TYPE_IS_OUTPUT(q->type) && (q->io_modes & VB2_READ) && 2635 (req_events & (POLLIN | POLLRDNORM))) { 2636 if (__vb2_init_fileio(q, 1)) 2637 return res | POLLERR; 2638 } 2639 if (V4L2_TYPE_IS_OUTPUT(q->type) && (q->io_modes & VB2_WRITE) && 2640 (req_events & (POLLOUT | POLLWRNORM))) { 2641 if (__vb2_init_fileio(q, 0)) 2642 return res | POLLERR; 2643 /* 2644 * Write to OUTPUT queue can be done immediately. 2645 */ 2646 return res | POLLOUT | POLLWRNORM; 2647 } 2648 } 2649 2650 /* 2651 * There is nothing to wait for if the queue isn't streaming, or if the 2652 * error flag is set. 2653 */ 2654 if (!vb2_is_streaming(q) || q->error) 2655 return res | POLLERR; 2656 /* 2657 * For compatibility with vb1: if QBUF hasn't been called yet, then 2658 * return POLLERR as well. This only affects capture queues, output 2659 * queues will always initialize waiting_for_buffers to false. 2660 */ 2661 if (q->waiting_for_buffers) 2662 return res | POLLERR; 2663 2664 /* 2665 * For output streams you can call write() as long as there are fewer 2666 * buffers queued than there are buffers available. 2667 */ 2668 if (V4L2_TYPE_IS_OUTPUT(q->type) && q->fileio && q->queued_count < q->num_buffers) 2669 return res | POLLOUT | POLLWRNORM; 2670 2671 if (list_empty(&q->done_list)) 2672 poll_wait(file, &q->done_wq, wait); 2673 2674 /* 2675 * Take first buffer available for dequeuing. 2676 */ 2677 spin_lock_irqsave(&q->done_lock, flags); 2678 if (!list_empty(&q->done_list)) 2679 vb = list_first_entry(&q->done_list, struct vb2_buffer, 2680 done_entry); 2681 spin_unlock_irqrestore(&q->done_lock, flags); 2682 2683 if (vb && (vb->state == VB2_BUF_STATE_DONE 2684 || vb->state == VB2_BUF_STATE_ERROR)) { 2685 return (V4L2_TYPE_IS_OUTPUT(q->type)) ? 2686 res | POLLOUT | POLLWRNORM : 2687 res | POLLIN | POLLRDNORM; 2688 } 2689 return res; 2690} 2691EXPORT_SYMBOL_GPL(vb2_poll); 2692 2693/** 2694 * vb2_queue_init() - initialize a videobuf2 queue 2695 * @q: videobuf2 queue; this structure should be allocated in driver 2696 * 2697 * The vb2_queue structure should be allocated by the driver. The driver is 2698 * responsible of clearing it's content and setting initial values for some 2699 * required entries before calling this function. 2700 * q->ops, q->mem_ops, q->type and q->io_modes are mandatory. Please refer 2701 * to the struct vb2_queue description in include/media/videobuf2-core.h 2702 * for more information. 2703 */ 2704int vb2_queue_init(struct vb2_queue *q) 2705{ 2706 /* 2707 * Sanity check 2708 */ 2709 if (WARN_ON(!q) || 2710 WARN_ON(!q->ops) || 2711 WARN_ON(!q->mem_ops) || 2712 WARN_ON(!q->type) || 2713 WARN_ON(!q->io_modes) || 2714 WARN_ON(!q->ops->queue_setup) || 2715 WARN_ON(!q->ops->buf_queue) || 2716 WARN_ON(q->timestamp_flags & 2717 ~(V4L2_BUF_FLAG_TIMESTAMP_MASK | 2718 V4L2_BUF_FLAG_TSTAMP_SRC_MASK))) 2719 return -EINVAL; 2720 2721 /* Warn that the driver should choose an appropriate timestamp type */ 2722 WARN_ON((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == 2723 V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN); 2724 2725 INIT_LIST_HEAD(&q->queued_list); 2726 INIT_LIST_HEAD(&q->done_list); 2727 spin_lock_init(&q->done_lock); 2728 mutex_init(&q->mmap_lock); 2729 init_waitqueue_head(&q->done_wq); 2730 2731 if (q->buf_struct_size == 0) 2732 q->buf_struct_size = sizeof(struct vb2_buffer); 2733 2734 return 0; 2735} 2736EXPORT_SYMBOL_GPL(vb2_queue_init); 2737 2738/** 2739 * vb2_queue_release() - stop streaming, release the queue and free memory 2740 * @q: videobuf2 queue 2741 * 2742 * This function stops streaming and performs necessary clean ups, including 2743 * freeing video buffer memory. The driver is responsible for freeing 2744 * the vb2_queue structure itself. 2745 */ 2746void vb2_queue_release(struct vb2_queue *q) 2747{ 2748 __vb2_cleanup_fileio(q); 2749 __vb2_queue_cancel(q); 2750 mutex_lock(&q->mmap_lock); 2751 __vb2_queue_free(q, q->num_buffers); 2752 mutex_unlock(&q->mmap_lock); 2753} 2754EXPORT_SYMBOL_GPL(vb2_queue_release); 2755 2756/** 2757 * struct vb2_fileio_buf - buffer context used by file io emulator 2758 * 2759 * vb2 provides a compatibility layer and emulator of file io (read and 2760 * write) calls on top of streaming API. This structure is used for 2761 * tracking context related to the buffers. 2762 */ 2763struct vb2_fileio_buf { 2764 void *vaddr; 2765 unsigned int size; 2766 unsigned int pos; 2767 unsigned int queued:1; 2768}; 2769 2770/** 2771 * struct vb2_fileio_data - queue context used by file io emulator 2772 * 2773 * @cur_index: the index of the buffer currently being read from or 2774 * written to. If equal to q->num_buffers then a new buffer 2775 * must be dequeued. 2776 * @initial_index: in the read() case all buffers are queued up immediately 2777 * in __vb2_init_fileio() and __vb2_perform_fileio() just cycles 2778 * buffers. However, in the write() case no buffers are initially 2779 * queued, instead whenever a buffer is full it is queued up by 2780 * __vb2_perform_fileio(). Only once all available buffers have 2781 * been queued up will __vb2_perform_fileio() start to dequeue 2782 * buffers. This means that initially __vb2_perform_fileio() 2783 * needs to know what buffer index to use when it is queuing up 2784 * the buffers for the first time. That initial index is stored 2785 * in this field. Once it is equal to q->num_buffers all 2786 * available buffers have been queued and __vb2_perform_fileio() 2787 * should start the normal dequeue/queue cycle. 2788 * 2789 * vb2 provides a compatibility layer and emulator of file io (read and 2790 * write) calls on top of streaming API. For proper operation it required 2791 * this structure to save the driver state between each call of the read 2792 * or write function. 2793 */ 2794struct vb2_fileio_data { 2795 struct v4l2_requestbuffers req; 2796 struct v4l2_plane p; 2797 struct v4l2_buffer b; 2798 struct vb2_fileio_buf bufs[VIDEO_MAX_FRAME]; 2799 unsigned int cur_index; 2800 unsigned int initial_index; 2801 unsigned int q_count; 2802 unsigned int dq_count; 2803 unsigned read_once:1; 2804 unsigned write_immediately:1; 2805}; 2806 2807/** 2808 * __vb2_init_fileio() - initialize file io emulator 2809 * @q: videobuf2 queue 2810 * @read: mode selector (1 means read, 0 means write) 2811 */ 2812static int __vb2_init_fileio(struct vb2_queue *q, int read) 2813{ 2814 struct vb2_fileio_data *fileio; 2815 int i, ret; 2816 unsigned int count = 0; 2817 2818 /* 2819 * Sanity check 2820 */ 2821 if (WARN_ON((read && !(q->io_modes & VB2_READ)) || 2822 (!read && !(q->io_modes & VB2_WRITE)))) 2823 return -EINVAL; 2824 2825 /* 2826 * Check if device supports mapping buffers to kernel virtual space. 2827 */ 2828 if (!q->mem_ops->vaddr) 2829 return -EBUSY; 2830 2831 /* 2832 * Check if streaming api has not been already activated. 2833 */ 2834 if (q->streaming || q->num_buffers > 0) 2835 return -EBUSY; 2836 2837 /* 2838 * Start with count 1, driver can increase it in queue_setup() 2839 */ 2840 count = 1; 2841 2842 dprintk(3, "setting up file io: mode %s, count %d, read_once %d, write_immediately %d\n", 2843 (read) ? "read" : "write", count, q->fileio_read_once, 2844 q->fileio_write_immediately); 2845 2846 fileio = kzalloc(sizeof(struct vb2_fileio_data), GFP_KERNEL); 2847 if (fileio == NULL) 2848 return -ENOMEM; 2849 2850 fileio->read_once = q->fileio_read_once; 2851 fileio->write_immediately = q->fileio_write_immediately; 2852 2853 /* 2854 * Request buffers and use MMAP type to force driver 2855 * to allocate buffers by itself. 2856 */ 2857 fileio->req.count = count; 2858 fileio->req.memory = V4L2_MEMORY_MMAP; 2859 fileio->req.type = q->type; 2860 q->fileio = fileio; 2861 ret = __reqbufs(q, &fileio->req); 2862 if (ret) 2863 goto err_kfree; 2864 2865 /* 2866 * Check if plane_count is correct 2867 * (multiplane buffers are not supported). 2868 */ 2869 if (q->bufs[0]->num_planes != 1) { 2870 ret = -EBUSY; 2871 goto err_reqbufs; 2872 } 2873 2874 /* 2875 * Get kernel address of each buffer. 2876 */ 2877 for (i = 0; i < q->num_buffers; i++) { 2878 fileio->bufs[i].vaddr = vb2_plane_vaddr(q->bufs[i], 0); 2879 if (fileio->bufs[i].vaddr == NULL) { 2880 ret = -EINVAL; 2881 goto err_reqbufs; 2882 } 2883 fileio->bufs[i].size = vb2_plane_size(q->bufs[i], 0); 2884 } 2885 2886 /* 2887 * Read mode requires pre queuing of all buffers. 2888 */ 2889 if (read) { 2890 bool is_multiplanar = V4L2_TYPE_IS_MULTIPLANAR(q->type); 2891 2892 /* 2893 * Queue all buffers. 2894 */ 2895 for (i = 0; i < q->num_buffers; i++) { 2896 struct v4l2_buffer *b = &fileio->b; 2897 2898 memset(b, 0, sizeof(*b)); 2899 b->type = q->type; 2900 if (is_multiplanar) { 2901 memset(&fileio->p, 0, sizeof(fileio->p)); 2902 b->m.planes = &fileio->p; 2903 b->length = 1; 2904 } 2905 b->memory = q->memory; 2906 b->index = i; 2907 ret = vb2_internal_qbuf(q, b); 2908 if (ret) 2909 goto err_reqbufs; 2910 fileio->bufs[i].queued = 1; 2911 } 2912 /* 2913 * All buffers have been queued, so mark that by setting 2914 * initial_index to q->num_buffers 2915 */ 2916 fileio->initial_index = q->num_buffers; 2917 fileio->cur_index = q->num_buffers; 2918 } 2919 2920 /* 2921 * Start streaming. 2922 */ 2923 ret = vb2_internal_streamon(q, q->type); 2924 if (ret) 2925 goto err_reqbufs; 2926 2927 return ret; 2928 2929err_reqbufs: 2930 fileio->req.count = 0; 2931 __reqbufs(q, &fileio->req); 2932 2933err_kfree: 2934 q->fileio = NULL; 2935 kfree(fileio); 2936 return ret; 2937} 2938 2939/** 2940 * __vb2_cleanup_fileio() - free resourced used by file io emulator 2941 * @q: videobuf2 queue 2942 */ 2943static int __vb2_cleanup_fileio(struct vb2_queue *q) 2944{ 2945 struct vb2_fileio_data *fileio = q->fileio; 2946 2947 if (fileio) { 2948 vb2_internal_streamoff(q, q->type); 2949 q->fileio = NULL; 2950 fileio->req.count = 0; 2951 vb2_reqbufs(q, &fileio->req); 2952 kfree(fileio); 2953 dprintk(3, "file io emulator closed\n"); 2954 } 2955 return 0; 2956} 2957 2958/** 2959 * __vb2_perform_fileio() - perform a single file io (read or write) operation 2960 * @q: videobuf2 queue 2961 * @data: pointed to target userspace buffer 2962 * @count: number of bytes to read or write 2963 * @ppos: file handle position tracking pointer 2964 * @nonblock: mode selector (1 means blocking calls, 0 means nonblocking) 2965 * @read: access mode selector (1 means read, 0 means write) 2966 */ 2967static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_t count, 2968 loff_t *ppos, int nonblock, int read) 2969{ 2970 struct vb2_fileio_data *fileio; 2971 struct vb2_fileio_buf *buf; 2972 bool is_multiplanar = V4L2_TYPE_IS_MULTIPLANAR(q->type); 2973 /* 2974 * When using write() to write data to an output video node the vb2 core 2975 * should set timestamps if V4L2_BUF_FLAG_TIMESTAMP_COPY is set. Nobody 2976 * else is able to provide this information with the write() operation. 2977 */ 2978 bool set_timestamp = !read && 2979 (q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == 2980 V4L2_BUF_FLAG_TIMESTAMP_COPY; 2981 int ret, index; 2982 2983 dprintk(3, "mode %s, offset %ld, count %zd, %sblocking\n", 2984 read ? "read" : "write", (long)*ppos, count, 2985 nonblock ? "non" : ""); 2986 2987 if (!data) 2988 return -EINVAL; 2989 2990 /* 2991 * Initialize emulator on first call. 2992 */ 2993 if (!vb2_fileio_is_active(q)) { 2994 ret = __vb2_init_fileio(q, read); 2995 dprintk(3, "vb2_init_fileio result: %d\n", ret); 2996 if (ret) 2997 return ret; 2998 } 2999 fileio = q->fileio; 3000 3001 /* 3002 * Check if we need to dequeue the buffer. 3003 */ 3004 index = fileio->cur_index; 3005 if (index >= q->num_buffers) { 3006 /* 3007 * Call vb2_dqbuf to get buffer back. 3008 */ 3009 memset(&fileio->b, 0, sizeof(fileio->b)); 3010 fileio->b.type = q->type; 3011 fileio->b.memory = q->memory; 3012 if (is_multiplanar) { 3013 memset(&fileio->p, 0, sizeof(fileio->p)); 3014 fileio->b.m.planes = &fileio->p; 3015 fileio->b.length = 1; 3016 } 3017 ret = vb2_internal_dqbuf(q, &fileio->b, nonblock); 3018 dprintk(5, "vb2_dqbuf result: %d\n", ret); 3019 if (ret) 3020 return ret; 3021 fileio->dq_count += 1; 3022 3023 fileio->cur_index = index = fileio->b.index; 3024 buf = &fileio->bufs[index]; 3025 3026 /* 3027 * Get number of bytes filled by the driver 3028 */ 3029 buf->pos = 0; 3030 buf->queued = 0; 3031 buf->size = read ? vb2_get_plane_payload(q->bufs[index], 0) 3032 : vb2_plane_size(q->bufs[index], 0); 3033 /* Compensate for data_offset on read in the multiplanar case. */ 3034 if (is_multiplanar && read && 3035 fileio->b.m.planes[0].data_offset < buf->size) { 3036 buf->pos = fileio->b.m.planes[0].data_offset; 3037 buf->size -= buf->pos; 3038 } 3039 } else { 3040 buf = &fileio->bufs[index]; 3041 } 3042 3043 /* 3044 * Limit count on last few bytes of the buffer. 3045 */ 3046 if (buf->pos + count > buf->size) { 3047 count = buf->size - buf->pos; 3048 dprintk(5, "reducing read count: %zd\n", count); 3049 } 3050 3051 /* 3052 * Transfer data to userspace. 3053 */ 3054 dprintk(3, "copying %zd bytes - buffer %d, offset %u\n", 3055 count, index, buf->pos); 3056 if (read) 3057 ret = copy_to_user(data, buf->vaddr + buf->pos, count); 3058 else 3059 ret = copy_from_user(buf->vaddr + buf->pos, data, count); 3060 if (ret) { 3061 dprintk(3, "error copying data\n"); 3062 return -EFAULT; 3063 } 3064 3065 /* 3066 * Update counters. 3067 */ 3068 buf->pos += count; 3069 *ppos += count; 3070 3071 /* 3072 * Queue next buffer if required. 3073 */ 3074 if (buf->pos == buf->size || (!read && fileio->write_immediately)) { 3075 /* 3076 * Check if this is the last buffer to read. 3077 */ 3078 if (read && fileio->read_once && fileio->dq_count == 1) { 3079 dprintk(3, "read limit reached\n"); 3080 return __vb2_cleanup_fileio(q); 3081 } 3082 3083 /* 3084 * Call vb2_qbuf and give buffer to the driver. 3085 */ 3086 memset(&fileio->b, 0, sizeof(fileio->b)); 3087 fileio->b.type = q->type; 3088 fileio->b.memory = q->memory; 3089 fileio->b.index = index; 3090 fileio->b.bytesused = buf->pos; 3091 if (is_multiplanar) { 3092 memset(&fileio->p, 0, sizeof(fileio->p)); 3093 fileio->p.bytesused = buf->pos; 3094 fileio->b.m.planes = &fileio->p; 3095 fileio->b.length = 1; 3096 } 3097 if (set_timestamp) 3098 v4l2_get_timestamp(&fileio->b.timestamp); 3099 ret = vb2_internal_qbuf(q, &fileio->b); 3100 dprintk(5, "vb2_dbuf result: %d\n", ret); 3101 if (ret) 3102 return ret; 3103 3104 /* 3105 * Buffer has been queued, update the status 3106 */ 3107 buf->pos = 0; 3108 buf->queued = 1; 3109 buf->size = vb2_plane_size(q->bufs[index], 0); 3110 fileio->q_count += 1; 3111 /* 3112 * If we are queuing up buffers for the first time, then 3113 * increase initial_index by one. 3114 */ 3115 if (fileio->initial_index < q->num_buffers) 3116 fileio->initial_index++; 3117 /* 3118 * The next buffer to use is either a buffer that's going to be 3119 * queued for the first time (initial_index < q->num_buffers) 3120 * or it is equal to q->num_buffers, meaning that the next 3121 * time we need to dequeue a buffer since we've now queued up 3122 * all the 'first time' buffers. 3123 */ 3124 fileio->cur_index = fileio->initial_index; 3125 } 3126 3127 /* 3128 * Return proper number of bytes processed. 3129 */ 3130 if (ret == 0) 3131 ret = count; 3132 return ret; 3133} 3134 3135size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, 3136 loff_t *ppos, int nonblocking) 3137{ 3138 return __vb2_perform_fileio(q, data, count, ppos, nonblocking, 1); 3139} 3140EXPORT_SYMBOL_GPL(vb2_read); 3141 3142size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count, 3143 loff_t *ppos, int nonblocking) 3144{ 3145 return __vb2_perform_fileio(q, (char __user *) data, count, 3146 ppos, nonblocking, 0); 3147} 3148EXPORT_SYMBOL_GPL(vb2_write); 3149 3150struct vb2_threadio_data { 3151 struct task_struct *thread; 3152 vb2_thread_fnc fnc; 3153 void *priv; 3154 bool stop; 3155}; 3156 3157static int vb2_thread(void *data) 3158{ 3159 struct vb2_queue *q = data; 3160 struct vb2_threadio_data *threadio = q->threadio; 3161 struct vb2_fileio_data *fileio = q->fileio; 3162 bool set_timestamp = false; 3163 int prequeue = 0; 3164 int index = 0; 3165 int ret = 0; 3166 3167 if (V4L2_TYPE_IS_OUTPUT(q->type)) { 3168 prequeue = q->num_buffers; 3169 set_timestamp = 3170 (q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == 3171 V4L2_BUF_FLAG_TIMESTAMP_COPY; 3172 } 3173 3174 set_freezable(); 3175 3176 for (;;) { 3177 struct vb2_buffer *vb; 3178 3179 /* 3180 * Call vb2_dqbuf to get buffer back. 3181 */ 3182 memset(&fileio->b, 0, sizeof(fileio->b)); 3183 fileio->b.type = q->type; 3184 fileio->b.memory = q->memory; 3185 if (prequeue) { 3186 fileio->b.index = index++; 3187 prequeue--; 3188 } else { 3189 call_void_qop(q, wait_finish, q); 3190 if (!threadio->stop) 3191 ret = vb2_internal_dqbuf(q, &fileio->b, 0); 3192 call_void_qop(q, wait_prepare, q); 3193 dprintk(5, "file io: vb2_dqbuf result: %d\n", ret); 3194 } 3195 if (ret || threadio->stop) 3196 break; 3197 try_to_freeze(); 3198 3199 vb = q->bufs[fileio->b.index]; 3200 if (!(fileio->b.flags & V4L2_BUF_FLAG_ERROR)) 3201 if (threadio->fnc(vb, threadio->priv)) 3202 break; 3203 call_void_qop(q, wait_finish, q); 3204 if (set_timestamp) 3205 v4l2_get_timestamp(&fileio->b.timestamp); 3206 if (!threadio->stop) 3207 ret = vb2_internal_qbuf(q, &fileio->b); 3208 call_void_qop(q, wait_prepare, q); 3209 if (ret || threadio->stop) 3210 break; 3211 } 3212 3213 /* Hmm, linux becomes *very* unhappy without this ... */ 3214 while (!kthread_should_stop()) { 3215 set_current_state(TASK_INTERRUPTIBLE); 3216 schedule(); 3217 } 3218 return 0; 3219} 3220 3221/* 3222 * This function should not be used for anything else but the videobuf2-dvb 3223 * support. If you think you have another good use-case for this, then please 3224 * contact the linux-media mailinglist first. 3225 */ 3226int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv, 3227 const char *thread_name) 3228{ 3229 struct vb2_threadio_data *threadio; 3230 int ret = 0; 3231 3232 if (q->threadio) 3233 return -EBUSY; 3234 if (vb2_is_busy(q)) 3235 return -EBUSY; 3236 if (WARN_ON(q->fileio)) 3237 return -EBUSY; 3238 3239 threadio = kzalloc(sizeof(*threadio), GFP_KERNEL); 3240 if (threadio == NULL) 3241 return -ENOMEM; 3242 threadio->fnc = fnc; 3243 threadio->priv = priv; 3244 3245 ret = __vb2_init_fileio(q, !V4L2_TYPE_IS_OUTPUT(q->type)); 3246 dprintk(3, "file io: vb2_init_fileio result: %d\n", ret); 3247 if (ret) 3248 goto nomem; 3249 q->threadio = threadio; 3250 threadio->thread = kthread_run(vb2_thread, q, "vb2-%s", thread_name); 3251 if (IS_ERR(threadio->thread)) { 3252 ret = PTR_ERR(threadio->thread); 3253 threadio->thread = NULL; 3254 goto nothread; 3255 } 3256 return 0; 3257 3258nothread: 3259 __vb2_cleanup_fileio(q); 3260nomem: 3261 kfree(threadio); 3262 return ret; 3263} 3264EXPORT_SYMBOL_GPL(vb2_thread_start); 3265 3266int vb2_thread_stop(struct vb2_queue *q) 3267{ 3268 struct vb2_threadio_data *threadio = q->threadio; 3269 int err; 3270 3271 if (threadio == NULL) 3272 return 0; 3273 threadio->stop = true; 3274 /* Wake up all pending sleeps in the thread */ 3275 vb2_queue_error(q); 3276 err = kthread_stop(threadio->thread); 3277 __vb2_cleanup_fileio(q); 3278 threadio->thread = NULL; 3279 kfree(threadio); 3280 q->threadio = NULL; 3281 return err; 3282} 3283EXPORT_SYMBOL_GPL(vb2_thread_stop); 3284 3285/* 3286 * The following functions are not part of the vb2 core API, but are helper 3287 * functions that plug into struct v4l2_ioctl_ops, struct v4l2_file_operations 3288 * and struct vb2_ops. 3289 * They contain boilerplate code that most if not all drivers have to do 3290 * and so they simplify the driver code. 3291 */ 3292 3293/* The queue is busy if there is a owner and you are not that owner. */ 3294static inline bool vb2_queue_is_busy(struct video_device *vdev, struct file *file) 3295{ 3296 return vdev->queue->owner && vdev->queue->owner != file->private_data; 3297} 3298 3299/* vb2 ioctl helpers */ 3300 3301int vb2_ioctl_reqbufs(struct file *file, void *priv, 3302 struct v4l2_requestbuffers *p) 3303{ 3304 struct video_device *vdev = video_devdata(file); 3305 int res = __verify_memory_type(vdev->queue, p->memory, p->type); 3306 3307 if (res) 3308 return res; 3309 if (vb2_queue_is_busy(vdev, file)) 3310 return -EBUSY; 3311 res = __reqbufs(vdev->queue, p); 3312 /* If count == 0, then the owner has released all buffers and he 3313 is no longer owner of the queue. Otherwise we have a new owner. */ 3314 if (res == 0) 3315 vdev->queue->owner = p->count ? file->private_data : NULL; 3316 return res; 3317} 3318EXPORT_SYMBOL_GPL(vb2_ioctl_reqbufs); 3319 3320int vb2_ioctl_create_bufs(struct file *file, void *priv, 3321 struct v4l2_create_buffers *p) 3322{ 3323 struct video_device *vdev = video_devdata(file); 3324 int res = __verify_memory_type(vdev->queue, p->memory, p->format.type); 3325 3326 p->index = vdev->queue->num_buffers; 3327 /* If count == 0, then just check if memory and type are valid. 3328 Any -EBUSY result from __verify_memory_type can be mapped to 0. */ 3329 if (p->count == 0) 3330 return res != -EBUSY ? res : 0; 3331 if (res) 3332 return res; 3333 if (vb2_queue_is_busy(vdev, file)) 3334 return -EBUSY; 3335 res = __create_bufs(vdev->queue, p); 3336 if (res == 0) 3337 vdev->queue->owner = file->private_data; 3338 return res; 3339} 3340EXPORT_SYMBOL_GPL(vb2_ioctl_create_bufs); 3341 3342int vb2_ioctl_prepare_buf(struct file *file, void *priv, 3343 struct v4l2_buffer *p) 3344{ 3345 struct video_device *vdev = video_devdata(file); 3346 3347 if (vb2_queue_is_busy(vdev, file)) 3348 return -EBUSY; 3349 return vb2_prepare_buf(vdev->queue, p); 3350} 3351EXPORT_SYMBOL_GPL(vb2_ioctl_prepare_buf); 3352 3353int vb2_ioctl_querybuf(struct file *file, void *priv, struct v4l2_buffer *p) 3354{ 3355 struct video_device *vdev = video_devdata(file); 3356 3357 /* No need to call vb2_queue_is_busy(), anyone can query buffers. */ 3358 return vb2_querybuf(vdev->queue, p); 3359} 3360EXPORT_SYMBOL_GPL(vb2_ioctl_querybuf); 3361 3362int vb2_ioctl_qbuf(struct file *file, void *priv, struct v4l2_buffer *p) 3363{ 3364 struct video_device *vdev = video_devdata(file); 3365 3366 if (vb2_queue_is_busy(vdev, file)) 3367 return -EBUSY; 3368 return vb2_qbuf(vdev->queue, p); 3369} 3370EXPORT_SYMBOL_GPL(vb2_ioctl_qbuf); 3371 3372int vb2_ioctl_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p) 3373{ 3374 struct video_device *vdev = video_devdata(file); 3375 3376 if (vb2_queue_is_busy(vdev, file)) 3377 return -EBUSY; 3378 return vb2_dqbuf(vdev->queue, p, file->f_flags & O_NONBLOCK); 3379} 3380EXPORT_SYMBOL_GPL(vb2_ioctl_dqbuf); 3381 3382int vb2_ioctl_streamon(struct file *file, void *priv, enum v4l2_buf_type i) 3383{ 3384 struct video_device *vdev = video_devdata(file); 3385 3386 if (vb2_queue_is_busy(vdev, file)) 3387 return -EBUSY; 3388 return vb2_streamon(vdev->queue, i); 3389} 3390EXPORT_SYMBOL_GPL(vb2_ioctl_streamon); 3391 3392int vb2_ioctl_streamoff(struct file *file, void *priv, enum v4l2_buf_type i) 3393{ 3394 struct video_device *vdev = video_devdata(file); 3395 3396 if (vb2_queue_is_busy(vdev, file)) 3397 return -EBUSY; 3398 return vb2_streamoff(vdev->queue, i); 3399} 3400EXPORT_SYMBOL_GPL(vb2_ioctl_streamoff); 3401 3402int vb2_ioctl_expbuf(struct file *file, void *priv, struct v4l2_exportbuffer *p) 3403{ 3404 struct video_device *vdev = video_devdata(file); 3405 3406 if (vb2_queue_is_busy(vdev, file)) 3407 return -EBUSY; 3408 return vb2_expbuf(vdev->queue, p); 3409} 3410EXPORT_SYMBOL_GPL(vb2_ioctl_expbuf); 3411 3412/* v4l2_file_operations helpers */ 3413 3414int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma) 3415{ 3416 struct video_device *vdev = video_devdata(file); 3417 3418 return vb2_mmap(vdev->queue, vma); 3419} 3420EXPORT_SYMBOL_GPL(vb2_fop_mmap); 3421 3422int _vb2_fop_release(struct file *file, struct mutex *lock) 3423{ 3424 struct video_device *vdev = video_devdata(file); 3425 3426 if (lock) 3427 mutex_lock(lock); 3428 if (file->private_data == vdev->queue->owner) { 3429 vb2_queue_release(vdev->queue); 3430 vdev->queue->owner = NULL; 3431 } 3432 if (lock) 3433 mutex_unlock(lock); 3434 return v4l2_fh_release(file); 3435} 3436EXPORT_SYMBOL_GPL(_vb2_fop_release); 3437 3438int vb2_fop_release(struct file *file) 3439{ 3440 struct video_device *vdev = video_devdata(file); 3441 struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock; 3442 3443 return _vb2_fop_release(file, lock); 3444} 3445EXPORT_SYMBOL_GPL(vb2_fop_release); 3446 3447ssize_t vb2_fop_write(struct file *file, const char __user *buf, 3448 size_t count, loff_t *ppos) 3449{ 3450 struct video_device *vdev = video_devdata(file); 3451 struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock; 3452 int err = -EBUSY; 3453 3454 if (!(vdev->queue->io_modes & VB2_WRITE)) 3455 return -EINVAL; 3456 if (lock && mutex_lock_interruptible(lock)) 3457 return -ERESTARTSYS; 3458 if (vb2_queue_is_busy(vdev, file)) 3459 goto exit; 3460 err = vb2_write(vdev->queue, buf, count, ppos, 3461 file->f_flags & O_NONBLOCK); 3462 if (vdev->queue->fileio) 3463 vdev->queue->owner = file->private_data; 3464exit: 3465 if (lock) 3466 mutex_unlock(lock); 3467 return err; 3468} 3469EXPORT_SYMBOL_GPL(vb2_fop_write); 3470 3471ssize_t vb2_fop_read(struct file *file, char __user *buf, 3472 size_t count, loff_t *ppos) 3473{ 3474 struct video_device *vdev = video_devdata(file); 3475 struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock; 3476 int err = -EBUSY; 3477 3478 if (!(vdev->queue->io_modes & VB2_READ)) 3479 return -EINVAL; 3480 if (lock && mutex_lock_interruptible(lock)) 3481 return -ERESTARTSYS; 3482 if (vb2_queue_is_busy(vdev, file)) 3483 goto exit; 3484 err = vb2_read(vdev->queue, buf, count, ppos, 3485 file->f_flags & O_NONBLOCK); 3486 if (vdev->queue->fileio) 3487 vdev->queue->owner = file->private_data; 3488exit: 3489 if (lock) 3490 mutex_unlock(lock); 3491 return err; 3492} 3493EXPORT_SYMBOL_GPL(vb2_fop_read); 3494 3495unsigned int vb2_fop_poll(struct file *file, poll_table *wait) 3496{ 3497 struct video_device *vdev = video_devdata(file); 3498 struct vb2_queue *q = vdev->queue; 3499 struct mutex *lock = q->lock ? q->lock : vdev->lock; 3500 unsigned res; 3501 void *fileio; 3502 3503 /* 3504 * If this helper doesn't know how to lock, then you shouldn't be using 3505 * it but you should write your own. 3506 */ 3507 WARN_ON(!lock); 3508 3509 if (lock && mutex_lock_interruptible(lock)) 3510 return POLLERR; 3511 3512 fileio = q->fileio; 3513 3514 res = vb2_poll(vdev->queue, file, wait); 3515 3516 /* If fileio was started, then we have a new queue owner. */ 3517 if (!fileio && q->fileio) 3518 q->owner = file->private_data; 3519 if (lock) 3520 mutex_unlock(lock); 3521 return res; 3522} 3523EXPORT_SYMBOL_GPL(vb2_fop_poll); 3524 3525#ifndef CONFIG_MMU 3526unsigned long vb2_fop_get_unmapped_area(struct file *file, unsigned long addr, 3527 unsigned long len, unsigned long pgoff, unsigned long flags) 3528{ 3529 struct video_device *vdev = video_devdata(file); 3530 3531 return vb2_get_unmapped_area(vdev->queue, addr, len, pgoff, flags); 3532} 3533EXPORT_SYMBOL_GPL(vb2_fop_get_unmapped_area); 3534#endif 3535 3536/* vb2_ops helpers. Only use if vq->lock is non-NULL. */ 3537 3538void vb2_ops_wait_prepare(struct vb2_queue *vq) 3539{ 3540 mutex_unlock(vq->lock); 3541} 3542EXPORT_SYMBOL_GPL(vb2_ops_wait_prepare); 3543 3544void vb2_ops_wait_finish(struct vb2_queue *vq) 3545{ 3546 mutex_lock(vq->lock); 3547} 3548EXPORT_SYMBOL_GPL(vb2_ops_wait_finish); 3549 3550MODULE_DESCRIPTION("Driver helper framework for Video for Linux 2"); 3551MODULE_AUTHOR("Pawel Osciak <pawel@osciak.com>, Marek Szyprowski"); 3552MODULE_LICENSE("GPL"); 3553