/** @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; | |
} |