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
This commit is contained in:
jljusten 2009-09-07 20:18:17 +00:00
parent 02328a57a2
commit 77ba993c88
5 changed files with 50 additions and 9 deletions

View File

@ -205,7 +205,8 @@
# #
################################################################################ ################################################################################
[PcdsDynamicDefault.common.DEFAULT] [PcdsDynamicDefault.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0
################################################################################ ################################################################################
# #
@ -231,7 +232,11 @@
<LibraryClasses> <LibraryClasses>
NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
} }
OvmfPkg/PlatformPei/PlatformPei.inf
OvmfPkg/PlatformPei/PlatformPei.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
# #
# DXE Phase modules # DXE Phase modules

View File

@ -206,7 +206,8 @@
# #
################################################################################ ################################################################################
[PcdsDynamicDefault.common.DEFAULT] [PcdsDynamicDefault.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0
################################################################################ ################################################################################
# #
@ -232,7 +233,11 @@
<LibraryClasses> <LibraryClasses>
NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
} }
OvmfPkg/PlatformPei/PlatformPei.inf
OvmfPkg/PlatformPei/PlatformPei.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
[Components.X64] [Components.X64]
# #

View File

@ -57,8 +57,6 @@
UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.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 GenericBdsLib|IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
@ -208,7 +206,8 @@
# #
################################################################################ ################################################################################
[PcdsDynamicDefault.common.DEFAULT] [PcdsDynamicDefault.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0
################################################################################ ################################################################################
# #
@ -234,7 +233,11 @@
<LibraryClasses> <LibraryClasses>
NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
} }
OvmfPkg/PlatformPei/PlatformPei.inf
OvmfPkg/PlatformPei/PlatformPei.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
# #
# DXE Phase modules # DXE Phase modules

View File

@ -23,6 +23,8 @@
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/HobLib.h> #include <Library/HobLib.h>
#include <Library/IoLib.h> #include <Library/IoLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
#include <Library/PciLib.h> #include <Library/PciLib.h>
#include <Library/PeimEntryPoint.h> #include <Library/PeimEntryPoint.h>
#include <Library/ResourcePublicationLib.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. Perform Platform PEI initialization.
@ -176,6 +202,8 @@ InitializePlatform (
MemDetect (); MemDetect ();
ReserveEmuVariableNvStore ();
PeiFvInitialization (); PeiFvInitialization ();
MemMapInitialization (); MemMapInitialization ();

View File

@ -63,7 +63,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
[Pcd.common] [Pcd.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved
[Depex] [Depex]
TRUE TRUE