Lines Matching refs:instance

155 vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handle, void *data,
177 cleanup_pagelistinfo(struct vchiq_instance *instance, struct vchiq_pagelist_info *pagelistinfo) in cleanup_pagelistinfo() argument
180 dma_unmap_sg(instance->state->dev, pagelistinfo->scatterlist, in cleanup_pagelistinfo()
187 dma_free_coherent(instance->state->dev, pagelistinfo->pagelist_buffer_size, in cleanup_pagelistinfo()
214 create_pagelist(struct vchiq_instance *instance, char *buf, char __user *ubuf, in create_pagelist() argument
252 pagelist = dma_alloc_coherent(instance->state->dev, pagelist_size, &dma_addr, in create_pagelist()
294 cleanup_pagelistinfo(instance, pagelistinfo); in create_pagelist()
317 cleanup_pagelistinfo(instance, pagelistinfo); in create_pagelist()
340 dma_buffers = dma_map_sg(instance->state->dev, in create_pagelist()
346 cleanup_pagelistinfo(instance, pagelistinfo); in create_pagelist()
380 cleanup_pagelistinfo(instance, pagelistinfo); in create_pagelist()
399 free_pagelist(struct vchiq_instance *instance, struct vchiq_pagelist_info *pagelistinfo, in free_pagelist() argument
413 dma_unmap_sg(instance->state->dev, pagelistinfo->scatterlist, in free_pagelist()
462 cleanup_pagelistinfo(instance, pagelistinfo); in free_pagelist()
626 vchiq_prepare_bulk_data(struct vchiq_instance *instance, struct vchiq_bulk *bulk, void *offset, in vchiq_prepare_bulk_data() argument
631 pagelistinfo = create_pagelist(instance, offset, uoffset, size, in vchiq_prepare_bulk_data()
651 vchiq_complete_bulk(struct vchiq_instance *instance, struct vchiq_bulk *bulk) in vchiq_complete_bulk() argument
654 free_pagelist(instance, (struct vchiq_pagelist_info *)bulk->remote_data, in vchiq_complete_bulk()
671 struct vchiq_instance *instance = NULL; in vchiq_initialise() local
694 instance = kzalloc(sizeof(*instance), GFP_KERNEL); in vchiq_initialise()
695 if (!instance) { in vchiq_initialise()
702 instance->connected = 0; in vchiq_initialise()
703 instance->state = state; in vchiq_initialise()
704 mutex_init(&instance->bulk_waiter_list_mutex); in vchiq_initialise()
705 INIT_LIST_HEAD(&instance->bulk_waiter_list); in vchiq_initialise()
707 *instance_out = instance; in vchiq_initialise()
712 vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, ret); in vchiq_initialise()
718 void free_bulk_waiter(struct vchiq_instance *instance) in free_bulk_waiter() argument
723 &instance->bulk_waiter_list, list) { in free_bulk_waiter()
731 int vchiq_shutdown(struct vchiq_instance *instance) in vchiq_shutdown() argument
734 struct vchiq_state *state = instance->state; in vchiq_shutdown()
740 vchiq_shutdown_internal(state, instance); in vchiq_shutdown()
744 vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status); in vchiq_shutdown()
746 free_bulk_waiter(instance); in vchiq_shutdown()
747 kfree(instance); in vchiq_shutdown()
753 static int vchiq_is_connected(struct vchiq_instance *instance) in vchiq_is_connected() argument
755 return instance->connected; in vchiq_is_connected()
758 int vchiq_connect(struct vchiq_instance *instance) in vchiq_connect() argument
761 struct vchiq_state *state = instance->state; in vchiq_connect()
768 status = vchiq_connect_internal(state, instance); in vchiq_connect()
771 instance->connected = 1; in vchiq_connect()
776 vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status); in vchiq_connect()
783 vchiq_add_service(struct vchiq_instance *instance, in vchiq_add_service() argument
788 struct vchiq_state *state = instance->state; in vchiq_add_service()
794 srvstate = vchiq_is_connected(instance) in vchiq_add_service()
798 service = vchiq_add_service_internal(state, params, srvstate, instance, NULL); in vchiq_add_service()
807 vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status); in vchiq_add_service()
813 vchiq_open_service(struct vchiq_instance *instance, in vchiq_open_service() argument
818 struct vchiq_state *state = instance->state; in vchiq_open_service()
823 if (!vchiq_is_connected(instance)) in vchiq_open_service()
826 service = vchiq_add_service_internal(state, params, VCHIQ_SRVSTATE_OPENING, instance, NULL); in vchiq_open_service()
832 vchiq_remove_service(instance, service->handle); in vchiq_open_service()
838 vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status); in vchiq_open_service()
845 vchiq_bulk_transmit(struct vchiq_instance *instance, unsigned int handle, const void *data, in vchiq_bulk_transmit() argument
854 status = vchiq_bulk_transfer(instance, handle, in vchiq_bulk_transmit()
860 status = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size, in vchiq_bulk_transmit()
882 int vchiq_bulk_receive(struct vchiq_instance *instance, unsigned int handle, in vchiq_bulk_receive() argument
892 status = vchiq_bulk_transfer(instance, handle, data, NULL, in vchiq_bulk_receive()
897 status = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size, in vchiq_bulk_receive()
920 vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handle, void *data, in vchiq_blocking_bulk_transfer() argument
927 service = find_service_by_handle(instance, handle); in vchiq_blocking_bulk_transfer()
933 mutex_lock(&instance->bulk_waiter_list_mutex); in vchiq_blocking_bulk_transfer()
934 list_for_each_entry(iter, &instance->bulk_waiter_list, list) { in vchiq_blocking_bulk_transfer()
941 mutex_unlock(&instance->bulk_waiter_list_mutex); in vchiq_blocking_bulk_transfer()
967 status = vchiq_bulk_transfer(instance, handle, data, NULL, size, in vchiq_blocking_bulk_transfer()
982 mutex_lock(&instance->bulk_waiter_list_mutex); in vchiq_blocking_bulk_transfer()
983 list_add(&waiter->list, &instance->bulk_waiter_list); in vchiq_blocking_bulk_transfer()
984 mutex_unlock(&instance->bulk_waiter_list_mutex); in vchiq_blocking_bulk_transfer()
993 add_completion(struct vchiq_instance *instance, enum vchiq_reason reason, in add_completion() argument
1002 insert = instance->completion_insert; in add_completion()
1003 while ((insert - instance->completion_remove) >= MAX_COMPLETIONS) { in add_completion()
1008 if (wait_for_completion_interruptible(&instance->remove_event)) { in add_completion()
1011 } else if (instance->closing) { in add_completion()
1018 completion = &instance->completions[insert & (MAX_COMPLETIONS - 1)]; in add_completion()
1032 if (instance->use_close_delivered) in add_completion()
1046 instance->completion_insert = insert; in add_completion()
1048 complete(&instance->insert_event); in add_completion()
1054 service_callback(struct vchiq_instance *instance, enum vchiq_reason reason, in service_callback() argument
1072 service = handle_to_service(instance, handle); in service_callback()
1080 if (!instance || instance->closing) { in service_callback()
1096 (unsigned long)instance, (unsigned long)bulk_userdata); in service_callback()
1111 instance->completion_remove) < 0) { in service_callback()
1117 status = add_completion(instance, reason, NULL, user_service, in service_callback()
1132 } else if (instance->closing) { in service_callback()
1152 instance->completion_remove) >= 0) || in service_callback()
1169 return add_completion(instance, reason, header, user_service, in service_callback()
1232 struct vchiq_instance *instance; in vchiq_dump_platform_instances() local
1238 instance = service->instance; in vchiq_dump_platform_instances()
1239 if (instance) in vchiq_dump_platform_instances()
1240 instance->mark = 0; in vchiq_dump_platform_instances()
1246 struct vchiq_instance *instance; in vchiq_dump_platform_instances() local
1256 instance = service->instance; in vchiq_dump_platform_instances()
1257 if (!instance || instance->mark) { in vchiq_dump_platform_instances()
1265 instance, instance->pid, in vchiq_dump_platform_instances()
1266 instance->connected ? " connected, " : in vchiq_dump_platform_instances()
1268 instance->completion_insert - in vchiq_dump_platform_instances()
1269 instance->completion_remove, in vchiq_dump_platform_instances()
1274 instance->mark = 1; in vchiq_dump_platform_instances()
1287 len = scnprintf(buf, sizeof(buf), " instance %pK", service->instance); in vchiq_dump_platform_service_state()
1324 vchiq_keepalive_vchiq_callback(struct vchiq_instance *instance, in vchiq_keepalive_vchiq_callback() argument
1340 struct vchiq_instance *instance; in vchiq_keepalive_thread_func() local
1351 ret = vchiq_initialise(&instance); in vchiq_keepalive_thread_func()
1358 status = vchiq_connect(instance); in vchiq_keepalive_thread_func()
1365 status = vchiq_add_service(instance, &params, &ka_handle); in vchiq_keepalive_thread_func()
1394 status = vchiq_use_service(instance, ka_handle); in vchiq_keepalive_thread_func()
1401 status = vchiq_release_service(instance, ka_handle); in vchiq_keepalive_thread_func()
1411 vchiq_shutdown(instance); in vchiq_keepalive_thread_func()
1549 vchiq_instance_get_debugfs_node(struct vchiq_instance *instance) in vchiq_instance_get_debugfs_node() argument
1551 return &instance->debugfs_node; in vchiq_instance_get_debugfs_node()
1555 vchiq_instance_get_use_count(struct vchiq_instance *instance) in vchiq_instance_get_use_count() argument
1562 while ((service = __next_service_by_instance(instance->state, in vchiq_instance_get_use_count()
1563 instance, &i))) in vchiq_instance_get_use_count()
1570 vchiq_instance_get_pid(struct vchiq_instance *instance) in vchiq_instance_get_pid() argument
1572 return instance->pid; in vchiq_instance_get_pid()
1576 vchiq_instance_get_trace(struct vchiq_instance *instance) in vchiq_instance_get_trace() argument
1578 return instance->trace; in vchiq_instance_get_trace()
1582 vchiq_instance_set_trace(struct vchiq_instance *instance, int trace) in vchiq_instance_set_trace() argument
1589 while ((service = __next_service_by_instance(instance->state, in vchiq_instance_set_trace()
1590 instance, &i))) in vchiq_instance_set_trace()
1593 instance->trace = (trace != 0); in vchiq_instance_set_trace()
1597 vchiq_use_service(struct vchiq_instance *instance, unsigned int handle) in vchiq_use_service() argument
1600 struct vchiq_service *service = find_service_by_handle(instance, handle); in vchiq_use_service()
1611 vchiq_release_service(struct vchiq_instance *instance, unsigned int handle) in vchiq_release_service() argument
1614 struct vchiq_service *service = find_service_by_handle(instance, handle); in vchiq_release_service()