]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/VirtioMmioDeviceLib: Add virtio 1.0 detection.
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 27 Aug 2021 13:44:54 +0000 (21:44 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 30 Aug 2021 01:05:49 +0000 (01:05 +0000)
Add #defines for the Version field.  Read and store the version,
log the version found as info message.

Continue to return UNSUPPORTED for now, we need some more patches
to complete virtio 1.0 support first.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c
OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h

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
index ab53b90d51c90022f906ec5328e2387ca5edb6ff..0c2f99633c469a54fe4bdd06596df51830b81297 100644 (file)
 #include <Library/MemoryAllocationLib.h>\r
 \r
 #define VIRTIO_MMIO_DEVICE_SIGNATURE  SIGNATURE_32 ('V', 'M', 'I', 'O')\r
+#define VIRTIO_MMIO_DEVICE_VERSION_0_95  1\r
+#define VIRTIO_MMIO_DEVICE_VERSION_1_00  2\r
+\r
 \r
 typedef struct {\r
   UINT32                 Signature;\r
+  UINT32                 Version;\r
   VIRTIO_DEVICE_PROTOCOL VirtioDevice;\r
   PHYSICAL_ADDRESS       BaseAddress;\r
 } VIRTIO_MMIO_DEVICE;\r