]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c
OvmfPkg/SMBIOS: Add QEMU support to OVMF SMBIOS driver
[mirror_edk2.git] / OvmfPkg / SmbiosPlatformDxe / SmbiosPlatformDxe.c
index ac48fb720819292092c6eba44cd9aaa7fef6db22..626f7dbbfb95ba65852e2ca480b2769e861d5239 100644 (file)
@@ -84,20 +84,20 @@ SmbiosTableLength (
   Install all structures from the given SMBIOS structures block\r
 \r
   @param  Smbios               SMBIOS protocol\r
-  @param  EntryPointStructure  SMBIOS entry point structures block\r
+  @param  TableAddress         SMBIOS tables starting address\r
 \r
 **/\r
 EFI_STATUS\r
 InstallAllStructures (\r
   IN EFI_SMBIOS_PROTOCOL       *Smbios,\r
-  IN SMBIOS_TABLE_ENTRY_POINT  *EntryPointStructure\r
+  IN UINT8                     *TableAddress\r
   )\r
 {\r
   EFI_STATUS                Status;\r
   SMBIOS_STRUCTURE_POINTER  SmbiosTable;\r
   EFI_SMBIOS_HANDLE         SmbiosHandle;\r
 \r
-  SmbiosTable.Raw = (UINT8*)(UINTN) EntryPointStructure->TableAddress;\r
+  SmbiosTable.Raw = TableAddress;\r
   if (SmbiosTable.Raw == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -145,6 +145,7 @@ SmbiosTablePublishEntry (
   EFI_STATUS                Status;\r
   EFI_SMBIOS_PROTOCOL       *Smbios;\r
   SMBIOS_TABLE_ENTRY_POINT  *EntryPointStructure;\r
+  UINT8                     *SmbiosTables;\r
 \r
   //\r
   // Find the SMBIOS protocol\r
@@ -159,11 +160,24 @@ SmbiosTablePublishEntry (
   }\r
 \r
   //\r
-  // Add Xen SMBIOS data if found\r
+  // Add Xen or QEMU SMBIOS data if found\r
   //\r
   EntryPointStructure = GetXenSmbiosTables ();\r
   if (EntryPointStructure != NULL) {\r
-    Status = InstallAllStructures (Smbios, EntryPointStructure);\r
+    SmbiosTables = (UINT8*)(UINTN)EntryPointStructure->TableAddress;\r
+  } else {\r
+    SmbiosTables = GetQemuSmbiosTables ();\r
+  }\r
+\r
+  if (SmbiosTables != NULL) {\r
+    Status = InstallAllStructures (Smbios, SmbiosTables);\r
+\r
+    //\r
+    // Free SmbiosTables if allocated by Qemu (i.e., NOT by Xen):\r
+    //\r
+    if (EntryPointStructure == NULL) {\r
+      FreePool (SmbiosTables);\r
+    }\r
   }\r
 \r
   return Status;\r