L4Re Operating System Framework – Interface and Usage Documentation
|
Virtqueue implementation for the device. More...
#include <virtio>
Data Structures | |
class | Head_desc |
VIRTIO request, essentially a descriptor from the available ring. More... | |
Public Member Functions | |
Request | next_avail () |
Get the next available descriptor from the available ring. | |
bool | desc_avail () const |
Test for available descriptors. | |
void | consumed (Head_desc const &r, l4_uint32_t len=0) |
Put the given descriptor into the used ring. | |
void | disable_notify () |
Set the 'no notify' flag for this queue. | |
void | enable_notify () |
Clear the 'no notify' flag for this queue. | |
Desc const * | desc (unsigned idx) const |
Get a descriptor from the descriptor list. | |
Public Member Functions inherited from L4virtio::Virtqueue | |
void | disable () |
Completely disable the queue. | |
unsigned long | total_size () const |
Calculate the total size of this virtqueue. | |
unsigned long | avail_offset () const |
Get the offset of the available ring from the descriptor table. | |
unsigned long | used_offset () const |
Get the offset of the used ring from the descriptor table. | |
void | setup (unsigned num, void *desc, void *avail, void *used) |
Enable this queue. | |
void | setup_simple (unsigned num, void *ring) |
Enable this queue. | |
void | dump (Desc const *d) const |
Dump descriptors for this queue. | |
bool | ready () const |
Test if this queue is in working state. | |
unsigned | num () const |
bool | no_notify_guest () const |
Get the no IRQ flag of this queue. | |
bool | no_notify_host () const |
Get the no notify flag of this queue. | |
void | no_notify_host (bool value) |
Set the no-notify flag for this queue. | |
l4_uint16_t | get_avail_idx () const |
Get available index from available ring (for debugging). | |
l4_uint16_t | get_tail_avail_idx () const |
Get tail-available index stored in local state (for debugging). | |
Additional Inherited Members | |
Public Types inherited from L4virtio::Virtqueue | |
enum | |
Fixed alignment values for different parts of a virtqueue. | |
Static Public Member Functions inherited from L4virtio::Virtqueue | |
static unsigned long | total_size (unsigned num) |
Calculate the total size for a virtqueue of the given dimensions. | |
static unsigned long | desc_size (unsigned num) |
Calculate the size of the descriptor table for num entries. | |
static unsigned long | desc_align () |
Get the alignment in zero LSBs needed for the descriptor table. | |
static unsigned long | avail_size (unsigned num) |
Calculate the size of the available ring for num entries. | |
static unsigned long | avail_align () |
Get the alignment in zero LSBs needed for the available ring. | |
static unsigned long | used_size (unsigned num) |
Calculate the size of the used ring for num entries. | |
static unsigned long | used_align () |
Get the alignment in zero LSBs needed for the used ring. | |
Protected Member Functions inherited from L4virtio::Virtqueue | |
Virtqueue () | |
Create a disabled virtqueue. | |
Protected Attributes inherited from L4virtio::Virtqueue | |
Desc * | _desc |
pointer to descriptor table, NULL if queue is off. | |
Avail * | _avail |
pointer to available ring. | |
Used * | _used |
pointer to used ring. | |
l4_uint16_t | _current_avail |
The life counter for the queue. | |
l4_uint16_t | _idx_mask |
mask used for indexing into the descriptor table and the rings. | |
Virtqueue implementation for the device.
This class represents a single virtqueue, with a local running available index.
|
inline |
Put the given descriptor into the used ring.
r | request that shall be marked as finished. |
len | the total number of bytes written. |
Definition at line 166 of file virtio.
References L4virtio::Virtqueue::_desc, L4virtio::Virtqueue::_idx_mask, L4virtio::Virtqueue::_used, L4virtio::Virtqueue::Used::idx, and L4virtio::Virtqueue::Used::ring.
|
inline |
Get a descriptor from the descriptor list.
idx | the index of the descriptor. |
Definition at line 231 of file virtio.
References L4virtio::Virtqueue::_desc.
Referenced by L4virtio::Svr::Request_processor::start().
|
inline |
Test for available descriptors.
Definition at line 154 of file virtio.
References L4virtio::Virtqueue::_avail, L4virtio::Virtqueue::_current_avail, and L4virtio::Virtqueue::Avail::idx.
|
inline |
Set the 'no notify' flag for this queue.
This function may be called on a disabled queue.
Definition at line 208 of file virtio.
References L4virtio::Virtqueue::_used, L4virtio::Virtqueue::Used::flags, L4_LIKELY, L4virtio::Virtqueue::Used::Flags::no_notify(), and L4virtio::Virtqueue::ready().
|
inline |
Clear the 'no notify' flag for this queue.
This function may be called on a disabled queue.
Definition at line 219 of file virtio.
References L4virtio::Virtqueue::_used, L4virtio::Virtqueue::Used::flags, L4_LIKELY, L4virtio::Virtqueue::Used::Flags::no_notify(), and L4virtio::Virtqueue::ready().
|
inline |
Get the next available descriptor from the available ring.
Definition at line 137 of file virtio.
References L4virtio::Virtqueue::_avail, L4virtio::Virtqueue::_current_avail, L4virtio::Virtqueue::_idx_mask, L4virtio::Virtqueue::Avail::idx, L4_LIKELY, and L4virtio::Virtqueue::Avail::ring.