diff mbox series

[v4,13/35] OvmfPkg/Library/XenPlatformLib: New library

Message ID 20190729153944.24239-14-anthony.perard@citrix.com (mailing list archive)
State Superseded
Headers show
Series Specific platform to run OVMF in Xen PVH and HVM guests | expand

Commit Message

Anthony PERARD July 29, 2019, 3:39 p.m. UTC
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>
---

Notes:
    v4:
    - fix top-level comment style
    - Update Maintainers.txt
    
    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 +++++++++++++++++++
 Maintainers.txt                               |  2 +
 6 files changed, 162 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

Comments

Laszlo Ersek July 30, 2019, 9:57 a.m. UTC | #1
On 07/29/19 17:39, Anthony PERARD wrote:
> 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>
> ---
> 
> Notes:
>     v4:
>     - fix top-level comment style
>     - Update Maintainers.txt
>     
>     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 +++++++++++++++++++
>  Maintainers.txt                               |  2 +
>  6 files changed, 162 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/Maintainers.txt b/Maintainers.txt
> index 016523b401..f51731a6b6 100644
> --- a/Maintainers.txt
> +++ b/Maintainers.txt
> @@ -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
> 

Reviewed-by: Laszlo Ersek <lersek@redhat.com>
diff mbox series

Patch

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 b40d39e003..22970eda5d 100644
--- a/OvmfPkg/OvmfXen.dsc
+++ b/OvmfPkg/OvmfXen.dsc
@@ -194,6 +194,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
   TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.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..8b8c0d057f
--- /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..974a0e73f1
--- /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);
+}
diff --git a/Maintainers.txt b/Maintainers.txt
index 016523b401..f51731a6b6 100644
--- a/Maintainers.txt
+++ b/Maintainers.txt
@@ -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