#include <Library/DebugLib.h>\r
#include <Library/HobLib.h>\r
#include <Library/IoLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/PcdLib.h>\r
#include <Library/PciLib.h>\r
#include <Library/PeimEntryPoint.h>\r
#include <Library/ResourcePublicationLib.h>\r
//\r
// Video memory + Legacy BIOS region\r
//\r
- AddMemoryRangeHob (0x0A0000, 0x0B0000);\r
- AddIoMemoryRangeHob (0x0B0000, 0x100000);\r
+ AddIoMemoryRangeHob (0x0A0000, 0x100000);\r
}\r
\r
\r
}\r
\r
\r
+VOID\r
+ReserveEmuVariableNvStore (\r
+ )\r
+{\r
+ EFI_PHYSICAL_ADDRESS VariableStore;\r
+\r
+ //\r
+ // Allocate storage for NV variables early on so it will be\r
+ // at a consistent address. Since VM memory is preserved\r
+ // across reboots, this allows the NV variable storage to survive\r
+ // a VM reboot.\r
+ //\r
+ VariableStore =\r
+ (EFI_PHYSICAL_ADDRESS)(UINTN)\r
+ AllocateRuntimePool (\r
+ 2 * FixedPcdGet32(PcdFlashNvStorageFtwSpareSize)\r
+ );\r
+ DEBUG ((EFI_D_INFO,\r
+ "Reserved variable store memory: 0x%lX; size: %dkb\n",\r
+ VariableStore,\r
+ (2 * FixedPcdGet32(PcdFlashNvStorageFtwSpareSize)) / 1024\r
+ ));\r
+ PcdSet64 (PcdEmuVariableNvStoreReserved, VariableStore);\r
+}\r
+\r
+\r
/**\r
Perform Platform PEI initialization.\r
\r
\r
MemDetect ();\r
\r
+ ReserveEmuVariableNvStore ();\r
+\r
PeiFvInitialization ();\r
\r
MemMapInitialization ();\r