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
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
}\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