OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader

EFI_XEN_OVMF_INFO is only useful to retrieve the E820 table. The
mXenHvmloaderInfo isn't used yet, but will be use in a further patch to
retrieve the E820 table.

Also remove the unused pointer from the XenInfo HOB as that information
is only useful in the XenPlatformPei.

Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20190813113119.14804-11-anthony.perard@citrix.com>
This commit is contained in:
Anthony PERARD 2019-08-13 12:30:54 +01:00 committed by Laszlo Ersek
parent 31d4e8b029
commit 8651e1ce71
3 changed files with 23 additions and 9 deletions

View File

@ -18,10 +18,6 @@ typedef struct {
///
VOID *HyperPages;
///
/// Location of the hvm_info page.
///
VOID *HvmInfo;
///
/// Hypervisor major version.
///
UINT16 VersionMajor;

View File

@ -98,9 +98,6 @@ XenConnect (
mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF);
/* TBD: Locate hvm_info and reserve it away. */
mXenInfo.HvmInfo = NULL;
BuildGuidDataHob (
&gEfiXenInfoGuid,
&mXenInfo,

View File

@ -33,6 +33,12 @@ STATIC UINT32 mXenLeaf = 0;
EFI_XEN_INFO mXenInfo;
//
// Location of the firmware info struct setup by hvmloader.
// Only the E820 table is used by OVMF.
//
EFI_XEN_OVMF_INFO *mXenHvmloaderInfo;
/**
Returns E820 map provided by Xen
@ -78,6 +84,8 @@ XenConnect (
UINT32 TransferReg;
UINT32 TransferPages;
UINT32 XenVersion;
EFI_XEN_OVMF_INFO *Info;
CHAR8 Sig[sizeof (Info->Signature) + 1];
AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
mXenInfo.HyperPages = AllocatePages (TransferPages);
@ -97,8 +105,21 @@ XenConnect (
mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF);
/* TBD: Locate hvm_info and reserve it away. */
mXenInfo.HvmInfo = NULL;
//
// Check if there are information left by hvmloader
//
Info = (EFI_XEN_OVMF_INFO *)(UINTN) OVMF_INFO_PHYSICAL_ADDRESS;
//
// Copy the signature, and make it null-terminated.
//
AsciiStrnCpyS (Sig, sizeof (Sig), (CHAR8 *) &Info->Signature,
sizeof (Info->Signature));
if (AsciiStrCmp (Sig, "XenHVMOVMF") == 0) {
mXenHvmloaderInfo = Info;
} else {
mXenHvmloaderInfo = NULL;
}
BuildGuidDataHob (
&gEfiXenInfoGuid,