⚠️ VeridianOS Kernel Documentation - This is low-level kernel code. All functions are unsafe unless explicitly marked otherwise. no_std

Module virtio

Module virtio 

Source
Expand description

Virtio subsystem – transport layer and device drivers.

This module provides the virtio transport abstraction for VeridianOS, supporting two transport backends:

  • PCI transport (VirtioPciTransport): Used on x86_64, where virtio devices appear as PCI devices with vendor ID 0x1AF4 (Red Hat). The driver accesses device registers via BAR0 I/O port space.

  • MMIO transport (mmio::VirtioMmioTransport): Used on AArch64 and RISC-V, where QEMU’s virt machine exposes virtio devices as memory-mapped regions starting at 0x0A00_0000.

Both transports are unified behind the VirtioTransport enum, which provides a common interface for device initialization, feature negotiation, queue setup, and notification.

§Architecture

  VirtioTransport (enum)
    |-- Pci(VirtioPciTransport)      -- x86_64 via I/O ports (BAR0)
    |-- Mmio(VirtioMmioTransport)    -- AArch64/RISC-V via MMIO
    |
    +-- VirtQueue (queue.rs)         -- split virtqueue (shared)
    +-- VirtioBlkDevice (blk.rs)     -- block device driver (shared)

§Legacy PCI Layout (BAR0 I/O Space)

The PCI transport uses the legacy (transitional) virtio PCI interface as described in the virtio 1.0 specification, section 4.1:

OffsetSizeName
0x004device_features
0x044guest_features
0x084queue_address
0x0C2queue_size
0x0E2queue_select
0x102queue_notify
0x121device_status
0x131isr_status
0x14+vardevice config

For the MMIO register layout, see mmio.

Modules§

blk
Virtio-blk device driver
mmio
Virtio MMIO transport (virtio 1.0 legacy-compatible)
queue
Split virtqueue implementation for virtio devices.
regs
Legacy virtio PCI register offsets (I/O space via BAR0)
status
Virtio device status flags (virtio spec 2.1)

Structs§

VirtioPciTransport
Virtio PCI transport handle.

Enums§

VirtioTransport
Unified transport enum for virtio-blk

Constants§

VIRTIO_BLK_DEVICE_ID_LEGACY
Virtio-blk PCI device IDs Legacy device ID (virtio 0.9 / transitional)
VIRTIO_BLK_DEVICE_ID_MODERN
Modern device ID (virtio 1.0+, transitional)
VIRTIO_VENDOR_ID
Virtio vendor ID (Red Hat, Inc.)