interface device_mapper_driver { /* Establish connection (iface is DEVMAP_DRIVER) */ ipcarg_t ipc_m_connect_me_to(in ipcarg_t iface); /* Register as a new driver */ ipcarg_t driver_register(void); /* Unregister all devices and the driver itself */ ipcarg_t driver_unregister(void); /* Register new device and return handle */ ipcarg_t device_register(out ipcarg_t handle); /* Unregister device */ ipcarg_t device_unregister(in ipcarg_t handle); /* Resolve device name to handle */ ipcarg_t device_get_handle(in ipcarg_t flags); /* Get device name for a given handle */ ipcarg_t device_get_name(in ipcarg_t handle); /* Transfer driver or device name */ ipcarg_t ipc_m_data_write(in ipcarg_t src_addr, in ipcarg_t src_size, out ipcarg_t dst_addr, out ipcarg_t dst_size); /* Close connection */ ipcarg_t ipc_m_phone_hungup(void); protocol: [device_mapper_driver.bp] }; interface device_mapper_client { /* Establish connection (iface is DEVMAP_CLIENT) or forward to device (iface is DEVMAP_CONNECT_TO_DEVICE) */ ipcarg_t ipc_m_connect_me_to(in ipcarg_t iface, in ipcarg_t handle); /* Resolve device name to handle */ ipcarg_t device_get_handle(in ipcarg_t flags); /* Get device name for a given handle */ ipcarg_t device_get_name(in ipcarg_t handle); /* Clone NULL device */ ipcarg_t device_null_create(out ipcarg_t index); /* Destroy NULL device */ ipcarg_t device_null_destroy(in ipcarg_t index); /* Get number of devices */ ipcarg_t device_get_count(out ipcarg_t count); /* Get an array of (device_name, handle) pairs */ ipcarg_t device_get_devices(void) /* Transfer device name from client */ ipcarg_t ipc_m_data_write(in ipcarg_t src_addr, in ipcarg_t src_size, out ipcarg_t dst_addr, out ipcarg_t dst_size); /* Transfer (device_name, handle) pairs to client */ ipcarg_t ipc_m_data_read(in ipcarg_t src_addr, in ipcarg_t src_size, out ipcarg_t dst_addr, out ipcarg_t dst_size); /* Close connection */ ipcarg_t ipc_m_phone_hungup(void); protocol: [device_mapper_client.bp] }; frame devmap { provides: device_mapper_driver dm_driver; device_mapper_client dm_client; requires: [/lib/libc/iface.requires] protocol: [devmap.bp] };