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