linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-media@vger.kernel.org
Cc: hverkuil@xs4all.nl, Hans Verkuil <hans.verkuil@cisco.com>
Subject: [PATCH v14 19/36] videodev2.h: Add request_fd field to v4l2_buffer
Date: Mon, 21 May 2018 11:54:44 +0300	[thread overview]
Message-ID: <20180521085501.16861-20-sakari.ailus@linux.intel.com> (raw)
In-Reply-To: <20180521085501.16861-1-sakari.ailus@linux.intel.com>

From: Hans Verkuil <hans.verkuil@cisco.com>

When queuing buffers allow for passing the request that should
be associated with this buffer.

If V4L2_BUF_FLAG_REQUEST_FD is set, then request_fd is used as
the file descriptor.

If a buffer is stored in a request, but not yet queued to the
driver, then V4L2_BUF_FLAG_IN_REQUEST is set.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/common/videobuf2/videobuf2-v4l2.c |  2 +-
 drivers/media/usb/cpia2/cpia2_v4l.c             |  2 +-
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c   |  9 ++++++---
 drivers/media/v4l2-core/v4l2-ioctl.c            |  4 ++--
 include/uapi/linux/videodev2.h                  | 10 +++++++++-
 5 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c b/drivers/media/common/videobuf2/videobuf2-v4l2.c
index 886a2d8d5c6c4..4e9c77f218584 100644
--- a/drivers/media/common/videobuf2/videobuf2-v4l2.c
+++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c
@@ -204,7 +204,7 @@ static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
 	b->timecode = vbuf->timecode;
 	b->sequence = vbuf->sequence;
 	b->reserved2 = 0;
-	b->reserved = 0;
+	b->request_fd = 0;
 
 	if (q->is_multiplanar) {
 		/*
diff --git a/drivers/media/usb/cpia2/cpia2_v4l.c b/drivers/media/usb/cpia2/cpia2_v4l.c
index 99f106b13280f..13aee9f67d05c 100644
--- a/drivers/media/usb/cpia2/cpia2_v4l.c
+++ b/drivers/media/usb/cpia2/cpia2_v4l.c
@@ -949,7 +949,7 @@ static int cpia2_dqbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
 	buf->m.offset = cam->buffers[buf->index].data - cam->frame_buffer;
 	buf->length = cam->frame_size;
 	buf->reserved2 = 0;
-	buf->reserved = 0;
+	buf->request_fd = 0;
 	memset(&buf->timecode, 0, sizeof(buf->timecode));
 
 	DBG("DQBUF #%d status:%d seq:%d length:%d\n", buf->index,
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index dcce86c1fe40d..633465d21d047 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -482,7 +482,7 @@ struct v4l2_buffer32 {
 	} m;
 	__u32			length;
 	__u32			reserved2;
-	__u32			reserved;
+	__s32			request_fd;
 };
 
 static int get_v4l2_plane32(struct v4l2_plane __user *p64,
@@ -581,6 +581,7 @@ static int get_v4l2_buffer32(struct v4l2_buffer __user *p64,
 {
 	u32 type;
 	u32 length;
+	s32 request_fd;
 	enum v4l2_memory memory;
 	struct v4l2_plane32 __user *uplane32;
 	struct v4l2_plane __user *uplane;
@@ -595,7 +596,9 @@ static int get_v4l2_buffer32(struct v4l2_buffer __user *p64,
 	    get_user(memory, &p32->memory) ||
 	    put_user(memory, &p64->memory) ||
 	    get_user(length, &p32->length) ||
-	    put_user(length, &p64->length))
+	    put_user(length, &p64->length) ||
+	    get_user(request_fd, &p32->request_fd) ||
+	    put_user(request_fd, &p64->request_fd))
 		return -EFAULT;
 
 	if (V4L2_TYPE_IS_OUTPUT(type))
@@ -699,7 +702,7 @@ static int put_v4l2_buffer32(struct v4l2_buffer __user *p64,
 	    copy_in_user(&p32->timecode, &p64->timecode, sizeof(p64->timecode)) ||
 	    assign_in_user(&p32->sequence, &p64->sequence) ||
 	    assign_in_user(&p32->reserved2, &p64->reserved2) ||
-	    assign_in_user(&p32->reserved, &p64->reserved) ||
+	    assign_in_user(&p32->request_fd, &p64->request_fd) ||
 	    get_user(length, &p64->length) ||
 	    put_user(length, &p32->length))
 		return -EFAULT;
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index e91891c587177..c7ce5b195dba2 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -437,13 +437,13 @@ static void v4l_print_buffer(const void *arg, bool write_only)
 	const struct v4l2_plane *plane;
 	int i;
 
-	pr_cont("%02ld:%02d:%02d.%08ld index=%d, type=%s, flags=0x%08x, field=%s, sequence=%d, memory=%s",
+	pr_cont("%02ld:%02d:%02d.%08ld index=%d, type=%s, request_fd=%d, flags=0x%08x, field=%s, sequence=%d, memory=%s",
 			p->timestamp.tv_sec / 3600,
 			(int)(p->timestamp.tv_sec / 60) % 60,
 			(int)(p->timestamp.tv_sec % 60),
 			(long)p->timestamp.tv_usec,
 			p->index,
-			prt_names(p->type, v4l2_type_names),
+			prt_names(p->type, v4l2_type_names), p->request_fd,
 			p->flags, prt_names(p->field, v4l2_field_names),
 			p->sequence, prt_names(p->memory, v4l2_memory_names));
 
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 16b53b82496c4..1f6c4b52baaeb 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -910,6 +910,7 @@ struct v4l2_plane {
  * @length:	size in bytes of the buffer (NOT its payload) for single-plane
  *		buffers (when type != *_MPLANE); number of elements in the
  *		planes array for multi-plane buffers
+ * @request_fd: fd of the request that this buffer should use
  *
  * Contains data exchanged by application and driver using one of the Streaming
  * I/O methods.
@@ -934,7 +935,10 @@ struct v4l2_buffer {
 	} m;
 	__u32			length;
 	__u32			reserved2;
-	__u32			reserved;
+	union {
+		__s32		request_fd;
+		__u32		reserved;
+	};
 };
 
 /*  Flags for 'flags' field */
@@ -952,6 +956,8 @@ struct v4l2_buffer {
 #define V4L2_BUF_FLAG_BFRAME			0x00000020
 /* Buffer is ready, but the data contained within is corrupted. */
 #define V4L2_BUF_FLAG_ERROR			0x00000040
+/* Buffer is added to an unqueued request */
+#define V4L2_BUF_FLAG_IN_REQUEST		0x00000080
 /* timecode field is valid */
 #define V4L2_BUF_FLAG_TIMECODE			0x00000100
 /* Buffer is prepared for queuing */
@@ -970,6 +976,8 @@ struct v4l2_buffer {
 #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE		0x00010000
 /* mem2mem encoder/decoder */
 #define V4L2_BUF_FLAG_LAST			0x00100000
+/* request_fd is valid */
+#define V4L2_BUF_FLAG_REQUEST_FD		0x00800000
 
 /**
  * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
-- 
2.11.0

  parent reply	other threads:[~2018-05-21  8:55 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-21  8:54 [PATCH v14 00/36] Request API Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 01/36] uapi/linux/media.h: add request API Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 02/36] media-request: implement media requests Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 03/36] media-request: add media_request_get_by_fd Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 04/36] media-request: add media_request_object_find Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 05/36] media-request: Make request state an enum Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 06/36] media-request: Add support for updating request objects optimally Sakari Ailus
2018-05-21 10:29   ` [PATCH v14.1 " Sakari Ailus
2018-05-21 11:33     ` [PATCH v14.2 " Sakari Ailus
2018-05-23  9:50   ` [PATCH " Hans Verkuil
2018-05-21  8:54 ` [PATCH v14 07/36] media-request: Add a sanity check for the media request state Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 08/36] media: doc: Add media-request.h header to documentation build Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 09/36] v4l2-dev: lock req_queue_mutex Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 10/36] videodev2.h: add request_fd field to v4l2_ext_controls Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 11/36] v4l2-ctrls: v4l2_ctrl_add_handler: add from_other_dev Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 12/36] v4l2-ctrls: prepare internal structs for request API Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 13/36] v4l2-ctrls: alloc memory for p_req Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 14/36] v4l2-ctrls: use ref in helper instead of ctrl Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 15/36] v4l2-ctrls: add core request support Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 16/36] v4l2-ctrls: Add documentation for control request support functions Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 17/36] v4l2-ctrls: support g/s_ext_ctrls for requests Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 18/36] v4l2-ctrls: Lock the request for updating during S_EXT_CTRLS Sakari Ailus
2018-05-21  8:54 ` Sakari Ailus [this message]
2018-05-21  8:54 ` [PATCH v14 20/36] vb2: store userspace data in vb2_v4l2_buffer Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 21/36] videobuf2-core: embed media_request_object Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 22/36] videobuf2-core: integrate with media requests Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 23/36] videobuf2-v4l2: " Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 24/36] videobuf2-v4l2: Lock the media request for update for QBUF Sakari Ailus
2018-05-23 10:17   ` Hans Verkuil
2018-05-21  8:54 ` [PATCH v14 25/36] videobuf2-core: Make request state an enum Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 26/36] videobuf2-core: add request helper functions Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 27/36] videobuf2-v4l2: add vb2_request_queue/validate helpers Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 28/36] v4l2-mem2mem: add vb2_m2m_request_queue Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 29/36] Documentation: v4l: document request API Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 30/36] media: vim2m: add media device Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 31/36] vim2m: use workqueue Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 32/36] vim2m: support requests Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 33/36] vivid: add mc Sakari Ailus
2018-05-21  8:54 ` [PATCH v14 34/36] vivid: add request support Sakari Ailus
2018-05-21  8:55 ` [PATCH v14 35/36] RFC: media-requests: add debugfs node Sakari Ailus
2018-05-21  8:55 ` [PATCH v14 36/36] v4l: m2m: Simplify exiting the function in v4l2_m2m_try_schedule Sakari Ailus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180521085501.16861-20-sakari.ailus@linux.intel.com \
    --to=sakari.ailus@linux.intel.com \
    --cc=hans.verkuil@cisco.com \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).