cdcd5a3 OvmfPkg: Virtio10Dxe: non-transitional driver for virtio-1.0 PCI devices

Authored and Committed by lersek 8 years ago
    OvmfPkg: Virtio10Dxe: non-transitional driver for virtio-1.0 PCI devices
    
    This driver implements the VIRTIO_DEVICE_PROTOCOL for non-transitional PCI
    devices, based on the virtio-1.0 specification (csprd05). Non-transitional
    means that it only binds QEMU's virtio-xxx-pci devices that receive the
    ",disable-legacy=on,disable-modern=off" properties on the QEMU command
    line. These devices have distinct PCI Device IDs from those that are bound
    by VirtioPciDeviceDxe.
    
    The central abstraction of this driver is the VIRTIO_1_0_CONFIG type. It
    is practically a "fat pointer" to a register block. The pointed-to
    register block
    - may or may not exist (the latter being mostly useful for virtio-1.0
      devices that have no device-specific registers),
    - lives in one of the device's BARs,
    - lives in an IO or MMIO BAR,
    - lives at an offset relative to the BAR start,
    - has its size also maintained.
    
    Such VIRTIO_1_0_CONFIG "fat pointers" (i.e., the locations of the register
    blocks) are parsed from vendor capabilities that reside in the device's
    standard PCI capabilities list (in PCI config space).
    
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Jordan Justen <jordan.l.justen@intel.com>
    Contributed-under: TianoCore Contribution Agreement 1.0
    Signed-off-by: Laszlo Ersek <lersek@redhat.com>