/** @file | |
Get information about Xen | |
This library simply allow to find out if OVMF is running under Xen and | |
allow to get more information when it is the case. | |
Copyright (c) 2019, Citrix Systems, Inc. | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include <PiDxe.h> | |
#include <Library/HobLib.h> | |
#include <Library/XenPlatformLib.h> | |
/** | |
This function return a pointer to the XenInfo HOB. | |
@return XenInfo pointer or NULL if not available | |
**/ | |
EFI_XEN_INFO * | |
EFIAPI | |
XenGetInfoHOB ( | |
VOID | |
) | |
{ | |
EFI_HOB_GUID_TYPE *GuidHob; | |
STATIC BOOLEAN Cached = FALSE; | |
STATIC EFI_XEN_INFO *XenInfo; | |
// | |
// Return the cached result for the benefit of XenDetected that can be | |
// called many times. | |
// | |
if (Cached) { | |
return XenInfo; | |
} | |
GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid); | |
if (GuidHob == NULL) { | |
XenInfo = NULL; | |
} else { | |
XenInfo = (EFI_XEN_INFO *)GET_GUID_HOB_DATA (GuidHob); | |
} | |
Cached = TRUE; | |
return XenInfo; | |
} | |
/** | |
This function detects if OVMF is running on Xen. | |
@retval TRUE OVMF is running on Xen | |
@retval FALSE Xen has not been detected | |
**/ | |
BOOLEAN | |
EFIAPI | |
XenDetected ( | |
VOID | |
) | |
{ | |
return (XenGetInfoHOB () != NULL); | |
} | |
/** | |
This function detect if OVMF have started via the PVH entry point. | |
@retval TRUE PVH entry point as been used | |
@retval FALSE OVMF have started via the HVM route | |
**/ | |
BOOLEAN | |
EFIAPI | |
XenPvhDetected ( | |
VOID | |
) | |
{ | |
EFI_XEN_INFO *XenInfo; | |
XenInfo = XenGetInfoHOB (); | |
return (XenInfo != NULL && XenInfo->RsdpPvh != NULL); | |
} |