@@ -21,7 +21,7 @@ [Defines]
CONSTRUCTOR = XenHypercallLibInit
[Defines.IA32, Defines.X64]
- LIBRARY_CLASS = XenHypercallLib|DXE_DRIVER UEFI_DRIVER
+ LIBRARY_CLASS = XenHypercallLib|PEIM DXE_DRIVER UEFI_DRIVER
[Defines.ARM, Defines.AARCH64]
LIBRARY_CLASS = XenHypercallLib
@@ -66,6 +66,7 @@ [LibraryClasses]
MtrrLib
MemEncryptSevLib
PcdLib
+ XenHypercallLib
[Pcd]
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvBase
@@ -16,6 +16,18 @@
#ifndef __XEN_HYPERCALL_LIB_H__
#define __XEN_HYPERCALL_LIB_H__
+/**
+ To call when the gEfiXenInfoGuid HOB became available after the library init
+ function has already been executed.
+
+ This allow to make hypercall in the PEIM stage.
+**/
+VOID
+EFIAPI
+XenHypercallLibReInit (
+ VOID
+ );
+
/**
Check if the Xen Hypercall library is able to make calls to the Xen
hypervisor.
@@ -78,6 +78,17 @@ XenHypercallLibInit (
return RETURN_SUCCESS;
}
+VOID
+EFIAPI
+XenHypercallLibReInit (
+ VOID
+ )
+{
+ if (HyperPage == NULL) {
+ XenHypercallLibInit();
+ }
+}
+
/**
This function will put the two arguments in the right place (registers) and
invoke the hypercall identified by HypercallID.
@@ -32,6 +32,7 @@
#include <Library/ResourcePublicationLib.h>
#include <Library/MtrrLib.h>
#include <IndustryStandard/Xen/arch-x86/hvm/start_info.h>
+#include <Library/XenHypercallLib.h>
#include "Platform.h"
#include "Xen.h"
@@ -157,6 +158,12 @@ XenConnect (
sizeof(mXenInfo)
);
+ //
+ // Initialize the XenHypercall library, now that the XenInfo HOB is
+ // available
+ //
+ XenHypercallLibReInit ();
+
return EFI_SUCCESS;
}
Allow to use Xen hypercalls earlier, during the PEIM stage, but XenHypercallLibReInit() must be called once the XenInfo HOB is created with the HyperPage setup. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf | 2 +- OvmfPkg/XenPlatformPei/XenPlatformPei.inf | 1 + OvmfPkg/Include/Library/XenHypercallLib.h | 12 ++++++++++++ OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c | 11 +++++++++++ OvmfPkg/XenPlatformPei/Xen.c | 7 +++++++ 5 files changed, 32 insertions(+), 1 deletion(-)