Understanding VirtIO PCI Configuration: Key Features and Initialization Process Explained

September 13, 2026
Understanding VirtIO PCI Configuration: Key Features and Initialization Process Explained
  • VirtIO PCI configuration (CFG_TYPE = 1) defines fields for features negotiation, queue management, and device status, including device_feature, driver_feature, queue descriptors, and pointers to descriptor and rings.

  • VirtIO devices are paravirtualized and discovered/configured via PCI, with capabilities including common config (CFG_TYPE = 1), notification (CFG_TYPE = 2), ISR (CFG_TYPE = 3), device-specific (CFG_TYPE = 4), and PCI config (CFG_TYPE = 5).

  • MSI-X interrupts are used, with enabling/disabling of legacy interrupts described and specific capability identifiers (MSI-X = 0x11, MSI = 0x05) and required MSI-X initialization handling.

  • The driver initialization is two-layered: first PCI, then VirtIO, followed by handoff to underlying devices, with logging of devices in a global kernel registry.

  • PCI address structure maps bus, device, function, and register fields in ECAM space, including vendor_id, device_id, and header_type to distinguish devices from bridges.

  • PCI ECAM provides access to PCI configuration space via addresses derived from ACPI MCFG, spanning 32-bit or 64-bit MMIO spaces.

  • Virtual queues (VIRTQUEUES) layout includes a descriptor table, available/driver ring, and used/device ring, with sizes based on queue_size and descriptor formats.

  • Interrupt service routine (CFG_TYPE = 3) uses MSI-X queue IRQ fields to distinguish between queue interrupts and configuration changes.

  • Notification configuration (CFG_TYPE = 2) computes notify addresses using VirtioPciNotifyCapability and BAR offsets, with a bar_notify function calculating the BAR offset for notifications.

  • Device-specific (CFG_TYPE = 4) holds per-device structures that must be handled during initialization.

  • PCI capabilities form a linked list; devices expose capabilities with an id and next pointer to locate VirtIO configuration when vendor_id is 0x1AF4 and capability id is 0x09.

  • VirtIO configuration (CFG_TYPE = 5) mirrors PCI configuration space for compatibility.

Summary based on 1 source


Get a daily email with more Tech stories

Source

More Stories