OvmfPkg/Library/XenPlatformLib: New library

The purpose of XenPlatformLib is to regroup the few functions that are
used in several places to detect if Xen is detected, and to get the
XenInfo HOB.

Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20190813113119.14804-14-anthony.perard@citrix.com>
This commit is contained in:
Anthony PERARD 2019-08-13 12:30:57 +01:00 committed by Laszlo Ersek
parent 60d265451a
commit f496443eb3
6 changed files with 162 additions and 0 deletions

View File

@ -365,6 +365,7 @@ F: OvmfPkg/Include/Guid/XenInfo.h
F: OvmfPkg/Include/IndustryStandard/Xen/
F: OvmfPkg/Include/Library/XenHypercallLib.h
F: OvmfPkg/Include/Library/XenIoMmioLib.h
F: OvmfPkg/Include/Library/XenPlatformLib.h
F: OvmfPkg/Include/Protocol/XenBus.h
F: OvmfPkg/Include/Protocol/XenIo.h
F: OvmfPkg/Library/PciHostBridgeLib/XenSupport.c
@ -372,6 +373,7 @@ F: OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
F: OvmfPkg/Library/XenConsoleSerialPortLib/
F: OvmfPkg/Library/XenHypercallLib/
F: OvmfPkg/Library/XenIoMmioLib/
F: OvmfPkg/Library/XenPlatformLib/
F: OvmfPkg/OvmfXen.*
F: OvmfPkg/OvmfXenElfHeaderGenerator.c
F: OvmfPkg/PlatformPei/MemDetect.c

View File

@ -0,0 +1,53 @@
/** @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
**/
#ifndef _XEN_PLATFORM_LIB_H_
#define _XEN_PLATFORM_LIB_H_
#include <Guid/XenInfo.h>
/**
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
);
/**
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
);
/**
This function return a pointer to the XenInfo HOB.
@return XenInfo pointer or NULL if not available
**/
EFI_XEN_INFO *
EFIAPI
XenGetInfoHOB (
VOID
);
#endif

View File

@ -0,0 +1,69 @@
/** @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;
GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid);
if (GuidHob == NULL) {
return NULL;
}
return (EFI_XEN_INFO *) GET_GUID_HOB_DATA (GuidHob);
}
/**
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);
}

View File

@ -0,0 +1,33 @@
## @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
#
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = XenPlatformLib
FILE_GUID = DB54DBB7-8142-4EE5-9364-78C824B582EB
MODULE_TYPE = BASE
VERSION_STRING = 1.0
LIBRARY_CLASS = XenPlatformLib
[Sources]
XenPlatformLib.c
[Packages]
MdePkg/MdePkg.dec
OvmfPkg/OvmfPkg.dec
[LibraryClasses]
HobLib
[Guids]
gEfiXenInfoGuid

View File

@ -70,6 +70,10 @@
#
XenIoMmioLib|Include/Library/XenIoMmioLib.h
## @libraryclass Get information about Xen
#
XenPlatformLib|Include/Library/XenPlatformLib.h
[Guids]
gUefiOvmfPkgTokenSpaceGuid = {0x93bb96af, 0xb9f2, 0x4eb8, {0x94, 0x62, 0xe0, 0xba, 0x74, 0x56, 0x42, 0x36}}
gEfiXenInfoGuid = {0xd3b46f3b, 0xd441, 0x1244, {0x9a, 0x12, 0x0, 0x12, 0x27, 0x3f, 0xc1, 0x4d}}

View File

@ -194,6 +194,7 @@
SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
Tcg2PhysicalPresenceLib|OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf