[edk2-devel] [PATCH v3 13/35] OvmfPkg/Library/XenPlatformLib: New library

Anthony PERARD anthony.perard at citrix.com
Thu Jul 4 14:42:11 UTC 2019


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 at 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/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list