Signed-off-by: Wei Liu <wei.l...@citrix.com> --- OvmfPkg/PlatformPei/Xen.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+)
diff --git a/OvmfPkg/PlatformPei/Xen.c b/OvmfPkg/PlatformPei/Xen.c index a720b91..b4c1247 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")) { + struct e820_entry *E820Map; + UINTN Loop, EntryCount, Base; + + /* E820 map */ + EntryCount = Info->E820Nr; + Base = Info->E820; + + E820Map = AllocateZeroPool (sizeof(struct e820_entry) * EntryCount); + + if (!E820Map) { + FreePages (mXenInfo.HyperPages, TransferPages); + return EFI_OUT_OF_RESOURCES; + } + + for (Loop = 0; Loop < EntryCount; Loop++) { + struct e820_entry *src = (struct e820_entry *)Base + Loop; + struct e820_entry *dst = (struct e820_entry *)E820Map + Loop; + CopyMem (dst, src, sizeof(struct e820_entry)); + } + + mXenInfo.E820 = E820Map; + mXenInfo.E820EntryCount = EntryCount; + } + BuildGuidDataHob ( &gEfiXenInfoGuid, &mXenInfo, -- 1.7.10.4 ------------------------------------------------------------------------------ DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access Free app hosting. Or install the open source package on any LAMP server. Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native! http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel