]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c
OvmfPkg/VirtioMmioDeviceLib: Add virtio 1.0 detection.
[mirror_edk2.git] / OvmfPkg / Library / VirtioMmioDeviceLib / VirtioMmioDevice.c
index 6dbbba008c75fa3d1d5d407867c58ad6266ca6fd..0c92f5373151c1bd2996c67c577dfe2decaf8dfd 100644 (file)
@@ -58,7 +58,6 @@ VirtioMmioInit (
   )\r
 {\r
   UINT32     MagicValue;\r
-  UINT32     Version;\r
 \r
   //\r
   // Initialize VirtIo Mmio Device\r
@@ -66,7 +65,6 @@ VirtioMmioInit (
   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
@@ -78,8 +76,19 @@ VirtioMmioInit (
     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