OvmfPkg/XenPlatformPei: Setup HyperPages earlier

We are going to need to make an hypercall in order to retreive the E820
table from the hypervisor before been able to setup the memory.

Calling XenConnect earlier will allow to setup the XenHypercallLib
earlier to allow to make hypercalls.

While here, add some comments in XenConnect().

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-20-anthony.perard@citrix.com>
This commit is contained in:
Anthony PERARD 2019-08-13 12:31:03 +01:00 committed by Laszlo Ersek
parent 4022f7fa91
commit 12998837d5
3 changed files with 19 additions and 11 deletions

View File

@ -416,6 +416,8 @@ InitializeXenPlatform (
CpuDeadLoop ();
}
XenConnect ();
BootModeInitialization ();
AddressWidthInitialization ();

View File

@ -79,6 +79,11 @@ InstallClearCacheCallback (
VOID
);
EFI_STATUS
XenConnect (
VOID
);
EFI_STATUS
InitializeXen (
VOID

View File

@ -72,14 +72,11 @@ XenGetE820Map (
/**
Connects to the Hypervisor.
@param XenLeaf CPUID index used to connect.
@return EFI_STATUS
**/
EFI_STATUS
XenConnect (
UINT32 XenLeaf
)
{
UINT32 Index;
@ -91,7 +88,13 @@ XenConnect (
UINT32 *PVHResetVectorData;
RETURN_STATUS Status;
AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
ASSERT (mXenLeaf != 0);
//
// Prepare HyperPages to be able to make hypercalls
//
AsmCpuid (mXenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
mXenInfo.HyperPages = AllocatePages (TransferPages);
if (!mXenInfo.HyperPages) {
return EFI_OUT_OF_RESOURCES;
@ -103,7 +106,11 @@ XenConnect (
(Index << EFI_PAGE_SHIFT) + Index);
}
AsmCpuid (XenLeaf + 1, &XenVersion, NULL, NULL, NULL);
//
// Find out the Xen version
//
AsmCpuid (mXenLeaf + 1, &XenVersion, NULL, NULL, NULL);
DEBUG ((DEBUG_ERROR, "Detected Xen version %d.%d\n",
XenVersion >> 16, XenVersion & 0xFFFF));
mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);
@ -262,12 +269,6 @@ InitializeXen (
{
RETURN_STATUS PcdStatus;
if (mXenLeaf == 0) {
return EFI_NOT_FOUND;
}
XenConnect (mXenLeaf);
//
// Reserve away HVMLOADER reserved memory [0xFC000000,0xFD000000).
// This needs to match HVMLOADER RESERVED_MEMBASE/RESERVED_MEMSIZE.