Lines Matching refs:instance

120 	struct vchiq_mmal_instance *instance;  member
134 struct vchiq_mmal_instance *instance; member
185 get_msg_context(struct vchiq_mmal_instance *instance) in get_msg_context() argument
200 mutex_lock(&instance->context_map_lock); in get_msg_context()
201 handle = idr_alloc(&instance->context_map, msg_context, in get_msg_context()
203 mutex_unlock(&instance->context_map_lock); in get_msg_context()
210 msg_context->instance = instance; in get_msg_context()
217 lookup_msg_context(struct vchiq_mmal_instance *instance, int handle) in lookup_msg_context() argument
219 return idr_find(&instance->context_map, handle); in lookup_msg_context()
225 struct vchiq_mmal_instance *instance = msg_context->instance; in release_msg_context() local
227 mutex_lock(&instance->context_map_lock); in release_msg_context()
228 idr_remove(&instance->context_map, msg_context->handle); in release_msg_context()
229 mutex_unlock(&instance->context_map_lock); in release_msg_context()
234 static void event_to_host_cb(struct vchiq_mmal_instance *instance, in event_to_host_cb() argument
269 msg_context->u.bulk.port->buffer_cb(msg_context->u.bulk.instance, in buffer_work_cb()
287 struct vchiq_mmal_instance *instance = msg_context->instance; in buffer_to_host_work_cb() local
295 vchiq_use_service(instance->vchiq_instance, instance->service_handle); in buffer_to_host_work_cb()
296 ret = vchiq_bulk_receive(instance->vchiq_instance, instance->service_handle, in buffer_to_host_work_cb()
305 vchiq_release_service(instance->vchiq_instance, instance->service_handle); in buffer_to_host_work_cb()
313 static int bulk_receive(struct vchiq_mmal_instance *instance, in bulk_receive() argument
351 queue_work(msg_context->instance->bulk_wq, in bulk_receive()
358 static int inline_receive(struct vchiq_mmal_instance *instance, in inline_receive() argument
374 buffer_from_host(struct vchiq_mmal_instance *instance, in buffer_from_host() argument
384 pr_debug("instance:%u buffer:%p\n", instance->service_handle, buf); in buffer_from_host()
395 msg_context->u.bulk.instance = instance; in buffer_from_host()
439 vchiq_use_service(instance->vchiq_instance, instance->service_handle); in buffer_from_host()
441 ret = vchiq_queue_kernel_message(instance->vchiq_instance, instance->service_handle, &m, in buffer_from_host()
447 vchiq_release_service(instance->vchiq_instance, instance->service_handle); in buffer_from_host()
453 static void buffer_to_host_cb(struct vchiq_mmal_instance *instance, in buffer_to_host_cb() argument
460 __func__, instance, msg, msg_len); in buffer_to_host_cb()
464 msg_context = lookup_msg_context(instance, handle); in buffer_to_host_cb()
490 bulk_receive(instance, msg, msg_context); in buffer_to_host_cb()
503 bulk_receive(instance, msg, msg_context); in buffer_to_host_cb()
516 msg_context->u.bulk.status = inline_receive(instance, msg, in buffer_to_host_cb()
531 static void bulk_receive_cb(struct vchiq_mmal_instance *instance, in bulk_receive_cb() argument
540 static void bulk_abort_cb(struct vchiq_mmal_instance *instance, in bulk_abort_cb() argument
555 struct vchiq_mmal_instance *instance = vchiq_get_service_userdata(vchiq_instance, handle); in service_callback() local
560 if (!instance) { in service_callback()
579 event_to_host_cb(instance, msg, msg_len); in service_callback()
585 buffer_to_host_cb(instance, msg, msg_len); in service_callback()
597 msg_context = lookup_msg_context(instance, in service_callback()
628 bulk_receive_cb(instance, bulk_ctx); in service_callback()
632 bulk_abort_cb(instance, bulk_ctx); in service_callback()
649 static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance, in send_synchronous_mmal_msg() argument
668 msg_context = get_msg_context(instance); in send_synchronous_mmal_msg()
681 vchiq_use_service(instance->vchiq_instance, instance->service_handle); in send_synchronous_mmal_msg()
683 ret = vchiq_queue_kernel_message(instance->vchiq_instance, instance->service_handle, msg, in send_synchronous_mmal_msg()
687 vchiq_release_service(instance->vchiq_instance, instance->service_handle); in send_synchronous_mmal_msg()
772 static int port_info_set(struct vchiq_mmal_instance *instance, in port_info_set() argument
808 ret = send_synchronous_mmal_msg(instance, &m, in port_info_set()
827 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in port_info_set()
833 static int port_info_get(struct vchiq_mmal_instance *instance, in port_info_get() argument
847 ret = send_synchronous_mmal_msg(instance, &m, in port_info_get()
922 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in port_info_get()
928 static int create_component(struct vchiq_mmal_instance *instance, in create_component() argument
944 ret = send_synchronous_mmal_msg(instance, &m, in create_component()
971 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in create_component()
977 static int destroy_component(struct vchiq_mmal_instance *instance, in destroy_component() argument
988 ret = send_synchronous_mmal_msg(instance, &m, in destroy_component()
1004 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in destroy_component()
1010 static int enable_component(struct vchiq_mmal_instance *instance, in enable_component() argument
1021 ret = send_synchronous_mmal_msg(instance, &m, in enable_component()
1036 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in enable_component()
1042 static int disable_component(struct vchiq_mmal_instance *instance, in disable_component() argument
1053 ret = send_synchronous_mmal_msg(instance, &m, in disable_component()
1069 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in disable_component()
1075 static int get_version(struct vchiq_mmal_instance *instance, in get_version() argument
1085 ret = send_synchronous_mmal_msg(instance, &m, in get_version()
1101 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in get_version()
1107 static int port_action_port(struct vchiq_mmal_instance *instance, in port_action_port() argument
1123 ret = send_synchronous_mmal_msg(instance, &m, in port_action_port()
1143 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in port_action_port()
1149 static int port_action_handle(struct vchiq_mmal_instance *instance, in port_action_handle() argument
1170 ret = send_synchronous_mmal_msg(instance, &m, in port_action_handle()
1191 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in port_action_handle()
1196 static int port_parameter_set(struct vchiq_mmal_instance *instance, in port_parameter_set() argument
1213 ret = send_synchronous_mmal_msg(instance, &m, in port_parameter_set()
1232 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in port_parameter_set()
1237 static int port_parameter_get(struct vchiq_mmal_instance *instance, in port_parameter_get() argument
1253 ret = send_synchronous_mmal_msg(instance, &m, in port_parameter_get()
1291 vchiq_release_message(instance->vchiq_instance, instance->service_handle, rmsg_handle); in port_parameter_get()
1297 static int port_disable(struct vchiq_mmal_instance *instance, in port_disable() argument
1309 ret = port_action_port(instance, port, in port_disable()
1333 port->buffer_cb(instance, in port_disable()
1340 ret = port_info_get(instance, port); in port_disable()
1347 static int port_enable(struct vchiq_mmal_instance *instance, in port_enable() argument
1357 ret = port_action_port(instance, port, in port_enable()
1372 ret = buffer_from_host(instance, port, mmalbuf); in port_enable()
1383 ret = port_info_get(instance, port); in port_enable()
1394 int vchiq_mmal_port_set_format(struct vchiq_mmal_instance *instance, in vchiq_mmal_port_set_format() argument
1399 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_port_set_format()
1402 ret = port_info_set(instance, port); in vchiq_mmal_port_set_format()
1407 ret = port_info_get(instance, port); in vchiq_mmal_port_set_format()
1410 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_port_set_format()
1416 int vchiq_mmal_port_parameter_set(struct vchiq_mmal_instance *instance, in vchiq_mmal_port_parameter_set() argument
1422 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_port_parameter_set()
1425 ret = port_parameter_set(instance, port, parameter, value, value_size); in vchiq_mmal_port_parameter_set()
1427 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_port_parameter_set()
1433 int vchiq_mmal_port_parameter_get(struct vchiq_mmal_instance *instance, in vchiq_mmal_port_parameter_get() argument
1439 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_port_parameter_get()
1442 ret = port_parameter_get(instance, port, parameter, value, value_size); in vchiq_mmal_port_parameter_get()
1444 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_port_parameter_get()
1455 int vchiq_mmal_port_enable(struct vchiq_mmal_instance *instance, in vchiq_mmal_port_enable() argument
1461 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_port_enable()
1472 ret = port_enable(instance, port); in vchiq_mmal_port_enable()
1475 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_port_enable()
1481 int vchiq_mmal_port_disable(struct vchiq_mmal_instance *instance, in vchiq_mmal_port_disable() argument
1486 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_port_disable()
1490 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_port_disable()
1494 ret = port_disable(instance, port); in vchiq_mmal_port_disable()
1496 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_port_disable()
1505 int vchiq_mmal_port_connect_tunnel(struct vchiq_mmal_instance *instance, in vchiq_mmal_port_connect_tunnel() argument
1511 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_port_connect_tunnel()
1516 ret = port_disable(instance, src); in vchiq_mmal_port_connect_tunnel()
1526 ret = port_action_handle(instance, src, in vchiq_mmal_port_connect_tunnel()
1557 ret = port_info_set(instance, dst); in vchiq_mmal_port_connect_tunnel()
1564 ret = port_info_get(instance, dst); in vchiq_mmal_port_connect_tunnel()
1571 ret = port_action_handle(instance, src, in vchiq_mmal_port_connect_tunnel()
1584 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_port_connect_tunnel()
1590 int vchiq_mmal_submit_buffer(struct vchiq_mmal_instance *instance, in vchiq_mmal_submit_buffer() argument
1597 ret = buffer_from_host(instance, port, buffer); in vchiq_mmal_submit_buffer()
1609 int mmal_vchi_buffer_init(struct vchiq_mmal_instance *instance, in mmal_vchi_buffer_init() argument
1612 struct mmal_msg_context *msg_context = get_msg_context(instance); in mmal_vchi_buffer_init()
1637 int vchiq_mmal_component_init(struct vchiq_mmal_instance *instance, in vchiq_mmal_component_init() argument
1645 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_component_init()
1649 if (!instance->component[idx].in_use) { in vchiq_mmal_component_init()
1650 component = &instance->component[idx]; in vchiq_mmal_component_init()
1667 ret = create_component(instance, component, name); in vchiq_mmal_component_init()
1680 ret = port_info_get(instance, &component->control); in vchiq_mmal_component_init()
1690 ret = port_info_get(instance, &component->input[idx]); in vchiq_mmal_component_init()
1701 ret = port_info_get(instance, &component->output[idx]); in vchiq_mmal_component_init()
1712 ret = port_info_get(instance, &component->clock[idx]); in vchiq_mmal_component_init()
1719 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_component_init()
1724 destroy_component(instance, component); in vchiq_mmal_component_init()
1728 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_component_init()
1737 int vchiq_mmal_component_finalise(struct vchiq_mmal_instance *instance, in vchiq_mmal_component_finalise() argument
1742 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_component_finalise()
1746 ret = disable_component(instance, component); in vchiq_mmal_component_finalise()
1748 ret = destroy_component(instance, component); in vchiq_mmal_component_finalise()
1752 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_component_finalise()
1761 int vchiq_mmal_component_enable(struct vchiq_mmal_instance *instance, in vchiq_mmal_component_enable() argument
1766 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_component_enable()
1770 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_component_enable()
1774 ret = enable_component(instance, component); in vchiq_mmal_component_enable()
1778 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_component_enable()
1787 int vchiq_mmal_component_disable(struct vchiq_mmal_instance *instance, in vchiq_mmal_component_disable() argument
1792 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_component_disable()
1796 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_component_disable()
1800 ret = disable_component(instance, component); in vchiq_mmal_component_disable()
1804 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_component_disable()
1810 int vchiq_mmal_version(struct vchiq_mmal_instance *instance, in vchiq_mmal_version() argument
1815 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_version()
1818 ret = get_version(instance, major_out, minor_out); in vchiq_mmal_version()
1820 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_version()
1826 int vchiq_mmal_finalise(struct vchiq_mmal_instance *instance) in vchiq_mmal_finalise() argument
1830 if (!instance) in vchiq_mmal_finalise()
1833 if (mutex_lock_interruptible(&instance->vchiq_mutex)) in vchiq_mmal_finalise()
1836 vchiq_use_service(instance->vchiq_instance, instance->service_handle); in vchiq_mmal_finalise()
1838 status = vchiq_close_service(instance->vchiq_instance, instance->service_handle); in vchiq_mmal_finalise()
1842 mutex_unlock(&instance->vchiq_mutex); in vchiq_mmal_finalise()
1844 vchiq_shutdown(instance->vchiq_instance); in vchiq_mmal_finalise()
1845 destroy_workqueue(instance->bulk_wq); in vchiq_mmal_finalise()
1847 idr_destroy(&instance->context_map); in vchiq_mmal_finalise()
1849 kfree(instance); in vchiq_mmal_finalise()
1859 struct vchiq_mmal_instance *instance; in vchiq_mmal_init() local
1897 instance = kzalloc(sizeof(*instance), GFP_KERNEL); in vchiq_mmal_init()
1899 if (!instance) { in vchiq_mmal_init()
1904 mutex_init(&instance->vchiq_mutex); in vchiq_mmal_init()
1906 instance->vchiq_instance = vchiq_instance; in vchiq_mmal_init()
1908 mutex_init(&instance->context_map_lock); in vchiq_mmal_init()
1909 idr_init_base(&instance->context_map, 1); in vchiq_mmal_init()
1911 params.userdata = instance; in vchiq_mmal_init()
1913 instance->bulk_wq = alloc_ordered_workqueue("mmal-vchiq", in vchiq_mmal_init()
1915 if (!instance->bulk_wq) in vchiq_mmal_init()
1919 &instance->service_handle); in vchiq_mmal_init()
1926 vchiq_release_service(instance->vchiq_instance, instance->service_handle); in vchiq_mmal_init()
1928 *out_instance = instance; in vchiq_mmal_init()
1933 vchiq_close_service(instance->vchiq_instance, instance->service_handle); in vchiq_mmal_init()
1934 destroy_workqueue(instance->bulk_wq); in vchiq_mmal_init()
1936 kfree(instance); in vchiq_mmal_init()