Skip to content

Commit

Permalink
OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Laszlo Ersek <[email protected]>
Message-Id: <[email protected]>
  • Loading branch information
anthonyper-ctx authored and lersek committed Aug 21, 2019
1 parent 8f39d79 commit 833cd3e
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 0 deletions.
1 change: 1 addition & 0 deletions Maintainers.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
2 changes: 2 additions & 0 deletions OvmfPkg/OvmfXen.dsc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions OvmfPkg/OvmfXen.fdf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
54 changes: 54 additions & 0 deletions OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c
Original file line number Diff line number Diff line change
@@ -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;
}
36 changes: 36 additions & 0 deletions OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 833cd3e

Please sign in to comment.