)\r
{\r
UINT32 MagicValue;\r
- UINT32 Version;\r
\r
//\r
// Initialize VirtIo Mmio Device\r
CopyMem (&Device->VirtioDevice, &mMmioDeviceProtocolTemplate,\r
sizeof (VIRTIO_DEVICE_PROTOCOL));\r
Device->BaseAddress = BaseAddress;\r
- Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (0, 9, 5);\r
Device->VirtioDevice.SubSystemDeviceId =\r
MmioRead32 (BaseAddress + VIRTIO_MMIO_OFFSET_DEVICE_ID);\r
\r
return EFI_UNSUPPORTED;\r
}\r
\r
- Version = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_VERSION);\r
- if (Version != 1) {\r
+ Device->Version = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_VERSION);\r
+ switch (Device->Version) {\r
+ case VIRTIO_MMIO_DEVICE_VERSION_0_95:\r
+ DEBUG ((DEBUG_INFO, "%a virtio 0.9.5, id %d\n", __FUNCTION__,\r
+ Device->VirtioDevice.SubSystemDeviceId));\r
+ Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (0, 9, 5);\r
+ break;\r
+ case VIRTIO_MMIO_DEVICE_VERSION_1_00:\r
+ DEBUG ((DEBUG_INFO, "%a virtio 1.0, id %d\n", __FUNCTION__,\r
+ Device->VirtioDevice.SubSystemDeviceId));\r
+ Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (1, 0, 0);\r
+ return EFI_UNSUPPORTED;\r
+ default:\r
return EFI_UNSUPPORTED;\r
}\r
\r