summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/XenIoPvhDxe
diff options
context:
space:
mode:
Diffstat (limited to 'OvmfPkg/XenIoPvhDxe')
-rw-r--r--OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c54
-rw-r--r--OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf36
2 files changed, 90 insertions, 0 deletions
diff --git a/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c b/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c
new file mode 100644
index 0000000000..9264a85df1
--- /dev/null
+++ b/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c
@@ -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;
+}
diff --git a/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf b/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
new file mode 100644
index 0000000000..1c27f8aae0
--- /dev/null
+++ b/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
@@ -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