summaryrefslogtreecommitdiff
path: root/drivers/staging/vc04_services
diff options
context:
space:
mode:
authorMichael Zoran <mzoran@crowfest.net>2017-03-09 21:08:53 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-03-10 10:12:09 +0100
commit7beb354f8560d8c3ce035af4013e035ac06196c2 (patch)
tree91a66790e58a34be7ecbba5408f64026d475e88c /drivers/staging/vc04_services
parentc45fe9c65742a75b6fada7a2153aa2f8bea0d6dd (diff)
staging: bcm2835-camera: Convert client_context field to a 32 bit handle
The client_context field is passed around which is really just a pointer to a msg_context. A lookup table mechanism for msg_context was added previously, so convert this field to a handle as well. The firmware never interperates the client_context, just passed it back. Signed-off-by: Michael Zoran <mzoran@crowfest.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/vc04_services')
-rw-r--r--drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h2
-rw-r--r--drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c12
2 files changed, 11 insertions, 3 deletions
diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h b/drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h
index 68e40cbab165..5d0de86f6c2b 100644
--- a/drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h
+++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h
@@ -250,7 +250,7 @@ struct mmal_driver_buffer {
u32 magic;
u32 component_handle;
u32 port_handle;
- void *client_context;
+ u32 client_context;
};
/* buffer header */
diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
index c59b4cdb9489..c28fab51db88 100644
--- a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
@@ -532,7 +532,7 @@ buffer_from_host(struct vchiq_mmal_instance *instance,
m.u.buffer_from_host.drvbuf.magic = MMAL_MAGIC;
m.u.buffer_from_host.drvbuf.component_handle = port->component->handle;
m.u.buffer_from_host.drvbuf.port_handle = port->handle;
- m.u.buffer_from_host.drvbuf.client_context = msg_context;
+ m.u.buffer_from_host.drvbuf.client_context = msg_context->handle;
/* buffer header */
m.u.buffer_from_host.buffer_header.cmd = 0;
@@ -614,12 +614,20 @@ static void buffer_to_host_cb(struct vchiq_mmal_instance *instance,
struct mmal_msg *msg, u32 msg_len)
{
struct mmal_msg_context *msg_context;
+ u32 handle;
pr_debug("buffer_to_host_cb: instance:%p msg:%p msg_len:%d\n",
instance, msg, msg_len);
if (msg->u.buffer_from_host.drvbuf.magic == MMAL_MAGIC) {
- msg_context = msg->u.buffer_from_host.drvbuf.client_context;
+ handle = msg->u.buffer_from_host.drvbuf.client_context;
+ msg_context = lookup_msg_context(instance, handle);
+
+ if (!msg_context) {
+ pr_err("drvbuf.client_context(%u) is invalid\n",
+ handle);
+ return;
+ }
} else {
pr_err("MMAL_MSG_TYPE_BUFFER_TO_HOST with bad magic\n");
return;