X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Fbrcm2708%2Fpatches-4.19%2F950-0268-staging-mmal-vchiq-Make-a-mmal_buf-struct-for-passin.patch;fp=target%2Flinux%2Fbrcm2708%2Fpatches-4.19%2F950-0268-staging-mmal-vchiq-Make-a-mmal_buf-struct-for-passin.patch;h=0000000000000000000000000000000000000000;hb=67dcc43f3a22dc3a7ac07a7065971b426feeb043;hp=b3c8c2ad0efad6e98a5c1712ddeffbd3a19e3161;hpb=47a93a810f78adce5a130d287f82b28e9b54313c;p=openwrt%2Fstaging%2Fchunkeey.git diff --git a/target/linux/brcm2708/patches-4.19/950-0268-staging-mmal-vchiq-Make-a-mmal_buf-struct-for-passin.patch b/target/linux/brcm2708/patches-4.19/950-0268-staging-mmal-vchiq-Make-a-mmal_buf-struct-for-passin.patch deleted file mode 100644 index b3c8c2ad0e..0000000000 --- a/target/linux/brcm2708/patches-4.19/950-0268-staging-mmal-vchiq-Make-a-mmal_buf-struct-for-passin.patch +++ /dev/null @@ -1,280 +0,0 @@ -From 862ee4fbd8c6b984f920b88908e33951e51134ca Mon Sep 17 00:00:00 2001 -From: Dave Stevenson -Date: Mon, 24 Sep 2018 17:33:37 +0100 -Subject: [PATCH 268/806] staging: mmal-vchiq: Make a mmal_buf struct for - passing parameters - -The callback from vchi_mmal to the client was growing lots of extra -parameters. Consolidate them into a single struct instead of -growing the list further. -The struct is associated with the client buffer, therefore there -are various changes to setup various containers for the struct, -and pass the appropriate members. - -Signed-off-by: Dave Stevenson ---- - .../bcm2835-camera/bcm2835-camera.c | 62 ++++++++++++------- - .../vc04_services/vchiq-mmal/mmal-common.h | 5 ++ - .../vc04_services/vchiq-mmal/mmal-vchiq.c | 29 ++++++--- - .../vc04_services/vchiq-mmal/mmal-vchiq.h | 3 +- - 4 files changed, 64 insertions(+), 35 deletions(-) - ---- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c -+++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c -@@ -72,6 +72,12 @@ static const struct v4l2_fract - tpf_max = {.numerator = 1, .denominator = FPS_MIN}, - tpf_default = {.numerator = 1000, .denominator = 30000}; - -+/* Container for MMAL and VB2 buffers*/ -+struct vb2_mmal_buffer { -+ struct vb2_v4l2_buffer vb; -+ struct mmal_buffer mmal; -+}; -+ - /* video formats */ - static struct mmal_fmt formats[] = { - { -@@ -267,14 +273,15 @@ static int buffer_init(struct vb2_buffer - { - struct bm2835_mmal_dev *dev = vb2_get_drv_priv(vb->vb2_queue); - struct vb2_v4l2_buffer *vb2 = to_vb2_v4l2_buffer(vb); -- struct mmal_buffer *buf = container_of(vb2, struct mmal_buffer, vb); -+ struct vb2_mmal_buffer *buf = -+ container_of(vb2, struct vb2_mmal_buffer, vb); - - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, "%s: dev:%p, vb %p\n", - __func__, dev, vb); -- buf->buffer = vb2_plane_vaddr(&buf->vb.vb2_buf, 0); -- buf->buffer_size = vb2_plane_size(&buf->vb.vb2_buf, 0); -+ buf->mmal.buffer = vb2_plane_vaddr(&buf->vb.vb2_buf, 0); -+ buf->mmal.buffer_size = vb2_plane_size(&buf->vb.vb2_buf, 0); - -- return mmal_vchi_buffer_init(dev->instance, buf); -+ return mmal_vchi_buffer_init(dev->instance, &buf->mmal); - } - - static int buffer_prepare(struct vb2_buffer *vb) -@@ -303,11 +310,13 @@ static void buffer_cleanup(struct vb2_bu - { - struct bm2835_mmal_dev *dev = vb2_get_drv_priv(vb->vb2_queue); - struct vb2_v4l2_buffer *vb2 = to_vb2_v4l2_buffer(vb); -- struct mmal_buffer *buf = container_of(vb2, struct mmal_buffer, vb); -+ struct vb2_mmal_buffer *buf = -+ container_of(vb2, struct vb2_mmal_buffer, vb); - - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, "%s: dev:%p, vb %p\n", - __func__, dev, vb); -- mmal_vchi_buffer_cleanup(buf); -+ -+ mmal_vchi_buffer_cleanup(&buf->mmal); - } - - static inline bool is_capturing(struct bm2835_mmal_dev *dev) -@@ -319,14 +328,16 @@ static inline bool is_capturing(struct b - static void buffer_cb(struct vchiq_mmal_instance *instance, - struct vchiq_mmal_port *port, - int status, -- struct mmal_buffer *buf, -- unsigned long length, u32 mmal_flags, s64 dts, s64 pts) -+ struct mmal_buffer *mmal_buf) - { - struct bm2835_mmal_dev *dev = port->cb_ctx; -+ struct vb2_mmal_buffer *buf = -+ container_of(mmal_buf, struct vb2_mmal_buffer, mmal); - - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, - "%s: status:%d, buf:%p, length:%lu, flags %u, pts %lld\n", -- __func__, status, buf, length, mmal_flags, pts); -+ __func__, status, buf, mmal_buf->length, mmal_buf->mmal_flags, -+ mmal_buf->pts); - - if (status != 0) { - /* error in transfer */ -@@ -337,7 +348,7 @@ static void buffer_cb(struct vchiq_mmal_ - return; - } - -- if (length == 0) { -+ if (mmal_buf->length == 0) { - /* stream ended */ - if (dev->capture.frame_count) { - /* empty buffer whilst capturing - expected to be an -@@ -353,7 +364,8 @@ static void buffer_cb(struct vchiq_mmal_ - &dev->capture.frame_count, - sizeof(dev->capture.frame_count)); - } -- if (vchiq_mmal_submit_buffer(instance, port, buf)) -+ if (vchiq_mmal_submit_buffer(instance, port, -+ &buf->mmal)) - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, - "Failed to return EOS buffer"); - } else { -@@ -382,16 +394,16 @@ static void buffer_cb(struct vchiq_mmal_ - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, - "Buffer time set as current time - %lld", - buf->vb.vb2_buf.timestamp); -- } else if (pts != 0) { -+ } else if (mmal_buf->pts != 0) { - ktime_t timestamp; -- s64 runtime_us = pts - -+ s64 runtime_us = mmal_buf->pts - - dev->capture.vc_start_timestamp; - timestamp = ktime_add_us(dev->capture.kernel_start_ts, - runtime_us); - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, - "Convert start time %llu and %llu with offset %llu to %llu\n", - ktime_to_ns(dev->capture.kernel_start_ts), -- dev->capture.vc_start_timestamp, pts, -+ dev->capture.vc_start_timestamp, mmal_buf->pts, - ktime_to_ns(timestamp)); - if (timestamp < dev->capture.last_timestamp) { - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, -@@ -416,15 +428,15 @@ static void buffer_cb(struct vchiq_mmal_ - dev->capture.last_timestamp = buf->vb.vb2_buf.timestamp; - buf->vb.sequence = dev->capture.sequence++; - -- vb2_set_plane_payload(&buf->vb.vb2_buf, 0, length); -- if (mmal_flags & MMAL_BUFFER_HEADER_FLAG_KEYFRAME) -+ vb2_set_plane_payload(&buf->vb.vb2_buf, 0, mmal_buf->length); -+ if (mmal_buf->mmal_flags & MMAL_BUFFER_HEADER_FLAG_KEYFRAME) - buf->vb.flags |= V4L2_BUF_FLAG_KEYFRAME; - - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, - "Buffer has ts %llu", dev->capture.last_timestamp); - vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); - -- if (mmal_flags & MMAL_BUFFER_HEADER_FLAG_EOS && -+ if (mmal_buf->mmal_flags & MMAL_BUFFER_HEADER_FLAG_EOS && - is_capturing(dev)) { - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, - "Grab another frame as buffer has EOS"); -@@ -507,14 +519,16 @@ static void buffer_queue(struct vb2_buff - { - struct bm2835_mmal_dev *dev = vb2_get_drv_priv(vb->vb2_queue); - struct vb2_v4l2_buffer *vb2 = to_vb2_v4l2_buffer(vb); -- struct mmal_buffer *buf = container_of(vb2, struct mmal_buffer, vb); -+ struct vb2_mmal_buffer *buf = -+ container_of(vb2, struct vb2_mmal_buffer, vb); - int ret; - - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, - "%s: dev:%p buf:%p, idx %u\n", - __func__, dev, buf, vb2->vb2_buf.index); - -- ret = vchiq_mmal_submit_buffer(dev->instance, dev->capture.port, buf); -+ ret = vchiq_mmal_submit_buffer(dev->instance, dev->capture.port, -+ &buf->mmal); - if (ret < 0) - v4l2_err(&dev->v4l2_dev, "%s: error submitting buffer\n", - __func__); -@@ -628,7 +642,7 @@ static void stop_streaming(struct vb2_qu - dev->capture.frame_count = 0; - - /* ensure a format has actually been set */ -- if (!dev->capture.port) { -+ if (!port) { - v4l2_err(&dev->v4l2_dev, - "no capture port - stream not started?\n"); - return; -@@ -648,11 +662,11 @@ static void stop_streaming(struct vb2_qu - - /* disable the connection from camera to encoder */ - ret = vchiq_mmal_port_disable(dev->instance, dev->capture.camera_port); -- if (!ret && dev->capture.camera_port != dev->capture.port) { -+ if (!ret && dev->capture.camera_port != port) { - v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, - "disabling port\n"); -- ret = vchiq_mmal_port_disable(dev->instance, dev->capture.port); -- } else if (dev->capture.camera_port != dev->capture.port) { -+ ret = vchiq_mmal_port_disable(dev->instance, port); -+ } else if (dev->capture.camera_port != port) { - v4l2_err(&dev->v4l2_dev, "port_disable failed, error %d\n", - ret); - } -@@ -1954,7 +1968,7 @@ static int bcm2835_mmal_probe(struct pla - q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ; - q->drv_priv = dev; -- q->buf_struct_size = sizeof(struct mmal_buffer); -+ q->buf_struct_size = sizeof(struct vb2_mmal_buffer); - q->ops = &bm2835_mmal_video_qops; - q->mem_ops = &vb2_vmalloc_memops; - q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; ---- a/drivers/staging/vc04_services/vchiq-mmal/mmal-common.h -+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-common.h -@@ -50,6 +50,11 @@ struct mmal_buffer { - unsigned long buffer_size; /* size of allocated buffer */ - - struct mmal_msg_context *msg_context; -+ -+ unsigned long length; -+ u32 mmal_flags; -+ s64 dts; -+ s64 pts; - }; - - /* */ ---- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c -+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c -@@ -259,17 +259,25 @@ static void buffer_work_cb(struct work_s - { - struct mmal_msg_context *msg_context = - container_of(work, struct mmal_msg_context, u.bulk.work); -+ struct mmal_buffer *buffer = msg_context->u.bulk.buffer; -+ -+ if (!buffer) { -+ pr_err("%s: ctx: %p, No mmal buffer to pass details\n", -+ __func__, msg_context); -+ return; -+ } -+ -+ buffer->length = msg_context->u.bulk.buffer_used; -+ buffer->mmal_flags = msg_context->u.bulk.mmal_flags; -+ buffer->dts = msg_context->u.bulk.dts; -+ buffer->pts = msg_context->u.bulk.pts; - - atomic_dec(&msg_context->u.bulk.port->buffers_with_vpu); - - msg_context->u.bulk.port->buffer_cb(msg_context->u.bulk.instance, - msg_context->u.bulk.port, - msg_context->u.bulk.status, -- msg_context->u.bulk.buffer, -- msg_context->u.bulk.buffer_used, -- msg_context->u.bulk.mmal_flags, -- msg_context->u.bulk.dts, -- msg_context->u.bulk.pts); -+ msg_context->u.bulk.buffer); - } - - /* workqueue scheduled callback to handle receiving buffers -@@ -1327,11 +1335,14 @@ static int port_disable(struct vchiq_mma - mmalbuf = list_entry(buf_head, struct mmal_buffer, - list); - list_del(buf_head); -- if (port->buffer_cb) -+ if (port->buffer_cb) { -+ mmalbuf->length = 0; -+ mmalbuf->mmal_flags = 0; -+ mmalbuf->dts = MMAL_TIME_UNKNOWN; -+ mmalbuf->pts = MMAL_TIME_UNKNOWN; - port->buffer_cb(instance, -- port, 0, mmalbuf, 0, 0, -- MMAL_TIME_UNKNOWN, -- MMAL_TIME_UNKNOWN); -+ port, 0, mmalbuf); -+ } - } - - spin_unlock_irqrestore(&port->slock, flags); ---- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.h -+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.h -@@ -44,8 +44,7 @@ struct vchiq_mmal_port; - typedef void (*vchiq_mmal_buffer_cb)( - struct vchiq_mmal_instance *instance, - struct vchiq_mmal_port *port, -- int status, struct mmal_buffer *buffer, -- unsigned long length, u32 mmal_flags, s64 dts, s64 pts); -+ int status, struct mmal_buffer *buffer); - - struct vchiq_mmal_port { - u32 enabled:1;