/**\r
Connects to the Hypervisor.\r
\r
- @param XenLeaf CPUID index used to connect.\r
-\r
@return EFI_STATUS\r
\r
**/\r
EFI_STATUS\r
XenConnect (\r
- UINT32 XenLeaf\r
)\r
{\r
UINT32 Index;\r
UINT32 *PVHResetVectorData;\r
RETURN_STATUS Status;\r
\r
- AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);\r
+ ASSERT (mXenLeaf != 0);\r
+\r
+ //\r
+ // Prepare HyperPages to be able to make hypercalls\r
+ //\r
+\r
+ AsmCpuid (mXenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);\r
mXenInfo.HyperPages = AllocatePages (TransferPages);\r
if (!mXenInfo.HyperPages) {\r
return EFI_OUT_OF_RESOURCES;\r
(Index << EFI_PAGE_SHIFT) + Index);\r
}\r
\r
- AsmCpuid (XenLeaf + 1, &XenVersion, NULL, NULL, NULL);\r
+ //\r
+ // Find out the Xen version\r
+ //\r
+\r
+ AsmCpuid (mXenLeaf + 1, &XenVersion, NULL, NULL, NULL);\r
DEBUG ((DEBUG_ERROR, "Detected Xen version %d.%d\n",\r
XenVersion >> 16, XenVersion & 0xFFFF));\r
mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);\r
{\r
RETURN_STATUS PcdStatus;\r
\r
- if (mXenLeaf == 0) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- XenConnect (mXenLeaf);\r
-\r
//\r
// Reserve away HVMLOADER reserved memory [0xFC000000,0xFD000000).\r
// This needs to match HVMLOADER RESERVED_MEMBASE/RESERVED_MEMSIZE.\r