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,