Index: /trunk/src/VBox/Devices/EFI/Firmware/Config.kmk
===================================================================
--- /trunk/src/VBox/Devices/EFI/Firmware/Config.kmk	(revision 58172)
+++ /trunk/src/VBox/Devices/EFI/Firmware/Config.kmk	(revision 58173)
@@ -180,5 +180,5 @@
 	VBoxPkg/AcpiPlatformDxe/AcpiPlatformDxe/$(VBOX_EFI_DEBUG_DIR)/AcpiPlatform \
 	VBoxPkg/PartitionDxe/PartitionDxe/$(VBOX_EFI_DEBUG_DIR)/PartitionDxe \
-	VBoxPkg/PlatformPei/PlatformPei/$(VBOX_EFI_DEBUG_DIR)/PlatformPei \
+	OvmfPkg/PlatformPei/PlatformPei/$(VBOX_EFI_DEBUG_DIR)/PlatformPei \
 	VBoxPkg/VBoxAppleSim/VBoxAppleSim/$(VBOX_EFI_DEBUG_DIR)/VBoxAppleSim \
 	VBoxPkg/VBoxFsDxe/VBoxHfs/$(VBOX_EFI_DEBUG_DIR)/VBoxHfs \
Index: /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc
===================================================================
--- /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc	(revision 58172)
+++ /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.dsc	(revision 58173)
@@ -347,15 +347,8 @@
   MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
 
-!ifndef $(VBOX)
   OvmfPkg/PlatformPei/PlatformPei.inf {
     <LibraryClasses>
       PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
   }
-!else
-  VBoxPkg/PlatformPei/PlatformPei.inf {
-    <LibraryClasses>
-      PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
-  }
-!endif
 
   #
Index: /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.fdf
===================================================================
--- /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.fdf	(revision 58172)
+++ /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgIa32.fdf	(revision 58173)
@@ -112,9 +112,5 @@
 INF  MdeModulePkg/Universal/PCD/Pei/Pcd.inf
 INF  IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf
-!ifndef $(VBOX)
 INF  OvmfPkg/PlatformPei/PlatformPei.inf
-!else
-INF  VBoxPkg/PlatformPei/PlatformPei.inf
-!endif
 INF  MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
 
Index: /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc
===================================================================
--- /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc	(revision 58172)
+++ /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.dsc	(revision 58173)
@@ -347,15 +347,8 @@
   MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
 
-!ifndef $(VBOX)
   OvmfPkg/PlatformPei/PlatformPei.inf {
     <LibraryClasses>
       PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
   }
-!else
-  VBoxPkg/PlatformPei/PlatformPei.inf {
-    <LibraryClasses>
-      PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
-  }
-!endif
 
   #
Index: /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.fdf
===================================================================
--- /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.fdf	(revision 58172)
+++ /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/OvmfPkgX64.fdf	(revision 58173)
@@ -110,9 +110,5 @@
 INF  MdeModulePkg/Universal/PCD/Pei/Pcd.inf
 INF  IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf
-!ifndef $(VBOX)
 INF  OvmfPkg/PlatformPei/PlatformPei.inf
-!else
-INF  VBoxPkg/PlatformPei/PlatformPei.inf
-!endif
 INF  MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
 
Index: /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/PlatformPei/MemDetect.c
===================================================================
--- /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/PlatformPei/MemDetect.c	(revision 58172)
+++ /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/PlatformPei/MemDetect.c	(revision 58173)
@@ -118,4 +118,7 @@
     MemorySize = SIZE_64MB;
   }
+#ifdef VBOX
+  MemorySize -= BASE_64KB; /* Reserves 64KB for ACPI tables. */
+#endif
 
   //
@@ -130,8 +133,13 @@
   AddMemoryBaseSizeHob (MemoryBase, MemorySize);
   AddMemoryRangeHob (BASE_1MB, MemoryBase);
+#ifndef VBOX
   AddMemoryRangeHob (0, BASE_512KB + BASE_128KB);
+#endif
 
   MtrrSetMemoryAttribute (BASE_1MB, MemoryBase + MemorySize - BASE_1MB, CacheWriteBack);
 
+#ifdef VBOX
+  AddMemoryRangeHob (0, BASE_512KB + BASE_128KB);
+#endif
   MtrrSetMemoryAttribute (0, BASE_512KB + BASE_128KB, CacheWriteBack);
 
Index: /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/PlatformPei/Platform.c
===================================================================
--- /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/PlatformPei/Platform.c	(revision 58172)
+++ /trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/PlatformPei/Platform.c	(revision 58173)
@@ -93,4 +93,51 @@
 }
 
+#ifdef VBOX
+VOID
+AddRomMemoryBaseSizeHob (
+  EFI_PHYSICAL_ADDRESS        MemoryBase,
+  UINT64                      MemorySize
+  )
+{
+  STATIC EFI_RESOURCE_ATTRIBUTE_TYPE Attributes =
+    (
+      EFI_RESOURCE_ATTRIBUTE_PRESENT     |
+      EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED |
+      EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE |
+      EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
+      EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE
+    );
+
+  BuildResourceDescriptorHob (
+    EFI_RESOURCE_FIRMWARE_DEVICE,
+    Attributes,
+    MemoryBase,
+    MemorySize
+    );
+
+  DEBUG ((DEBUG_INFO, "ROM HOB: at 0x%llx size 0x%llx\n", MemoryBase, MemorySize));
+}
+
+static VOID *
+FindAcpiRsdPtr (
+  VOID
+  )
+{
+#define ACPI_RSD_PTR      SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
+  UINTN                           Address;
+
+  //
+  // First Search 0x0e0000 - 0x0fffff for RSD Ptr
+  //
+  for (Address = 0xe0000; Address < 0xfffff; Address += 0x10) {
+    if (*(UINT64 *)(Address) == ACPI_RSD_PTR) {
+      return (VOID *)Address;
+    }
+  }
+  return NULL;
+}
+#undef ACPI_RSD_PTR
+#endif
+
 VOID
 AddIoMemoryRangeHob (
@@ -169,4 +216,8 @@
   )
 {
+#ifdef VBOX
+  EFI_PHYSICAL_ADDRESS RsdPtr;
+  EFI_PHYSICAL_ADDRESS AcpiTables;
+#endif
   //
   // Create Memory Type Information HOB
@@ -210,6 +261,22 @@
   //
   // Video memory + Legacy BIOS region
+#ifdef VBOX
+  // This includes ACPI floating pointer region.
+#endif
   //
   AddIoMemoryRangeHob (0x0A0000, BASE_1MB);
+
+#ifdef VBOX
+  //
+  // Add ACPI memory, provided by VBox
+  //
+  RsdPtr = (EFI_PHYSICAL_ADDRESS)(UINTN)FindAcpiRsdPtr();
+  ASSERT(RsdPtr != 0);
+  AcpiTables = (EFI_PHYSICAL_ADDRESS)*(UINT32*)((UINTN)RsdPtr + 16) & ~0xfff;
+  ASSERT(AcpiTables != 0);
+
+  // ACPI tables 64 K
+  AddRomMemoryBaseSizeHob(AcpiTables, 0x10000);
+#endif
 }
 
@@ -326,6 +393,10 @@
   TopOfMemory = MemDetect ();
 
+#ifndef VBOX
   Status = InitializeXen ();
   Xen = EFI_ERROR (Status) ? FALSE : TRUE;
+#else
+  Xen = FALSE;
+#endif
 
   ReserveEmuVariableNvStore ();
