staging: vchi: Get rid of vchiq_shim's message callback
[linux-2.6-microblaze.git] / drivers / staging / vc04_services / vchiq-mmal / mmal-vchiq.c
index f710ccc..2abf0f6 100644 (file)
@@ -152,7 +152,7 @@ struct mmal_msg_context {
 
                struct {
                        /* message handle to release */
-                       struct vchi_held_msg msg_handle;
+                       struct vchiq_header *msg_handle;
                        /* pointer to received message */
                        struct mmal_msg *msg;
                        /* received message length */
@@ -549,54 +549,49 @@ static void bulk_abort_cb(struct vchiq_mmal_instance *instance,
 }
 
 /* incoming event service callback */
-static void service_callback(void *param, const enum vchiq_reason reason,
-                            void *bulk_ctx)
+static enum vchiq_status service_callback(enum vchiq_reason reason,
+                                         struct vchiq_header *header,
+                                         unsigned handle, void *bulk_ctx)
 {
-       struct vchiq_mmal_instance *instance = param;
-       int status;
+       struct vchiq_mmal_instance *instance = vchiq_get_service_userdata(handle);
        u32 msg_len;
        struct mmal_msg *msg;
-       struct vchi_held_msg msg_handle;
        struct mmal_msg_context *msg_context;
 
        if (!instance) {
                pr_err("Message callback passed NULL instance\n");
-               return;
+               return VCHIQ_SUCCESS;
        }
 
        switch (reason) {
        case VCHIQ_MESSAGE_AVAILABLE:
-               status = vchi_msg_hold(instance->service, (void **)&msg,
-                                      &msg_len, &msg_handle);
-               if (status) {
-                       pr_err("Unable to dequeue a message (%d)\n", status);
-                       break;
-               }
+               msg = (void *)header->data;
+               msg_len = header->size;
 
                DBG_DUMP_MSG(msg, msg_len, "<<< reply message");
 
                /* handling is different for buffer messages */
                switch (msg->h.type) {
                case MMAL_MSG_TYPE_BUFFER_FROM_HOST:
-                       vchi_held_msg_release(&msg_handle);
+                       vchiq_release_message(handle, header);
                        break;
 
                case MMAL_MSG_TYPE_EVENT_TO_HOST:
                        event_to_host_cb(instance, msg, msg_len);
-                       vchi_held_msg_release(&msg_handle);
+                       vchiq_release_message(handle, header);
 
                        break;
 
                case MMAL_MSG_TYPE_BUFFER_TO_HOST:
                        buffer_to_host_cb(instance, msg, msg_len);
-                       vchi_held_msg_release(&msg_handle);
+                       vchiq_release_message(handle, header);
                        break;
 
                default:
                        /* messages dependent on header context to complete */
                        if (!msg->h.context) {
                                pr_err("received message context was null!\n");
-                               vchi_held_msg_release(&msg_handle);
+                               vchiq_release_message(handle, header);
                                break;
                        }
 
@@ -605,12 +600,12 @@ static void service_callback(void *param, const enum vchiq_reason reason,
                        if (!msg_context) {
                                pr_err("received invalid message context %u!\n",
                                       msg->h.context);
-                               vchi_held_msg_release(&msg_handle);
+                               vchiq_release_message(handle, header);
                                break;
                        }
 
                        /* fill in context values */
-                       msg_context->u.sync.msg_handle = msg_handle;
+                       msg_context->u.sync.msg_handle = header;
                        msg_context->u.sync.msg = msg;
                        msg_context->u.sync.msg_len = msg_len;
 
@@ -648,13 +643,15 @@ static void service_callback(void *param, const enum vchiq_reason reason,
                pr_err("Received unhandled message reason %d\n", reason);
                break;
        }
+
+       return VCHIQ_SUCCESS;
 }
 
 static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
                                     struct mmal_msg *msg,
                                     unsigned int payload_len,
                                     struct mmal_msg **msg_out,
-                                    struct vchi_held_msg *msg_handle_out)
+                                    struct vchiq_header **msg_handle)
 {
        struct mmal_msg_context *msg_context;
        int ret;
@@ -708,7 +705,7 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
        }
 
        *msg_out = msg_context->u.sync.msg;
-       *msg_handle_out = msg_context->u.sync.msg_handle;
+       *msg_handle = msg_context->u.sync.msg_handle;
        release_msg_context(msg_context);
 
        return 0;
@@ -780,7 +777,7 @@ static int port_info_set(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        pr_debug("setting port info port %p\n", port);
        if (!port)
@@ -829,7 +826,7 @@ static int port_info_set(struct vchiq_mmal_instance *instance,
                 port->component->handle, port->handle);
 
 release_msg:
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -841,7 +838,7 @@ static int port_info_get(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        /* port info time */
        m.h.type = MMAL_MSG_TYPE_PORT_INFO_GET;
@@ -924,7 +921,7 @@ release_msg:
        pr_debug("%s:result:%d component:0x%x port:%d\n",
                 __func__, ret, port->component->handle, port->handle);
 
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -937,7 +934,7 @@ static int create_component(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        /* build component create message */
        m.h.type = MMAL_MSG_TYPE_COMPONENT_CREATE;
@@ -972,7 +969,7 @@ static int create_component(struct vchiq_mmal_instance *instance,
                 component->inputs, component->outputs, component->clocks);
 
 release_msg:
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -984,7 +981,7 @@ static int destroy_component(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        m.h.type = MMAL_MSG_TYPE_COMPONENT_DESTROY;
        m.u.component_destroy.component_handle = component->handle;
@@ -1005,7 +1002,7 @@ static int destroy_component(struct vchiq_mmal_instance *instance,
 
 release_msg:
 
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -1017,7 +1014,7 @@ static int enable_component(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        m.h.type = MMAL_MSG_TYPE_COMPONENT_ENABLE;
        m.u.component_enable.component_handle = component->handle;
@@ -1037,7 +1034,7 @@ static int enable_component(struct vchiq_mmal_instance *instance,
        ret = -rmsg->u.component_enable_reply.status;
 
 release_msg:
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -1049,7 +1046,7 @@ static int disable_component(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        m.h.type = MMAL_MSG_TYPE_COMPONENT_DISABLE;
        m.u.component_disable.component_handle = component->handle;
@@ -1070,7 +1067,7 @@ static int disable_component(struct vchiq_mmal_instance *instance,
 
 release_msg:
 
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -1082,7 +1079,7 @@ static int get_version(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        m.h.type = MMAL_MSG_TYPE_GET_VERSION;
 
@@ -1102,7 +1099,7 @@ static int get_version(struct vchiq_mmal_instance *instance,
        *minor_out = rmsg->u.version.minor;
 
 release_msg:
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -1115,7 +1112,7 @@ static int port_action_port(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        m.h.type = MMAL_MSG_TYPE_PORT_ACTION;
        m.u.port_action_port.component_handle = port->component->handle;
@@ -1144,7 +1141,7 @@ static int port_action_port(struct vchiq_mmal_instance *instance,
                 port_action_type_names[action_type], action_type);
 
 release_msg:
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -1159,7 +1156,7 @@ static int port_action_handle(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        m.h.type = MMAL_MSG_TYPE_PORT_ACTION;
 
@@ -1192,7 +1189,7 @@ static int port_action_handle(struct vchiq_mmal_instance *instance,
                 action_type, connect_component_handle, connect_port_handle);
 
 release_msg:
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -1204,7 +1201,7 @@ static int port_parameter_set(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        m.h.type = MMAL_MSG_TYPE_PORT_PARAMETER_SET;
 
@@ -1233,7 +1230,7 @@ static int port_parameter_set(struct vchiq_mmal_instance *instance,
                 ret, port->component->handle, port->handle, parameter_id);
 
 release_msg:
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }
@@ -1245,7 +1242,7 @@ static int port_parameter_get(struct vchiq_mmal_instance *instance,
        int ret;
        struct mmal_msg m;
        struct mmal_msg *rmsg;
-       struct vchi_held_msg rmsg_handle;
+       struct vchiq_header *rmsg_handle;
 
        m.h.type = MMAL_MSG_TYPE_PORT_PARAMETER_GET;
 
@@ -1292,7 +1289,7 @@ static int port_parameter_get(struct vchiq_mmal_instance *instance,
                 ret, port->component->handle, port->handle, parameter_id);
 
 release_msg:
-       vchi_held_msg_release(&rmsg_handle);
+       vchiq_release_message(instance->service->handle, rmsg_handle);
 
        return ret;
 }