/** Installs SMBIOS information for OVMF @param ImageHandle Module's image handle @param SystemTable Pointer of EFI_SYSTEM_TABLE @retval EFI_SUCCESS Smbios data successfully installed @retval Other Smbios data was not installed **/ EFI_STATUS EFIAPI SmbiosTablePublishEntry ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_SMBIOS_PROTOCOL *Smbios; SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure; // // Find the SMBIOS protocol // Status = gBS->LocateProtocol ( &gEfiSmbiosProtocolGuid, NULL, (VOID**)&Smbios ); if (EFI_ERROR (Status)) { return Status; } // // Add Xen SMBIOS data if found // EntryPointStructure = GetXenSmbiosTables (); if (EntryPointStructure != NULL) { Status = InstallAllStructures (Smbios, EntryPointStructure); } return Status; }
/** Installs SMBIOS information for OVMF @param ImageHandle Module's image handle @param SystemTable Pointer of EFI_SYSTEM_TABLE @retval EFI_SUCCESS Smbios data successfully installed @retval Other Smbios data was not installed **/ EFI_STATUS EFIAPI SmbiosTablePublishEntry ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_SMBIOS_PROTOCOL *Smbios; SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure; UINT8 *SmbiosTables; // // Find the SMBIOS protocol // Status = gBS->LocateProtocol ( &gEfiSmbiosProtocolGuid, NULL, (VOID**)&Smbios ); if (EFI_ERROR (Status)) { return Status; } // // Add Xen or QEMU SMBIOS data if found // EntryPointStructure = GetXenSmbiosTables (); if (EntryPointStructure != NULL) { SmbiosTables = (UINT8*)(UINTN)EntryPointStructure->TableAddress; } else { SmbiosTables = GetQemuSmbiosTables (); } if (SmbiosTables != NULL) { Status = InstallAllStructures (Smbios, SmbiosTables); // // Free SmbiosTables if allocated by Qemu (i.e., NOT by Xen): // if (EntryPointStructure == NULL) { FreePool (SmbiosTables); } } return Status; }