OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables

XenIoPvhDxe use XenIoMmioLib to reserve some space to be use by the
Grant Tables.

The call is only done if it is necessary, we simply detect if the
guest is PVH, as in this case there is currently no PCI bus, and no
PCI Xen platform device which would start the XenIoPciDxe and allocate
the space for the Grant Tables.

Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20190813113119.14804-34-anthony.perard@citrix.com>
This commit is contained in:
Anthony PERARD 2019-08-13 12:31:17 +01:00 committed by Laszlo Ersek
parent 8f39d79d65
commit 833cd3e0c0
5 changed files with 94 additions and 0 deletions

View File

@ -382,6 +382,7 @@ F: OvmfPkg/PlatformPei/Xen.*
F: OvmfPkg/SmbiosPlatformDxe/*Xen.c
F: OvmfPkg/XenBusDxe/
F: OvmfPkg/XenIoPciDxe/
F: OvmfPkg/XenIoPvhDxe/
F: OvmfPkg/XenPlatformPei/
F: OvmfPkg/XenPvBlkDxe/
F: OvmfPkg/XenResetVector/

View File

@ -195,6 +195,7 @@
OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
XenIoMmioLib|OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.inf
Tcg2PhysicalPresenceLib|OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
@ -583,6 +584,7 @@
NULL|OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUiLib.inf
!endif
}
OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
OvmfPkg/XenBusDxe/XenBusDxe.inf
OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf

View File

@ -309,6 +309,7 @@ INF MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf
INF MdeModulePkg/Universal/Metronome/Metronome.inf
INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
INF OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
INF OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
INF OvmfPkg/XenBusDxe/XenBusDxe.inf
INF OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf

View File

@ -0,0 +1,54 @@
/** @file
Driver for the XenIo protocol
This driver simply allocate space for the grant tables.
Copyright (c) 2019, Citrix Systems, Inc.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
#include <Library/XenIoMmioLib.h>
#include <Library/XenPlatformLib.h>
EFI_STATUS
EFIAPI
InitializeXenIoPvhDxe (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
VOID *Allocation;
EFI_STATUS Status;
EFI_HANDLE XenIoHandle;
Allocation = NULL;
XenIoHandle = NULL;
if (!XenPvhDetected ()) {
return EFI_UNSUPPORTED;
}
Allocation = AllocateReservedPages (FixedPcdGet32 (PcdXenGrantFrames));
if (Allocation == NULL) {
Status = EFI_OUT_OF_RESOURCES;
goto Error;
}
Status = XenIoMmioInstall (&XenIoHandle, (UINTN) Allocation);
if (EFI_ERROR (Status)) {
goto Error;
}
return EFI_SUCCESS;
Error:
if (Allocation != NULL) {
FreePages (Allocation, FixedPcdGet32 (PcdXenGrantFrames));
}
return Status;
}

View File

@ -0,0 +1,36 @@
## @file
# Driver for the XenIo protocol
#
# Copyright (c) 2019, Citrix Systems, Inc.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = XenIoPvhDxe
FILE_GUID = 7a567cc4-0e75-4d7a-a305-c3db109b53ad
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
ENTRY_POINT = InitializeXenIoPvhDxe
[Packages]
MdePkg/MdePkg.dec
OvmfPkg/OvmfPkg.dec
[Sources]
XenIoPvhDxe.c
[LibraryClasses]
MemoryAllocationLib
PcdLib
UefiDriverEntryPoint
XenIoMmioLib
XenPlatformLib
[FixedPcd]
gUefiOvmfPkgTokenSpaceGuid.PcdXenGrantFrames
[Depex]
TRUE