|
long | set_status (unsigned status) |
| Write the VIRTIO status register. More...
|
|
long | config_queue (unsigned queue) |
| Trigger queue configuration of the given queue. More...
|
|
long | register_ds (L4::Ipc::Cap< L4Re::Dataspace > ds_cap, l4_uint64_t base, l4_umword_t offset, l4_umword_t size) |
| Register a shared data space with VIRTIO host. More...
|
|
long | register_iface (L4::Ipc::Cap< L4::Triggerable > guest_irq, L4::Ipc::Out< L4::Cap< L4::Triggerable > > host_irq, L4::Ipc::Out< L4::Cap< L4Re::Dataspace > > config_ds) |
| Register client to the L4-VIRTIO device. More...
|
|
long | device_config (L4::Ipc::Out< L4::Cap< L4Re::Dataspace > > config_ds, l4_addr_t *ds_offset) |
| Get the dataspace with the L4virtio configuration page. More...
|
|
long | device_notification_irq (unsigned index, L4::Ipc::Out< L4::Cap< L4::Triggerable > > irq) |
| Get the notification interrupt corresponding to the given index. More...
|
|
l4_msgtag_t | bind (unsigned irqnum, L4::Cap< Triggerable > irq, l4_utcb_t *utcb=l4_utcb()) throw () |
| Bind an interrupt line of an interrupt controller to an interrupt object. More...
|
|
l4_msgtag_t | unbind (unsigned irqnum, L4::Cap< Triggerable > irq, l4_utcb_t *utcb=l4_utcb()) throw () |
| Remove binding of an interrupt line from the interrupt controller object. More...
|
|
l4_msgtag_t | info (l4_icu_info_t *info, l4_utcb_t *utcb=l4_utcb()) throw () |
| Get information about the capabilities of the ICU. More...
|
|
l4_msgtag_t | msi_info (l4_umword_t irqnum, l4_uint64_t source, l4_icu_msi_info_t *msi_info) |
| Get MSI info about IRQ. More...
|
|
l4_msgtag_t | mask (unsigned irqnum, l4_umword_t *label=0, l4_timeout_t to=L4_IPC_NEVER, l4_utcb_t *utcb=l4_utcb()) throw () |
| Mask an IRQ line. More...
|
|
l4_msgtag_t | set_mode (unsigned irqnum, l4_umword_t mode, l4_utcb_t *utcb=l4_utcb()) throw () |
| Set interrupt mode. More...
|
|
l4_msgtag_t | unmask (unsigned irqnum, l4_umword_t *label=0, l4_timeout_t to=L4_IPC_NEVER, l4_utcb_t *utcb=l4_utcb()) throw () |
| Acknowledge the given interrupt line. More...
|
|
|
typedef Device | Class |
| The target interface type (inheriting from Kobject_t)
|
|
typedef Typeid::Iface< PROTO, Device > | __Iface |
| The interface description for the derived class.
|
|
typedef Typeid::Merge_list< Typeid::Iface_list< __Iface >, typename L4::Icu ::__Iface_list > | __Iface_list |
| The list of all RPC interfaces provided directly or through inheritance.
|
|
typedef Icu | Class |
| The target interface type (inheriting from Kobject_t)
|
|
typedef Typeid::Iface< PROTO, Icu > | __Iface |
| The interface description for the derived class.
|
|
typedef Typeid::Merge_list< Typeid::Iface_list< __Iface >, typename Irq_eoi ::__Iface_list > | __Iface_list |
| The list of all RPC interfaces provided directly or through inheritance.
|
|
L4::Cap< Class > | c () const |
| Get the capability to ourselves.
|
|
L4::Cap< Class > | c () const |
| Get the capability to ourselves.
|
|
static void | __check_protocols__ () |
| Helper to check for protocol conflicts.
|
|
static void | __check_protocols__ () |
| Helper to check for protocol conflicts.
|
|
IPC interface for virtio over L4 IPC.
The L4virtio protocol is an adaption of the mmio virtio transport 1.0(4). This interface allows to exchange the necessary resources: device configuration page, notification interrupts and dataspaces for payload.
Notification interrupts can be configured independently for changes to the configuration space and each queue through special L4virtio-specific notify_index fields in the config page and queue configuration. The interface distinguishes between device-to-driver and driver-to-device notification interrupts.
Device-to-driver interrupts are configured via the ICU interface. The device announces the maximum number of supported interrupts via Icu::info(). The driver can then bind interrupts using Icu::bind().
Driver-to-device interrupts must be requested from the device through device_notification_irq().
Definition at line 50 of file l4virtio.
Get the notification interrupt corresponding to the given index.
- Parameters
-
| index | Index of the interrupt. |
[out] | irq | Triggerable for the given index. |
- Return values
-
L4_EOK | Success. |
L4_ENOSYS | IRQ notification not supported by device. |
<0 | Other error. |
An index is only guaranteed to return an IRQ object when the index is set in one of the device notify index fields. The device must return the same interrupt for a given index as long as the index is in use. If an index disappears as a result of a configuration change and then is reused later, the interrupt is not guaranteed to be the same.
Interrupts must always be rerequested after a device reset.