]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c
OvmfPkg: SmbiosVersionLib: recognize SMBIOS 3.x entry point
[mirror_edk2.git] / OvmfPkg / Library / SmbiosVersionLib / DetectSmbiosVersionLib.c
index 9d5e337e1a3ac1c5777b9b9814df50e489fc70fb..950c3f7e0a317213227d0832650c31c548df1cae 100644 (file)
@@ -27,6 +27,7 @@
 \r
 typedef union {\r
   SMBIOS_TABLE_ENTRY_POINT     V2;\r
+  SMBIOS_TABLE_3_0_ENTRY_POINT V3;\r
 } QEMU_SMBIOS_ANCHOR;\r
 \r
 RETURN_STATUS\r
@@ -73,6 +74,22 @@ DetectSmbiosVersion (
                              QemuAnchor.V2.MinorVersion);\r
     break;\r
 \r
+  case sizeof QemuAnchor.V3:\r
+    QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);\r
+\r
+    if (QemuAnchor.V3.MajorVersion != 3 ||\r
+        QemuAnchor.V3.TableMaximumSize != TablesSize ||\r
+        CompareMem (QemuAnchor.V3.AnchorString, "_SM3_", 5) != 0) {\r
+      return RETURN_SUCCESS;\r
+    }\r
+    SmbiosVersion = (UINT16)(QemuAnchor.V3.MajorVersion << 8 |\r
+                             QemuAnchor.V3.MinorVersion);\r
+\r
+    DEBUG ((EFI_D_INFO, "%a: SMBIOS 3.x DocRev from QEMU: 0x%02x\n",\r
+      __FUNCTION__, QemuAnchor.V3.DocRev));\r
+    PcdSet8 (PcdSmbiosDocRev, QemuAnchor.V3.DocRev);\r
+    break;\r
+\r
   default:\r
     return RETURN_SUCCESS;\r
   }\r