Lines Matching refs:q
114 struct vb2_queue *q = vb->vb2_queue; in __set_timestamp() local
116 if (q->is_output) { in __set_timestamp()
121 if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == in __set_timestamp()
148 static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b, in vb2_queue_or_prepare_buf() argument
151 if (b->type != q->type) { in vb2_queue_or_prepare_buf()
156 if (b->index >= q->num_buffers) { in vb2_queue_or_prepare_buf()
161 if (q->bufs[b->index] == NULL) { in vb2_queue_or_prepare_buf()
167 if (b->memory != q->memory) { in vb2_queue_or_prepare_buf()
172 return __verify_planes_array(q->bufs[b->index], b); in vb2_queue_or_prepare_buf()
183 struct vb2_queue *q = vb->vb2_queue; in __fill_v4l2_buffer() local
200 if (q->is_multiplanar) { in __fill_v4l2_buffer()
212 if (q->memory == VB2_MEMORY_MMAP) in __fill_v4l2_buffer()
214 else if (q->memory == VB2_MEMORY_USERPTR) in __fill_v4l2_buffer()
216 else if (q->memory == VB2_MEMORY_DMABUF) in __fill_v4l2_buffer()
228 if (q->memory == VB2_MEMORY_MMAP) in __fill_v4l2_buffer()
230 else if (q->memory == VB2_MEMORY_USERPTR) in __fill_v4l2_buffer()
232 else if (q->memory == VB2_MEMORY_DMABUF) in __fill_v4l2_buffer()
240 b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK; in __fill_v4l2_buffer()
241 if ((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) != in __fill_v4l2_buffer()
248 b->flags |= q->timestamp_flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; in __fill_v4l2_buffer()
272 if (vb2_buffer_in_use(q, vb)) in __fill_v4l2_buffer()
286 struct vb2_queue *q = vb->vb2_queue; in __fill_vb2_buffer() local
297 if (b->field == V4L2_FIELD_ALTERNATE && q->is_output) { in __fill_vb2_buffer()
453 int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b) in vb2_querybuf() argument
458 if (b->type != q->type) { in vb2_querybuf()
463 if (b->index >= q->num_buffers) { in vb2_querybuf()
467 vb = q->bufs[b->index]; in vb2_querybuf()
470 return ret ? ret : vb2_core_querybuf(q, b->index, b); in vb2_querybuf()
481 int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req) in vb2_reqbufs() argument
483 int ret = vb2_verify_memory_type(q, req->memory, req->type); in vb2_reqbufs()
485 return ret ? ret : vb2_core_reqbufs(q, req->memory, &req->count); in vb2_reqbufs()
504 int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b) in vb2_prepare_buf() argument
508 if (vb2_fileio_is_active(q)) { in vb2_prepare_buf()
513 ret = vb2_queue_or_prepare_buf(q, b, "prepare_buf"); in vb2_prepare_buf()
515 return ret ? ret : vb2_core_prepare_buf(q, b->index, b); in vb2_prepare_buf()
526 int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create) in vb2_create_bufs() argument
528 int ret = vb2_verify_memory_type(q, create->memory, in vb2_create_bufs()
531 create->index = q->num_buffers; in vb2_create_bufs()
534 return ret ? ret : vb2_core_create_bufs(q, create->memory, in vb2_create_bufs()
539 static int vb2_internal_qbuf(struct vb2_queue *q, struct v4l2_buffer *b) in vb2_internal_qbuf() argument
541 int ret = vb2_queue_or_prepare_buf(q, b, "qbuf"); in vb2_internal_qbuf()
543 return ret ? ret : vb2_core_qbuf(q, b->index, b); in vb2_internal_qbuf()
563 int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b) in vb2_qbuf() argument
565 if (vb2_fileio_is_active(q)) { in vb2_qbuf()
570 return vb2_internal_qbuf(q, b); in vb2_qbuf()
574 static int vb2_internal_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, in vb2_internal_dqbuf() argument
579 if (b->type != q->type) { in vb2_internal_dqbuf()
584 ret = vb2_core_dqbuf(q, b, nonblocking); in vb2_internal_dqbuf()
586 if (!ret && !q->is_output && in vb2_internal_dqbuf()
588 q->last_buffer_dequeued = true; in vb2_internal_dqbuf()
614 int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking) in vb2_dqbuf() argument
616 if (vb2_fileio_is_active(q)) { in vb2_dqbuf()
620 return vb2_internal_dqbuf(q, b, nonblocking); in vb2_dqbuf()
637 int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type) in vb2_streamon() argument
639 if (vb2_fileio_is_active(q)) { in vb2_streamon()
643 return vb2_core_streamon(q, type); in vb2_streamon()
662 int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type) in vb2_streamoff() argument
664 if (vb2_fileio_is_active(q)) { in vb2_streamoff()
668 return vb2_core_streamoff(q, type); in vb2_streamoff()
681 int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb) in vb2_expbuf() argument
683 return vb2_core_expbuf(q, &eb->fd, eb->type, eb->index, in vb2_expbuf()
699 int vb2_queue_init(struct vb2_queue *q) in vb2_queue_init() argument
704 if (WARN_ON(!q) || in vb2_queue_init()
705 WARN_ON(q->timestamp_flags & in vb2_queue_init()
711 WARN_ON((q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == in vb2_queue_init()
720 if (q->buf_struct_size == 0) in vb2_queue_init()
721 q->buf_struct_size = sizeof(struct vb2_v4l2_buffer); in vb2_queue_init()
723 q->buf_ops = &v4l2_buf_ops; in vb2_queue_init()
724 q->is_multiplanar = V4L2_TYPE_IS_MULTIPLANAR(q->type); in vb2_queue_init()
725 q->is_output = V4L2_TYPE_IS_OUTPUT(q->type); in vb2_queue_init()
727 return vb2_core_queue_init(q); in vb2_queue_init()
731 static int __vb2_init_fileio(struct vb2_queue *q, int read);
732 static int __vb2_cleanup_fileio(struct vb2_queue *q);
742 void vb2_queue_release(struct vb2_queue *q) in vb2_queue_release() argument
744 __vb2_cleanup_fileio(q); in vb2_queue_release()
745 vb2_core_queue_release(q); in vb2_queue_release()
768 unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait) in vb2_poll() argument
785 if (!q->is_output && !(req_events & (POLLIN | POLLRDNORM))) in vb2_poll()
787 if (q->is_output && !(req_events & (POLLOUT | POLLWRNORM))) in vb2_poll()
793 if (q->num_buffers == 0 && !vb2_fileio_is_active(q)) { in vb2_poll()
794 if (!q->is_output && (q->io_modes & VB2_READ) && in vb2_poll()
796 if (__vb2_init_fileio(q, 1)) in vb2_poll()
799 if (q->is_output && (q->io_modes & VB2_WRITE) && in vb2_poll()
801 if (__vb2_init_fileio(q, 0)) in vb2_poll()
814 if (!vb2_is_streaming(q) || q->error) in vb2_poll()
821 if (q->waiting_for_buffers) in vb2_poll()
828 if (q->is_output && q->fileio && q->queued_count < q->num_buffers) in vb2_poll()
831 if (list_empty(&q->done_list)) { in vb2_poll()
836 if (q->last_buffer_dequeued) in vb2_poll()
839 poll_wait(file, &q->done_wq, wait); in vb2_poll()
845 spin_lock_irqsave(&q->done_lock, flags); in vb2_poll()
846 if (!list_empty(&q->done_list)) in vb2_poll()
847 vb = list_first_entry(&q->done_list, struct vb2_buffer, in vb2_poll()
849 spin_unlock_irqrestore(&q->done_lock, flags); in vb2_poll()
853 return (q->is_output) ? in vb2_poll()
917 static int __vb2_init_fileio(struct vb2_queue *q, int read) in __vb2_init_fileio() argument
926 if (WARN_ON((read && !(q->io_modes & VB2_READ)) || in __vb2_init_fileio()
927 (!read && !(q->io_modes & VB2_WRITE)))) in __vb2_init_fileio()
933 if (!q->mem_ops->vaddr) in __vb2_init_fileio()
939 if (q->streaming || q->num_buffers > 0) in __vb2_init_fileio()
948 (read) ? "read" : "write", count, q->fileio_read_once, in __vb2_init_fileio()
949 q->fileio_write_immediately); in __vb2_init_fileio()
955 fileio->read_once = q->fileio_read_once; in __vb2_init_fileio()
956 fileio->write_immediately = q->fileio_write_immediately; in __vb2_init_fileio()
964 fileio->req.type = q->type; in __vb2_init_fileio()
965 q->fileio = fileio; in __vb2_init_fileio()
966 ret = vb2_core_reqbufs(q, fileio->req.memory, &fileio->req.count); in __vb2_init_fileio()
974 if (q->bufs[0]->num_planes != 1) { in __vb2_init_fileio()
982 for (i = 0; i < q->num_buffers; i++) { in __vb2_init_fileio()
983 fileio->bufs[i].vaddr = vb2_plane_vaddr(q->bufs[i], 0); in __vb2_init_fileio()
988 fileio->bufs[i].size = vb2_plane_size(q->bufs[i], 0); in __vb2_init_fileio()
995 bool is_multiplanar = q->is_multiplanar; in __vb2_init_fileio()
1000 for (i = 0; i < q->num_buffers; i++) { in __vb2_init_fileio()
1004 b->type = q->type; in __vb2_init_fileio()
1010 b->memory = q->memory; in __vb2_init_fileio()
1012 ret = vb2_internal_qbuf(q, b); in __vb2_init_fileio()
1021 fileio->initial_index = q->num_buffers; in __vb2_init_fileio()
1022 fileio->cur_index = q->num_buffers; in __vb2_init_fileio()
1028 ret = vb2_core_streamon(q, q->type); in __vb2_init_fileio()
1036 vb2_core_reqbufs(q, fileio->req.memory, &fileio->req.count); in __vb2_init_fileio()
1039 q->fileio = NULL; in __vb2_init_fileio()
1048 static int __vb2_cleanup_fileio(struct vb2_queue *q) in __vb2_cleanup_fileio() argument
1050 struct vb2_fileio_data *fileio = q->fileio; in __vb2_cleanup_fileio()
1053 vb2_core_streamoff(q, q->type); in __vb2_cleanup_fileio()
1054 q->fileio = NULL; in __vb2_cleanup_fileio()
1056 vb2_reqbufs(q, &fileio->req); in __vb2_cleanup_fileio()
1072 static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_t count, in __vb2_perform_fileio() argument
1077 bool is_multiplanar = q->is_multiplanar; in __vb2_perform_fileio()
1084 (q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == in __vb2_perform_fileio()
1098 if (!vb2_fileio_is_active(q)) { in __vb2_perform_fileio()
1099 ret = __vb2_init_fileio(q, read); in __vb2_perform_fileio()
1104 fileio = q->fileio; in __vb2_perform_fileio()
1110 if (index >= q->num_buffers) { in __vb2_perform_fileio()
1115 fileio->b.type = q->type; in __vb2_perform_fileio()
1116 fileio->b.memory = q->memory; in __vb2_perform_fileio()
1122 ret = vb2_internal_dqbuf(q, &fileio->b, nonblock); in __vb2_perform_fileio()
1136 buf->size = read ? vb2_get_plane_payload(q->bufs[index], 0) in __vb2_perform_fileio()
1137 : vb2_plane_size(q->bufs[index], 0); in __vb2_perform_fileio()
1185 return __vb2_cleanup_fileio(q); in __vb2_perform_fileio()
1192 fileio->b.type = q->type; in __vb2_perform_fileio()
1193 fileio->b.memory = q->memory; in __vb2_perform_fileio()
1204 ret = vb2_internal_qbuf(q, &fileio->b); in __vb2_perform_fileio()
1214 buf->size = vb2_plane_size(q->bufs[index], 0); in __vb2_perform_fileio()
1220 if (fileio->initial_index < q->num_buffers) in __vb2_perform_fileio()
1240 size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, in vb2_read() argument
1243 return __vb2_perform_fileio(q, data, count, ppos, nonblocking, 1); in vb2_read()
1247 size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count, in vb2_write() argument
1250 return __vb2_perform_fileio(q, (char __user *) data, count, in vb2_write()
1264 struct vb2_queue *q = data; in vb2_thread() local
1265 struct vb2_threadio_data *threadio = q->threadio; in vb2_thread()
1266 struct vb2_fileio_data *fileio = q->fileio; in vb2_thread()
1272 if (q->is_output) { in vb2_thread()
1273 prequeue = q->num_buffers; in vb2_thread()
1275 (q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) == in vb2_thread()
1288 fileio->b.type = q->type; in vb2_thread()
1289 fileio->b.memory = q->memory; in vb2_thread()
1294 call_void_qop(q, wait_finish, q); in vb2_thread()
1296 ret = vb2_internal_dqbuf(q, &fileio->b, 0); in vb2_thread()
1297 call_void_qop(q, wait_prepare, q); in vb2_thread()
1304 vb = q->bufs[fileio->b.index]; in vb2_thread()
1308 call_void_qop(q, wait_finish, q); in vb2_thread()
1312 ret = vb2_internal_qbuf(q, &fileio->b); in vb2_thread()
1313 call_void_qop(q, wait_prepare, q); in vb2_thread()
1331 int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv, in vb2_thread_start() argument
1337 if (q->threadio) in vb2_thread_start()
1339 if (vb2_is_busy(q)) in vb2_thread_start()
1341 if (WARN_ON(q->fileio)) in vb2_thread_start()
1350 ret = __vb2_init_fileio(q, !q->is_output); in vb2_thread_start()
1354 q->threadio = threadio; in vb2_thread_start()
1355 threadio->thread = kthread_run(vb2_thread, q, "vb2-%s", thread_name); in vb2_thread_start()
1364 __vb2_cleanup_fileio(q); in vb2_thread_start()
1371 int vb2_thread_stop(struct vb2_queue *q) in vb2_thread_stop() argument
1373 struct vb2_threadio_data *threadio = q->threadio; in vb2_thread_stop()
1380 vb2_queue_error(q); in vb2_thread_stop()
1382 __vb2_cleanup_fileio(q); in vb2_thread_stop()
1385 q->threadio = NULL; in vb2_thread_stop()
1607 struct vb2_queue *q = vdev->queue; in vb2_fop_poll() local
1608 struct mutex *lock = q->lock ? q->lock : vdev->lock; in vb2_fop_poll()
1621 fileio = q->fileio; in vb2_fop_poll()
1626 if (!fileio && q->fileio) in vb2_fop_poll()
1627 q->owner = file->private_data; in vb2_fop_poll()