]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader
authorAnthony PERARD <anthony.perard@citrix.com>
Tue, 13 Aug 2019 11:30:54 +0000 (12:30 +0100)
committerLaszlo Ersek <lersek@redhat.com>
Wed, 21 Aug 2019 16:03:49 +0000 (18:03 +0200)
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>

OvmfPkg/Include/Guid/XenInfo.h
OvmfPkg/PlatformPei/Xen.c
OvmfPkg/XenPlatformPei/Xen.c

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