Lines Matching refs:instance

111 vchiq_ioc_queue_message(struct vchiq_instance *instance, unsigned int handle,  in vchiq_ioc_queue_message()  argument
130 status = vchiq_queue_message(instance, handle, vchiq_ioc_copy_element_data, in vchiq_ioc_queue_message()
140 static int vchiq_ioc_create_service(struct vchiq_instance *instance, in vchiq_ioc_create_service() argument
149 if (args->is_open && !instance->connected) in vchiq_ioc_create_service()
159 srvstate = instance->connected ? in vchiq_ioc_create_service()
170 service = vchiq_add_service_internal(instance->state, &params, in vchiq_ioc_create_service()
171 srvstate, instance, in vchiq_ioc_create_service()
180 user_service->instance = instance; in vchiq_ioc_create_service()
184 user_service->message_available_pos = instance->completion_remove - 1; in vchiq_ioc_create_service()
192 status = vchiq_open_service_internal(service, instance->pid); in vchiq_ioc_create_service()
194 vchiq_remove_service(instance, service->handle); in vchiq_ioc_create_service()
204 static int vchiq_ioc_dequeue_message(struct vchiq_instance *instance, in vchiq_ioc_dequeue_message() argument
212 DEBUG_INITIALISE(instance->state->local); in vchiq_ioc_dequeue_message()
214 service = find_service_for_instance(instance, args->handle); in vchiq_ioc_dequeue_message()
268 vchiq_release_message(instance, service->handle, header); in vchiq_ioc_dequeue_message()
285 static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance *instance, in vchiq_irq_queue_bulk_tx_rx() argument
296 service = find_service_for_instance(instance, args->handle); in vchiq_irq_queue_bulk_tx_rx()
313 status = vchiq_bulk_xfer_blocking(instance, args->handle, in vchiq_irq_queue_bulk_tx_rx()
316 mutex_lock(&instance->bulk_waiter_list_mutex); in vchiq_irq_queue_bulk_tx_rx()
317 list_for_each_entry(iter, &instance->bulk_waiter_list, in vchiq_irq_queue_bulk_tx_rx()
325 mutex_unlock(&instance->bulk_waiter_list_mutex); in vchiq_irq_queue_bulk_tx_rx()
335 status = vchiq_bulk_xfer_waiting(instance, args->handle, in vchiq_irq_queue_bulk_tx_rx()
344 status = vchiq_bulk_xfer_callback(instance, args->handle, in vchiq_irq_queue_bulk_tx_rx()
367 mutex_lock(&instance->bulk_waiter_list_mutex); in vchiq_irq_queue_bulk_tx_rx()
368 list_add(&waiter->list, &instance->bulk_waiter_list); in vchiq_irq_queue_bulk_tx_rx()
369 mutex_unlock(&instance->bulk_waiter_list_mutex); in vchiq_irq_queue_bulk_tx_rx()
444 static int vchiq_ioc_await_completion(struct vchiq_instance *instance, in vchiq_ioc_await_completion() argument
452 DEBUG_INITIALISE(instance->state->local); in vchiq_ioc_await_completion()
455 if (!instance->connected) in vchiq_ioc_await_completion()
458 mutex_lock(&instance->completion_mutex); in vchiq_ioc_await_completion()
461 while ((instance->completion_remove == instance->completion_insert) && !instance->closing) { in vchiq_ioc_await_completion()
465 mutex_unlock(&instance->completion_mutex); in vchiq_ioc_await_completion()
466 rc = wait_for_completion_interruptible(&instance->insert_event); in vchiq_ioc_await_completion()
467 mutex_lock(&instance->completion_mutex); in vchiq_ioc_await_completion()
470 dev_dbg(instance->state->dev, "arm: AWAIT_COMPLETION interrupted\n"); in vchiq_ioc_await_completion()
478 remove = instance->completion_remove; in vchiq_ioc_await_completion()
487 if (remove == instance->completion_insert) in vchiq_ioc_await_completion()
490 completion = &instance->completions[remove & (MAX_COMPLETIONS - 1)]; in vchiq_ioc_await_completion()
543 vchiq_release_message(instance, service->handle, header); in vchiq_ioc_await_completion()
550 !instance->use_close_delivered) in vchiq_ioc_await_completion()
567 instance->completion_remove = remove; in vchiq_ioc_await_completion()
576 complete(&instance->remove_event); in vchiq_ioc_await_completion()
577 mutex_unlock(&instance->completion_mutex); in vchiq_ioc_await_completion()
586 struct vchiq_instance *instance = file->private_data; in vchiq_ioctl() local
592 dev_dbg(instance->state->dev, "arm: instance %p, cmd %s, arg %lx\n", instance, in vchiq_ioctl()
598 if (!instance->connected) in vchiq_ioctl()
603 while ((service = next_service_by_instance(instance->state, in vchiq_ioctl()
604 instance, &i))) { in vchiq_ioctl()
605 status = vchiq_remove_service(instance, service->handle); in vchiq_ioctl()
614 instance->closing = 1; in vchiq_ioctl()
615 complete(&instance->insert_event); in vchiq_ioctl()
621 if (instance->connected) { in vchiq_ioctl()
625 rc = mutex_lock_killable(&instance->state->mutex); in vchiq_ioctl()
627 dev_err(instance->state->dev, in vchiq_ioctl()
629 instance->state->id, rc); in vchiq_ioctl()
633 status = vchiq_connect_internal(instance->state, instance); in vchiq_ioctl()
634 mutex_unlock(&instance->state->mutex); in vchiq_ioctl()
637 instance->connected = 1; in vchiq_ioctl()
639 dev_err(instance->state->dev, in vchiq_ioctl()
653 ret = vchiq_ioc_create_service(instance, &args); in vchiq_ioctl()
658 vchiq_remove_service(instance, args.handle); in vchiq_ioctl()
668 service = find_service_for_instance(instance, handle); in vchiq_ioctl()
682 vchiq_close_service(instance, service->handle) : in vchiq_ioctl()
683 vchiq_remove_service(instance, service->handle); in vchiq_ioctl()
703 service = find_service_for_instance(instance, handle); in vchiq_ioctl()
709 dev_err(instance->state->dev, in vchiq_ioctl()
731 service = find_service_for_instance(instance, args.handle); in vchiq_ioctl()
739 ret = vchiq_ioc_queue_message(instance, args.handle, elements, in vchiq_ioctl()
763 ret = vchiq_irq_queue_bulk_tx_rx(instance, &args, in vchiq_ioctl()
777 ret = vchiq_ioc_await_completion(instance, &args, in vchiq_ioctl()
790 ret = vchiq_ioc_dequeue_message(instance, &args); in vchiq_ioctl()
796 ret = vchiq_get_client_id(instance, handle); in vchiq_ioctl()
829 service = find_service_for_instance(instance, args.handle); in vchiq_ioctl()
835 ret = vchiq_set_service_option(instance, args.handle, args.option, in vchiq_ioctl()
845 instance->use_close_delivered = 1; in vchiq_ioctl()
851 service = find_closed_service_for_instance(instance, handle); in vchiq_ioctl()
877 dev_dbg(instance->state->dev, in vchiq_ioctl()
879 instance, (_IOC_NR(cmd) <= VCHIQ_IOC_MAX) ? in vchiq_ioctl()
882 dev_dbg(instance->state->dev, in vchiq_ioctl()
884 instance, (_IOC_NR(cmd) <= VCHIQ_IOC_MAX) ? in vchiq_ioctl()
917 struct vchiq_instance *instance = file->private_data; in vchiq_compat_ioctl_create_service() local
936 ret = vchiq_ioc_create_service(instance, &args); in vchiq_compat_ioctl_create_service()
941 vchiq_remove_service(instance, args.handle); in vchiq_compat_ioctl_create_service()
970 struct vchiq_instance *instance = file->private_data; in vchiq_compat_ioctl_queue_message() local
985 service = find_service_for_instance(instance, args.handle); in vchiq_compat_ioctl_queue_message()
1005 ret = vchiq_ioc_queue_message(instance, args.handle, elements, in vchiq_compat_ioctl_queue_message()
1179 struct vchiq_instance *instance; in vchiq_open() local
1188 instance = kzalloc(sizeof(*instance), GFP_KERNEL); in vchiq_open()
1189 if (!instance) in vchiq_open()
1192 instance->state = state; in vchiq_open()
1193 instance->pid = current->tgid; in vchiq_open()
1195 vchiq_debugfs_add_instance(instance); in vchiq_open()
1197 init_completion(&instance->insert_event); in vchiq_open()
1198 init_completion(&instance->remove_event); in vchiq_open()
1199 mutex_init(&instance->completion_mutex); in vchiq_open()
1200 mutex_init(&instance->bulk_waiter_list_mutex); in vchiq_open()
1201 INIT_LIST_HEAD(&instance->bulk_waiter_list); in vchiq_open()
1203 file->private_data = instance; in vchiq_open()
1210 struct vchiq_instance *instance = file->private_data; in vchiq_release() local
1211 struct vchiq_state *state = instance->state; in vchiq_release()
1216 dev_dbg(state->dev, "arm: instance=%p\n", instance); in vchiq_release()
1224 vchiq_use_internal(instance->state, NULL, USE_TYPE_VCHIQ); in vchiq_release()
1226 mutex_lock(&instance->completion_mutex); in vchiq_release()
1229 instance->closing = 1; in vchiq_release()
1230 complete(&instance->insert_event); in vchiq_release()
1232 mutex_unlock(&instance->completion_mutex); in vchiq_release()
1235 complete(&instance->remove_event); in vchiq_release()
1239 while ((service = next_service_by_instance(state, instance, &i))) { in vchiq_release()
1251 while ((service = next_service_by_instance(state, instance, &i))) { in vchiq_release()
1272 vchiq_release_message(instance, service->handle, header); in vchiq_release()
1282 while (instance->completion_remove != instance->completion_insert) { in vchiq_release()
1286 completion = &instance->completions[instance->completion_remove in vchiq_release()
1294 if (instance->use_close_delivered) in vchiq_release()
1298 instance->completion_remove++; in vchiq_release()
1302 vchiq_release_internal(instance->state, NULL); in vchiq_release()
1304 free_bulk_waiter(instance); in vchiq_release()
1306 vchiq_debugfs_remove_instance(instance); in vchiq_release()
1308 kfree(instance); in vchiq_release()