]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c
OvmfPkg: Introduce XenBus Protocol.
[mirror_edk2.git] / OvmfPkg / SmbiosPlatformDxe / SmbiosPlatformDxe.c
index 42a5132e0e7b2f1752d2def4c571fca497f3758f..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
@@ -106,7 +106,7 @@ InstallAllStructures (
     //\r
     // Log the SMBIOS data for this structure\r
     //\r
-    SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r
+    SmbiosHandle = SmbiosTable.Hdr->Handle;\r
     Status = Smbios->Add (\r
                        Smbios,\r
                        NULL,\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