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.per...@citrix.com>
---

Notes:
    v3:
    - use SPDX
    - add XenPlatformLib.h to [LibraryClasses] in OvmfPkg.dec
    - fix typos

 OvmfPkg/OvmfPkg.dec                           |  4 ++
 OvmfPkg/OvmfXen.dsc                           |  1 +
 .../Library/XenPlatformLib/XenPlatformLib.inf | 33 +++++++++
 OvmfPkg/Include/Library/XenPlatformLib.h      | 53 ++++++++++++++
 .../Library/XenPlatformLib/XenPlatformLib.c   | 69 +++++++++++++++++++
 5 files changed, 160 insertions(+)
 create mode 100644 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
 create mode 100644 OvmfPkg/Include/Library/XenPlatformLib.h
 create mode 100644 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c

diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec
index c2a2ebfb95..04d5e29272 100644
--- a/OvmfPkg/OvmfPkg.dec
+++ b/OvmfPkg/OvmfPkg.dec
@@ -70,6 +70,10 @@ [LibraryClasses]
   #

   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}}

diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc
index 6288394eb8..68d82da7aa 100644
--- a/OvmfPkg/OvmfXen.dsc
+++ b/OvmfPkg/OvmfXen.dsc
@@ -195,6 +195,7 @@ [LibraryClasses]
   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

 

diff --git a/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf 
b/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
new file mode 100644
index 0000000000..32adb246d6
--- /dev/null
+++ b/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
@@ -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

diff --git a/OvmfPkg/Include/Library/XenPlatformLib.h 
b/OvmfPkg/Include/Library/XenPlatformLib.h
new file mode 100644
index 0000000000..a8347602b7
--- /dev/null
+++ b/OvmfPkg/Include/Library/XenPlatformLib.h
@@ -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

diff --git a/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c 
b/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c
new file mode 100644
index 0000000000..6f27cbffa8
--- /dev/null
+++ b/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c
@@ -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);

+}

-- 
Anthony PERARD


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#43289): https://edk2.groups.io/g/devel/message/43289
Mute This Topic: https://groups.io/mt/32308707/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to