|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC v2 4/7] OvmfPkg: extract OVMF info passed by Xen hvmloader
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
OvmfPkg/PlatformPei/Xen.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/OvmfPkg/PlatformPei/Xen.c b/OvmfPkg/PlatformPei/Xen.c
index a720b91..fbb2619 100644
--- a/OvmfPkg/PlatformPei/Xen.c
+++ b/OvmfPkg/PlatformPei/Xen.c
@@ -26,12 +26,15 @@
#include <Library/HobLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <IndustryStandard/E820.h>
#include <Guid/XenInfo.h>
#include "Platform.h"
EFI_XEN_INFO mXenInfo;
+#define OVMF_INFO_PHYSICAL_ADDRESS 0x00001000
/**
Connects to the Hypervisor.
@@ -50,6 +53,9 @@ XenConnect (
UINT32 TransferReg;
UINT32 TransferPages;
UINT32 XenVersion;
+ EFI_XEN_OVMF_INFO *Info = (EFI_XEN_OVMF_INFO *) OVMF_INFO_PHYSICAL_ADDRESS;
+
+ ZeroMem (&mXenInfo, sizeof(mXenInfo));
AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
mXenInfo.HyperPages = AllocatePages (TransferPages);
@@ -72,6 +78,31 @@ XenConnect (
/* TBD: Locate hvm_info and reserve it away. */
mXenInfo.HvmInfo = NULL;
+ if (!AsciiStrCmp ((CHAR8 *) Info->Signature, "XenHVMOVMF")) {
+ EFI_E820_ENTRY *E820Map;
+ UINTN Loop, EntryCount, Base;
+
+ /* E820 map */
+ EntryCount = Info->E820Nr;
+ Base = Info->E820;
+
+ E820Map = AllocateZeroPool (sizeof(EFI_E820_ENTRY) * EntryCount);
+
+ if (!E820Map) {
+ FreePages (mXenInfo.HyperPages, TransferPages);
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ for (Loop = 0; Loop < EntryCount; Loop++) {
+ EFI_E820_ENTRY *src = (EFI_E820_ENTRY *)Base + Loop;
+ EFI_E820_ENTRY *dst = (EFI_E820_ENTRY *)E820Map + Loop;
+ CopyMem (dst, src, sizeof(EFI_E820_ENTRY));
+ }
+
+ mXenInfo.E820 = E820Map;
+ mXenInfo.E820EntryCount = EntryCount;
+ }
+
BuildGuidDataHob (
&gEfiXenInfoGuid,
&mXenInfo,
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |