L4Re Operating System Framework – Interface and Usage Documentation
Loading...
Searching...
No Matches
L4virtio::Svr::Virtqueue Class Reference

Virtqueue implementation for the device. More...

#include <virtio>

+ Inheritance diagram for L4virtio::Svr::Virtqueue:
+ Collaboration diagram for L4virtio::Svr::Virtqueue:

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.
 

Detailed Description

Virtqueue implementation for the device.

This class represents a single virtqueue, with a local running available index.

Note
The Virtqueue implementation is not thread-safe.

Definition at line 87 of file virtio.

Member Function Documentation

◆ consumed()

void L4virtio::Svr::Virtqueue::consumed ( Head_desc const &  r,
l4_uint32_t  len = 0 
)
inline

Put the given descriptor into the used ring.

Parameters
rrequest that shall be marked as finished.
lenthe total number of bytes written.
Precondition
queue must be in working state.
r must be a valid request from this queue.

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.

◆ desc()

Desc const * L4virtio::Svr::Virtqueue::desc ( unsigned  idx) const
inline

Get a descriptor from the descriptor list.

Parameters
idxthe index of the descriptor.
Precondition
idx < num
queue must be in working state

Definition at line 231 of file virtio.

References L4virtio::Virtqueue::_desc.

Referenced by L4virtio::Svr::Request_processor::start().

+ Here is the caller graph for this function:

◆ desc_avail()

bool L4virtio::Svr::Virtqueue::desc_avail ( ) const
inline

Test for available descriptors.

Returns
true if there are descriptors available, false if not.
Precondition
The queue must be in working state.

Definition at line 154 of file virtio.

References L4virtio::Virtqueue::_avail, L4virtio::Virtqueue::_current_avail, and L4virtio::Virtqueue::Avail::idx.

◆ disable_notify()

void L4virtio::Svr::Virtqueue::disable_notify ( )
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().

+ Here is the call graph for this function:

◆ enable_notify()

void L4virtio::Svr::Virtqueue::enable_notify ( )
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().

+ Here is the call graph for this function:

◆ next_avail()

Request L4virtio::Svr::Virtqueue::next_avail ( )
inline

Get the next available descriptor from the available ring.

Precondition
The queue must be in working state.
Returns
A Request for the next available descriptor, the Request is invalid if there are no descriptors in the available ring.
Note
The return value must be checked even when a previous desc_avail() returned true.

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.


The documentation for this class was generated from the following file: