From 8651e1ce71ac7e974930016438cdc11bcb113c30 Mon Sep 17 00:00:00 2001 From: Anthony PERARD Date: Tue, 13 Aug 2019 12:30:54 +0100 Subject: 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 Acked-by: Laszlo Ersek Message-Id: <20190813113119.14804-11-anthony.perard@citrix.com> --- OvmfPkg/Include/Guid/XenInfo.h | 4 ---- OvmfPkg/PlatformPei/Xen.c | 3 --- OvmfPkg/XenPlatformPei/Xen.c | 25 +++++++++++++++++++++++-- 3 files changed, 23 insertions(+), 9 deletions(-) (limited to 'OvmfPkg') diff --git a/OvmfPkg/Include/Guid/XenInfo.h b/OvmfPkg/Include/Guid/XenInfo.h index 25d76a7828..b052d618fd 100644 --- a/OvmfPkg/Include/Guid/XenInfo.h +++ b/OvmfPkg/Include/Guid/XenInfo.h @@ -18,10 +18,6 @@ typedef struct { /// VOID *HyperPages; /// - /// Location of the hvm_info page. - /// - VOID *HvmInfo; - /// /// Hypervisor major version. /// UINT16 VersionMajor; diff --git a/OvmfPkg/PlatformPei/Xen.c b/OvmfPkg/PlatformPei/Xen.c index 89dc4143b2..3e15b32a73 100644 --- a/OvmfPkg/PlatformPei/Xen.c +++ b/OvmfPkg/PlatformPei/Xen.c @@ -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, diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c index f4d0d1c73b..9962fe9fc7 100644 --- a/OvmfPkg/XenPlatformPei/Xen.c +++ b/OvmfPkg/XenPlatformPei/Xen.c @@ -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, -- cgit v1.2.3