]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c
OvmfPkg/XenPlatformLib: Cache result for XenDetected
[mirror_edk2.git] / OvmfPkg / Library / XenPlatformLib / XenPlatformLib.c
CommitLineData
f496443e
AP
1/** @file\r
2 Get information about Xen\r
3\r
4 This library simply allow to find out if OVMF is running under Xen and\r
5 allow to get more information when it is the case.\r
6\r
7 Copyright (c) 2019, Citrix Systems, Inc.\r
8\r
9 SPDX-License-Identifier: BSD-2-Clause-Patent\r
10\r
11**/\r
12\r
13#include <PiDxe.h>\r
14#include <Library/HobLib.h>\r
15#include <Library/XenPlatformLib.h>\r
16\r
17/**\r
18 This function return a pointer to the XenInfo HOB.\r
19\r
20 @return XenInfo pointer or NULL if not available\r
21**/\r
22EFI_XEN_INFO *\r
23EFIAPI\r
24XenGetInfoHOB (\r
25 VOID\r
26 )\r
27{\r
054c3fe9
AP
28 EFI_HOB_GUID_TYPE *GuidHob;\r
29 STATIC BOOLEAN Cached = FALSE;\r
30 STATIC EFI_XEN_INFO *XenInfo;\r
31\r
32 //\r
33 // Return the cached result for the benefit of XenDetected that can be\r
34 // called many times.\r
35 //\r
36 if (Cached) {\r
37 return XenInfo;\r
38 }\r
f496443e
AP
39\r
40 GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid);\r
41 if (GuidHob == NULL) {\r
054c3fe9
AP
42 XenInfo = NULL;\r
43 } else {\r
44 XenInfo = (EFI_XEN_INFO *) GET_GUID_HOB_DATA (GuidHob);\r
f496443e 45 }\r
054c3fe9
AP
46 Cached = TRUE;\r
47 return XenInfo;\r
f496443e
AP
48}\r
49\r
50/**\r
51 This function detects if OVMF is running on Xen.\r
52\r
53 @retval TRUE OVMF is running on Xen\r
54 @retval FALSE Xen has not been detected\r
55**/\r
56BOOLEAN\r
57EFIAPI\r
58XenDetected (\r
59 VOID\r
60 )\r
61{\r
62 return (XenGetInfoHOB () != NULL);\r
63}\r
64\r
65/**\r
66 This function detect if OVMF have started via the PVH entry point.\r
67\r
68 @retval TRUE PVH entry point as been used\r
69 @retval FALSE OVMF have started via the HVM route\r
70**/\r
71BOOLEAN\r
72EFIAPI\r
73XenPvhDetected (\r
74 VOID\r
75 )\r
76{\r
77 EFI_XEN_INFO *XenInfo;\r
78\r
79 XenInfo = XenGetInfoHOB ();\r
80 return (XenInfo != NULL && XenInfo->RsdpPvh != NULL);\r
81}\r