Lines Matching refs:queue

41 uvc_queue_to_stream(struct uvc_video_queue *queue)  in uvc_queue_to_stream()  argument
43 return container_of(queue, struct uvc_streaming, queue); in uvc_queue_to_stream()
51 static void uvc_queue_return_buffers(struct uvc_video_queue *queue, in uvc_queue_return_buffers() argument
58 while (!list_empty(&queue->irqqueue)) { in uvc_queue_return_buffers()
59 struct uvc_buffer *buf = list_first_entry(&queue->irqqueue, in uvc_queue_return_buffers()
61 queue); in uvc_queue_return_buffers()
62 list_del(&buf->queue); in uvc_queue_return_buffers()
77 struct uvc_video_queue *queue = vb2_get_drv_priv(vq); in uvc_queue_setup() local
78 struct uvc_streaming *stream = uvc_queue_to_stream(queue); in uvc_queue_setup()
95 struct uvc_video_queue *queue = vb2_get_drv_priv(vb->vb2_queue); in uvc_buffer_prepare() local
104 if (unlikely(queue->flags & UVC_QUEUE_DISCONNECTED)) in uvc_buffer_prepare()
122 struct uvc_video_queue *queue = vb2_get_drv_priv(vb->vb2_queue); in uvc_buffer_queue() local
126 spin_lock_irqsave(&queue->irqlock, flags); in uvc_buffer_queue()
127 if (likely(!(queue->flags & UVC_QUEUE_DISCONNECTED))) { in uvc_buffer_queue()
128 list_add_tail(&buf->queue, &queue->irqqueue); in uvc_buffer_queue()
137 spin_unlock_irqrestore(&queue->irqlock, flags); in uvc_buffer_queue()
143 struct uvc_video_queue *queue = vb2_get_drv_priv(vb->vb2_queue); in uvc_buffer_finish() local
144 struct uvc_streaming *stream = uvc_queue_to_stream(queue); in uvc_buffer_finish()
153 struct uvc_video_queue *queue = vb2_get_drv_priv(vq); in uvc_start_streaming() local
154 struct uvc_streaming *stream = uvc_queue_to_stream(queue); in uvc_start_streaming()
158 queue->buf_used = 0; in uvc_start_streaming()
164 spin_lock_irqsave(&queue->irqlock, flags); in uvc_start_streaming()
165 uvc_queue_return_buffers(queue, UVC_BUF_STATE_QUEUED); in uvc_start_streaming()
166 spin_unlock_irqrestore(&queue->irqlock, flags); in uvc_start_streaming()
173 struct uvc_video_queue *queue = vb2_get_drv_priv(vq); in uvc_stop_streaming() local
174 struct uvc_streaming *stream = uvc_queue_to_stream(queue); in uvc_stop_streaming()
179 spin_lock_irqsave(&queue->irqlock, flags); in uvc_stop_streaming()
180 uvc_queue_return_buffers(queue, UVC_BUF_STATE_ERROR); in uvc_stop_streaming()
181 spin_unlock_irqrestore(&queue->irqlock, flags); in uvc_stop_streaming()
195 int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type, in uvc_queue_init() argument
200 queue->queue.type = type; in uvc_queue_init()
201 queue->queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF; in uvc_queue_init()
202 queue->queue.drv_priv = queue; in uvc_queue_init()
203 queue->queue.buf_struct_size = sizeof(struct uvc_buffer); in uvc_queue_init()
204 queue->queue.ops = &uvc_queue_qops; in uvc_queue_init()
205 queue->queue.mem_ops = &vb2_vmalloc_memops; in uvc_queue_init()
206 queue->queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC in uvc_queue_init()
208 queue->queue.lock = &queue->mutex; in uvc_queue_init()
209 ret = vb2_queue_init(&queue->queue); in uvc_queue_init()
213 mutex_init(&queue->mutex); in uvc_queue_init()
214 spin_lock_init(&queue->irqlock); in uvc_queue_init()
215 INIT_LIST_HEAD(&queue->irqqueue); in uvc_queue_init()
216 queue->flags = drop_corrupted ? UVC_QUEUE_DROP_CORRUPTED : 0; in uvc_queue_init()
221 void uvc_queue_release(struct uvc_video_queue *queue) in uvc_queue_release() argument
223 mutex_lock(&queue->mutex); in uvc_queue_release()
224 vb2_queue_release(&queue->queue); in uvc_queue_release()
225 mutex_unlock(&queue->mutex); in uvc_queue_release()
232 int uvc_request_buffers(struct uvc_video_queue *queue, in uvc_request_buffers() argument
237 mutex_lock(&queue->mutex); in uvc_request_buffers()
238 ret = vb2_reqbufs(&queue->queue, rb); in uvc_request_buffers()
239 mutex_unlock(&queue->mutex); in uvc_request_buffers()
244 int uvc_query_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf) in uvc_query_buffer() argument
248 mutex_lock(&queue->mutex); in uvc_query_buffer()
249 ret = vb2_querybuf(&queue->queue, buf); in uvc_query_buffer()
250 mutex_unlock(&queue->mutex); in uvc_query_buffer()
255 int uvc_create_buffers(struct uvc_video_queue *queue, in uvc_create_buffers() argument
260 mutex_lock(&queue->mutex); in uvc_create_buffers()
261 ret = vb2_create_bufs(&queue->queue, cb); in uvc_create_buffers()
262 mutex_unlock(&queue->mutex); in uvc_create_buffers()
267 int uvc_queue_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf) in uvc_queue_buffer() argument
271 mutex_lock(&queue->mutex); in uvc_queue_buffer()
272 ret = vb2_qbuf(&queue->queue, buf); in uvc_queue_buffer()
273 mutex_unlock(&queue->mutex); in uvc_queue_buffer()
278 int uvc_export_buffer(struct uvc_video_queue *queue, in uvc_export_buffer() argument
283 mutex_lock(&queue->mutex); in uvc_export_buffer()
284 ret = vb2_expbuf(&queue->queue, exp); in uvc_export_buffer()
285 mutex_unlock(&queue->mutex); in uvc_export_buffer()
290 int uvc_dequeue_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf, in uvc_dequeue_buffer() argument
295 mutex_lock(&queue->mutex); in uvc_dequeue_buffer()
296 ret = vb2_dqbuf(&queue->queue, buf, nonblocking); in uvc_dequeue_buffer()
297 mutex_unlock(&queue->mutex); in uvc_dequeue_buffer()
302 int uvc_queue_streamon(struct uvc_video_queue *queue, enum v4l2_buf_type type) in uvc_queue_streamon() argument
306 mutex_lock(&queue->mutex); in uvc_queue_streamon()
307 ret = vb2_streamon(&queue->queue, type); in uvc_queue_streamon()
308 mutex_unlock(&queue->mutex); in uvc_queue_streamon()
313 int uvc_queue_streamoff(struct uvc_video_queue *queue, enum v4l2_buf_type type) in uvc_queue_streamoff() argument
317 mutex_lock(&queue->mutex); in uvc_queue_streamoff()
318 ret = vb2_streamoff(&queue->queue, type); in uvc_queue_streamoff()
319 mutex_unlock(&queue->mutex); in uvc_queue_streamoff()
324 int uvc_queue_mmap(struct uvc_video_queue *queue, struct vm_area_struct *vma) in uvc_queue_mmap() argument
326 return vb2_mmap(&queue->queue, vma); in uvc_queue_mmap()
330 unsigned long uvc_queue_get_unmapped_area(struct uvc_video_queue *queue, in uvc_queue_get_unmapped_area() argument
333 return vb2_get_unmapped_area(&queue->queue, 0, 0, pgoff, 0); in uvc_queue_get_unmapped_area()
337 unsigned int uvc_queue_poll(struct uvc_video_queue *queue, struct file *file, in uvc_queue_poll() argument
342 mutex_lock(&queue->mutex); in uvc_queue_poll()
343 ret = vb2_poll(&queue->queue, file, wait); in uvc_queue_poll()
344 mutex_unlock(&queue->mutex); in uvc_queue_poll()
356 int uvc_queue_allocated(struct uvc_video_queue *queue) in uvc_queue_allocated() argument
360 mutex_lock(&queue->mutex); in uvc_queue_allocated()
361 allocated = vb2_is_busy(&queue->queue); in uvc_queue_allocated()
362 mutex_unlock(&queue->mutex); in uvc_queue_allocated()
379 void uvc_queue_cancel(struct uvc_video_queue *queue, int disconnect) in uvc_queue_cancel() argument
383 spin_lock_irqsave(&queue->irqlock, flags); in uvc_queue_cancel()
384 uvc_queue_return_buffers(queue, UVC_BUF_STATE_ERROR); in uvc_queue_cancel()
392 queue->flags |= UVC_QUEUE_DISCONNECTED; in uvc_queue_cancel()
393 spin_unlock_irqrestore(&queue->irqlock, flags); in uvc_queue_cancel()
396 struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, in uvc_queue_next_buffer() argument
402 if ((queue->flags & UVC_QUEUE_DROP_CORRUPTED) && buf->error) { in uvc_queue_next_buffer()
410 spin_lock_irqsave(&queue->irqlock, flags); in uvc_queue_next_buffer()
411 list_del(&buf->queue); in uvc_queue_next_buffer()
412 if (!list_empty(&queue->irqqueue)) in uvc_queue_next_buffer()
413 nextbuf = list_first_entry(&queue->irqqueue, struct uvc_buffer, in uvc_queue_next_buffer()
414 queue); in uvc_queue_next_buffer()
417 spin_unlock_irqrestore(&queue->irqlock, flags); in uvc_queue_next_buffer()