L4Re Operating System Framework
Interface and Usage Documentation
|
List of driver memory regions assigned to a single L4-VIRTIO transport instance. More...
#include <l4virtio>
Public Types | |
typedef L4Re::Util::Unique_cap< L4Re::Dataspace > | Ds_cap |
type for storing a data-space capability internally | |
Public Member Functions | |
Driver_mem_list_t () | |
Make an empty, zero capacity list. | |
void | init (unsigned max) |
Make a fresh list with capacity max. | |
bool | full () const |
Mem_region const * | add (l4_uint64_t drv_base, l4_umword_t size, l4_addr_t offset, Ds_cap &&ds) |
Add a new region to the list. | |
void | remove (Mem_region const *r) |
Remove the given region from the list. | |
Mem_region * | find (l4_uint64_t base, l4_umword_t size) const |
Find memory region containing the given driver address region. | |
void | load_desc (Virtqueue::Desc const &desc, Request_processor const *p, Virtqueue::Desc const **table) const |
Default implementation for loading an indirect descriptor. | |
void | load_desc (Virtqueue::Desc const &desc, Request_processor const *p, Mem_region const **data) const |
Default implementation returning the Driver_mem_region. | |
template<typename ARG > | |
void | load_desc (Virtqueue::Desc const &desc, Request_processor const *p, ARG *data) const |
Default implementation returning generic information. | |
List of driver memory regions assigned to a single L4-VIRTIO transport instance.
|
inline |
Add a new region to the list.
drv_base | Driver base address of the region. |
size | Size of the region in bytes. |
offset | Offset within the data space attached to drv_base. |
ds | Data space backing the driver memory. |
Definition at line 669 of file l4virtio.
References L4Re::chksys(), L4virtio::Svr::Driver_mem_list_t< DATA >::full(), and L4_ENOMEM.
|
inline |
Find memory region containing the given driver address region.
base | Driver base address. |
size | Size of the region. |
Definition at line 703 of file l4virtio.
Referenced by L4virtio::Svr::Driver_mem_list_t< DATA >::load_desc(), L4virtio::Svr::Driver_mem_list_t< DATA >::load_desc(), and L4virtio::Svr::Driver_mem_list_t< DATA >::load_desc().
|
inline |
Definition at line 658 of file l4virtio.
Referenced by L4virtio::Svr::Driver_mem_list_t< DATA >::add().
|
inline |
|
inline |
Default implementation returning generic information.
ARG | Abstract argument type used with Request_processor::start() and Request_processor::next() to deliver the result of loading a descriptor. This type must provide a constructor taking three arguments: (1) pointer to a Driver_mem_region, (2) the Virtqueue::Desc descriptor, and (3) a pointer to the calling Request_processor. |
desc | The descriptor to load | |
p | The request processor calling us | |
[out] | data | Shall be assigned to ARG(mem, desc, p) |
Bad_descriptor | The descriptor address could not be translated. |
Definition at line 764 of file l4virtio.
References L4virtio::Virtqueue::Desc::addr, L4virtio::Svr::Bad_descriptor::Bad_address, L4virtio::Svr::Driver_mem_list_t< DATA >::find(), L4virtio::Ptr< T >::get(), L4_UNLIKELY, and L4virtio::Virtqueue::Desc::len.
|
inline |
Default implementation returning the Driver_mem_region.
desc | The descriptor to load | |
p | The request processor calling us | |
[out] | data | Shall be set to a pointer to the Driver_mem_region that covers the descriptor. |
Bad_descriptor | The descriptor address could not be translated. |
Definition at line 737 of file l4virtio.
References L4virtio::Virtqueue::Desc::addr, L4virtio::Svr::Bad_descriptor::Bad_address, L4virtio::Svr::Driver_mem_list_t< DATA >::find(), L4virtio::Ptr< T >::get(), L4_UNLIKELY, and L4virtio::Virtqueue::Desc::len.
|
inline |
Default implementation for loading an indirect descriptor.
desc | The descriptor to load | |
p | The request processor calling us | |
[out] | table | Shall be set to the loaded descriptor table |
Bad_descriptor | The descriptor address could not be translated. |
Definition at line 717 of file l4virtio.
References L4virtio::Virtqueue::Desc::addr, L4virtio::Svr::Bad_descriptor::Bad_address, L4virtio::Svr::Driver_mem_list_t< DATA >::find(), L4virtio::Ptr< T >::get(), L4_UNLIKELY, and L4virtio::Virtqueue::Desc::len.
|
inline |