#include <Library/HobLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
#include <Library/PcdLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <IndustryStandard/E820.h>\r
#include <Guid/XenInfo.h>\r
\r
#include "Platform.h"\r
+#include "Xen.h"\r
\r
EFI_XEN_INFO mXenInfo;\r
\r
-\r
/**\r
Connects to the Hypervisor.\r
\r
UINT32 TransferReg;\r
UINT32 TransferPages;\r
UINT32 XenVersion;\r
+ EFI_XEN_OVMF_INFO *Info = (EFI_XEN_OVMF_INFO *) OVMF_INFO_PHYSICAL_ADDRESS;\r
+\r
+ ZeroMem (&mXenInfo, sizeof(mXenInfo));\r
\r
AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);\r
mXenInfo.HyperPages = AllocatePages (TransferPages);\r
/* TBD: Locate hvm_info and reserve it away. */\r
mXenInfo.HvmInfo = NULL;\r
\r
+ if (!AsciiStrCmp ((CHAR8 *) Info->Signature, "XenHVMOVMF")) {\r
+ EFI_E820_ENTRY64 *E820Map;\r
+\r
+ E820Map = AllocateCopyPool (sizeof(EFI_E820_ENTRY64) * Info->E820EntriesCount,\r
+ (VOID *)Info->E820);\r
+ ASSERT (E820Map != NULL);\r
+\r
+ if (!E820Map) {\r
+ FreePages (mXenInfo.HyperPages, TransferPages);\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ mXenInfo.E820 = (EFI_PHYSICAL_ADDRESS)E820Map;\r
+ mXenInfo.E820EntriesCount = Info->E820EntriesCount;\r
+ }\r
+\r
BuildGuidDataHob (\r
&gEfiXenInfoGuid,\r
&mXenInfo,\r