Expand description
VirtIO guest drivers.
These drivers can be used by bare-metal code (such as a bootloader or OS kernel) running in a VM to interact with VirtIO devices provided by the VMM (such as QEMU or crosvm).
§Usage
You must first implement the Hal trait, to allocate DMA regions and translate between
physical addresses (as seen by devices) and virtual addresses (as seen by your program). You can
then construct the appropriate transport for the VirtIO device, e.g. for an MMIO device (perhaps
discovered from the device tree):
use core::ptr::NonNull;
use virtio_drivers::transport::mmio::{MmioTransport, VirtIOHeader};
let header = NonNull::new(mmio_device_address as *mut VirtIOHeader).unwrap();
let transport = unsafe { MmioTransport::new(header, mmio_size) }.unwrap();You can then check what kind of VirtIO device it is and construct the appropriate driver:
use virtio_drivers::{
device::console::VirtIOConsole,
transport::{mmio::MmioTransport, DeviceType, Transport},
};
if transport.device_type() == DeviceType::Console {
let mut console = VirtIOConsole::<HalImpl, _>::new(transport).unwrap();
// Send a byte to the console.
console.send(b'H').unwrap();
}Modules§
- config
- Types and macros for VirtIO device configuration space.
- device
- Drivers for specific VirtIO devices.
- queue
- Support for virt queues, the main mechanism for data transport on VirtIO devices.
- transport
- VirtIO transports.
Macros§
- read_
config - Reads the given field of the given struct from the device config space via the given transport.
- write_
config - Writes the given field of the given struct from the device config space via the given transport.
Structs§
- Unique
Mmio Pointer - A unique owned pointer to the registers of some MMIO device.
Enums§
- Buffer
Direction - The direction in which a buffer is passed.
- Error
- The error type of VirtIO drivers.
Constants§
- PAGE_
SIZE - The page size in bytes supported by the library (4 KiB).
Traits§
- Hal
- The interface which a particular hardware implementation must implement.