summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony PERARD <anthony.perard@citrix.com>2019-08-13 12:30:54 +0100
committerLaszlo Ersek <lersek@redhat.com>2019-08-21 18:03:49 +0200
commit8651e1ce71ac7e974930016438cdc11bcb113c30 (patch)
tree83939276c13441b56dd70627d5d4a0bb188bf3b4
parent31d4e8b029fe737f16f90d3ce8ffdfa60f30f62c (diff)
downloadedk2-8651e1ce71ac7e974930016438cdc11bcb113c30.tar.gz
edk2-8651e1ce71ac7e974930016438cdc11bcb113c30.tar.bz2
edk2-8651e1ce71ac7e974930016438cdc11bcb113c30.zip
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>
-rw-r--r--OvmfPkg/Include/Guid/XenInfo.h4
-rw-r--r--OvmfPkg/PlatformPei/Xen.c3
-rw-r--r--OvmfPkg/XenPlatformPei/Xen.c25
3 files changed, 23 insertions, 9 deletions
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,