diff options
Diffstat (limited to 'drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c')
-rw-r--r-- | drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c index edcd97373809..ae9183db44ee 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c @@ -372,6 +372,10 @@ make_service_callback(struct vchiq_service *service, enum vchiq_reason reason, service->state->id, service->handle); status = VCHIQ_SUCCESS; } + + if (reason != VCHIQ_MESSAGE_AVAILABLE) + vchiq_release_message(service->handle, header); + return status; } @@ -1480,15 +1484,6 @@ parse_open(struct vchiq_state *state, struct vchiq_header *header) : VCHIQ_SRVSTATE_OPEN); } - service->remoteport = remoteport; - service->client_id = ((int *)header->data)[1]; - if (make_service_callback(service, VCHIQ_SERVICE_OPENED, - NULL, NULL) == VCHIQ_RETRY) { - /* Bail out if not ready */ - service->remoteport = VCHIQ_PORT_FREE; - goto bail_not_ready; - } - /* Success - the message has been dealt with */ unlock_service(service); return 1; @@ -3147,6 +3142,12 @@ error_exit: return status; } +enum vchiq_status vchiq_queue_kernel_message(unsigned int handle, void *context, + size_t size) +{ + return vchiq_queue_message(handle, memcpy_copy_callback, context, size); +} + void vchiq_release_message(unsigned int handle, struct vchiq_header *header) |