summaryrefslogtreecommitdiff
path: root/OvmfPkg
diff options
context:
space:
mode:
authorjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2009-09-07 20:18:17 +0000
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2009-09-07 20:18:17 +0000
commit77ba993c886a79b6199e941f4ddb7861ed3a211e (patch)
treedb098b9bd45f4c5e806fa0c82c78da81905d84ce /OvmfPkg
parent02328a57a216efd3ff301187f5c718122185d2a2 (diff)
downloadedk2-77ba993c886a79b6199e941f4ddb7861ed3a211e.zip
edk2-77ba993c886a79b6199e941f4ddb7861ed3a211e.tar.gz
edk2-77ba993c886a79b6199e941f4ddb7861ed3a211e.tar.bz2
OVMF: Add support for more persistent NV variables which can survive a system reboot.
Make use of EMU Variable driver's PcdEmuVariableNvStoreReserved to allow NV variables to persist a VM system reset. The contents of the NV variables will still be lost when the VM is shut down, but they appear to persist when the efi shell reset command is run. (Tested with QEMU 0.10.0.) git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9241 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'OvmfPkg')
-rw-r--r--OvmfPkg/OvmfPkgIa32.dsc9
-rw-r--r--OvmfPkg/OvmfPkgIa32X64.dsc9
-rw-r--r--OvmfPkg/OvmfPkgX64.dsc11
-rw-r--r--OvmfPkg/PlatformPei/Platform.c28
-rw-r--r--OvmfPkg/PlatformPei/PlatformPei.inf2
5 files changed, 50 insertions, 9 deletions
diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
index 3a41cb7..80e8038 100644
--- a/OvmfPkg/OvmfPkgIa32.dsc
+++ b/OvmfPkg/OvmfPkgIa32.dsc
@@ -205,7 +205,8 @@
#
################################################################################
-[PcdsDynamicDefault.common.DEFAULT]
+[PcdsDynamicDefault.common]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0
################################################################################
#
@@ -231,7 +232,11 @@
<LibraryClasses>
NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
}
- OvmfPkg/PlatformPei/PlatformPei.inf
+
+ OvmfPkg/PlatformPei/PlatformPei.inf {
+ <LibraryClasses>
+ PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
+ }
#
# DXE Phase modules
diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
index e461856..96e84e7 100644
--- a/OvmfPkg/OvmfPkgIa32X64.dsc
+++ b/OvmfPkg/OvmfPkgIa32X64.dsc
@@ -206,7 +206,8 @@
#
################################################################################
-[PcdsDynamicDefault.common.DEFAULT]
+[PcdsDynamicDefault.common]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0
################################################################################
#
@@ -232,7 +233,11 @@
<LibraryClasses>
NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
}
- OvmfPkg/PlatformPei/PlatformPei.inf
+
+ OvmfPkg/PlatformPei/PlatformPei.inf {
+ <LibraryClasses>
+ PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
+ }
[Components.X64]
#
diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
index 0e44628..c4cf30f 100644
--- a/OvmfPkg/OvmfPkgX64.dsc
+++ b/OvmfPkg/OvmfPkgX64.dsc
@@ -57,8 +57,6 @@
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
- S3Lib|MdeModulePkg/Library/PeiS3LibNull/PeiS3LibNull.inf
- RecoveryLib|MdeModulePkg/Library/PeiRecoveryLibNull/PeiRecoveryLibNull.inf
GenericBdsLib|IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
@@ -208,7 +206,8 @@
#
################################################################################
-[PcdsDynamicDefault.common.DEFAULT]
+[PcdsDynamicDefault.common]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0
################################################################################
#
@@ -234,7 +233,11 @@
<LibraryClasses>
NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
}
- OvmfPkg/PlatformPei/PlatformPei.inf
+
+ OvmfPkg/PlatformPei/PlatformPei.inf {
+ <LibraryClasses>
+ PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
+ }
#
# DXE Phase modules
diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c
index f5552e9..0a78944 100644
--- a/OvmfPkg/PlatformPei/Platform.c
+++ b/OvmfPkg/PlatformPei/Platform.c
@@ -23,6 +23,8 @@
#include <Library/DebugLib.h>
#include <Library/HobLib.h>
#include <Library/IoLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PcdLib.h>
#include <Library/PciLib.h>
#include <Library/PeimEntryPoint.h>
#include <Library/ResourcePublicationLib.h>
@@ -156,6 +158,30 @@ MiscInitialization (
}
+VOID
+ReserveEmuVariableNvStore (
+ )
+{
+ EFI_PHYSICAL_ADDRESS VariableStore;
+
+ //
+ // Allocate storage for NV variables early on so it will be
+ // at a consistent address. Since VM memory is preserved
+ // across reboots, this allows the NV variable storage to survive
+ // a VM reboot.
+ //
+ VariableStore =
+ (EFI_PHYSICAL_ADDRESS)(UINTN)
+ AllocateRuntimePool (FixedPcdGet32(PcdVariableStoreSize));
+ DEBUG ((EFI_D_INFO,
+ "Reserved variable store memory: 0x%lX; size: %dkb\n",
+ VariableStore,
+ FixedPcdGet32(PcdVariableStoreSize) / 1024
+ ));
+ PcdSet64 (PcdEmuVariableNvStoreReserved, VariableStore);
+}
+
+
/**
Perform Platform PEI initialization.
@@ -176,6 +202,8 @@ InitializePlatform (
MemDetect ();
+ ReserveEmuVariableNvStore ();
+
PeiFvInitialization ();
MemMapInitialization ();
diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/PlatformPei.inf
index c52538f..df65451 100644
--- a/OvmfPkg/PlatformPei/PlatformPei.inf
+++ b/OvmfPkg/PlatformPei/PlatformPei.inf
@@ -63,7 +63,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
[Pcd.common]
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase
+ gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved
[Depex]
TRUE