|
@@ -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;
|
|
|
+}
|