Files
system76-edk2/OvmfPkg/SmbiosPlatformDxe/X86Xen.c
Laszlo Ersek 7e25086a00 OvmfPkg/SmbiosPlatformDxe: clean up #includes and INF
- Sort all sections in the INF file.

- Remove unused packages (MdeModulePkg) and lib classes (BaseMemoryLib)
  from the INF file.

- Restrict some lib classes (BaseLib, HobLib) and GUIDs (gEfiXenInfoGuid)
  to IA32 and X64, in the INF file; only the IA32/X64 Xen implementation
  requires these.

- Don't make "SmbiosPlatformDxe.h" #include everything just as a
  convenience. Spell out directly needed #includes in every file (annotate
  each with an example identifier consumed), drop unused #includes.

- Keep #includes sorted.

- Remove the leading underscore from the #include guard macro name in
  "SmbiosPlatformDxe.h".

Cc: Anthony Perard <anthony.perard@citrix.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Julien Grall <julien@xen.org>
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2122
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20210526201446.12554-37-lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
2021-06-04 16:01:50 +00:00

95 lines
2.4 KiB
C

/** @file
Detect Xen hvmloader SMBIOS data for usage by OVMF.
Copyright (c) 2011, Bei Guan <gbtju85@gmail.com>
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Library/BaseLib.h> // AsciiStrnCmp()
#include <Library/HobLib.h> // GetFirstGuidHob()
#include <Pi/PiHob.h> // EFI_HOB_GUID_TYPE
#include "SmbiosPlatformDxe.h"
#define XEN_SMBIOS_PHYSICAL_ADDRESS 0x000EB000
#define XEN_SMBIOS_PHYSICAL_END 0x000F0000
/**
Validates the SMBIOS entry point structure
@param EntryPointStructure SMBIOS entry point structure
@retval TRUE The entry point structure is valid
@retval FALSE The entry point structure is not valid
**/
STATIC
BOOLEAN
IsEntryPointStructureValid (
IN SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure
)
{
UINTN Index;
UINT8 Length;
UINT8 Checksum;
UINT8 *BytePtr;
BytePtr = (UINT8*) EntryPointStructure;
Length = EntryPointStructure->EntryPointLength;
Checksum = 0;
for (Index = 0; Index < Length; Index++) {
Checksum = Checksum + (UINT8) BytePtr[Index];
}
if (Checksum != 0) {
return FALSE;
} else {
return TRUE;
}
}
/**
Locates the Xen SMBIOS data if it exists
@return SMBIOS_TABLE_ENTRY_POINT Address of Xen SMBIOS data
**/
SMBIOS_TABLE_ENTRY_POINT *
GetXenSmbiosTables (
VOID
)
{
UINT8 *XenSmbiosPtr;
SMBIOS_TABLE_ENTRY_POINT *XenSmbiosEntryPointStructure;
EFI_HOB_GUID_TYPE *GuidHob;
//
// See if a XenInfo HOB is available
//
GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid);
if (GuidHob == NULL) {
return NULL;
}
for (XenSmbiosPtr = (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_ADDRESS;
XenSmbiosPtr < (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_END;
XenSmbiosPtr += 0x10) {
XenSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *) XenSmbiosPtr;
if (!AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->AnchorString, "_SM_", 4) &&
!AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) &&
IsEntryPointStructureValid (XenSmbiosEntryPointStructure)) {
return XenSmbiosEntryPointStructure;
}
}
return NULL;
}