MdeModulePkg DxeCore/PiSmmCore: Add UEFI memory and SMRAM profile support.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16335 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -64,10 +64,12 @@
|
||||
DebugAgentLib
|
||||
LockBoxLib
|
||||
CpuExceptionHandlerLib
|
||||
DevicePathLib
|
||||
|
||||
[Guids]
|
||||
gEfiBootScriptExecutorVariableGuid ## PRODUCES ## UNDEFINED # SaveLockBox
|
||||
gEfiBootScriptExecutorContextGuid ## PRODUCES ## UNDEFINED # SaveLockBox
|
||||
gEdkiiMemoryProfileGuid ## SOMETIMES_CONSUMES ## GUID # Locate protocol
|
||||
|
||||
[Protocols]
|
||||
## NOTIFY
|
||||
@@ -78,7 +80,8 @@
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## CONSUMES
|
||||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable ## SOMETIMES_CONSUMES
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable ## SOMETIMES_CONSUMES
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdMemoryProfilePropertyMask ## CONSUMES
|
||||
|
||||
[Depex]
|
||||
gEfiLockBoxProtocolGuid
|
||||
|
@@ -208,6 +208,47 @@ S3BootScriptExecutorEntryFunction (
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
Register image to memory profile.
|
||||
|
||||
@param FileName File name of the image.
|
||||
@param ImageBase Image base address.
|
||||
@param ImageSize Image size.
|
||||
@param FileType File type of the image.
|
||||
|
||||
**/
|
||||
VOID
|
||||
RegisterMemoryProfileImage (
|
||||
IN EFI_GUID *FileName,
|
||||
IN PHYSICAL_ADDRESS ImageBase,
|
||||
IN UINT64 ImageSize,
|
||||
IN EFI_FV_FILETYPE FileType
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EDKII_MEMORY_PROFILE_PROTOCOL *ProfileProtocol;
|
||||
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FilePath;
|
||||
UINT8 TempBuffer[sizeof (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH) + sizeof (EFI_DEVICE_PATH_PROTOCOL)];
|
||||
|
||||
if ((PcdGet8 (PcdMemoryProfilePropertyMask) & BIT0) != 0) {
|
||||
|
||||
FilePath = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)TempBuffer;
|
||||
Status = gBS->LocateProtocol (&gEdkiiMemoryProfileGuid, NULL, (VOID **) &ProfileProtocol);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
EfiInitializeFwVolDevicepathNode (FilePath, FileName);
|
||||
SetDevicePathEndNode (FilePath + 1);
|
||||
|
||||
Status = ProfileProtocol->RegisterImage (
|
||||
ProfileProtocol,
|
||||
(EFI_DEVICE_PATH_PROTOCOL *) FilePath,
|
||||
ImageBase,
|
||||
ImageSize,
|
||||
FileType
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
This is the Event notification function to reload BootScriptExecutor image
|
||||
to RESERVED mem and save it to LockBox.
|
||||
@@ -302,6 +343,14 @@ ReadyToLockEventNotify (
|
||||
// Flush the instruction cache so the image data is written before we execute it
|
||||
//
|
||||
InvalidateInstructionCacheRange ((VOID *)(UINTN)ImageContext.ImageAddress, (UINTN)ImageContext.ImageSize);
|
||||
|
||||
RegisterMemoryProfileImage (
|
||||
&gEfiCallerIdGuid,
|
||||
ImageContext.ImageAddress,
|
||||
ImageContext.ImageSize,
|
||||
EFI_FV_FILETYPE_DRIVER
|
||||
);
|
||||
|
||||
Status = ((EFI_IMAGE_ENTRY_POINT)(UINTN)(ImageContext.EntryPoint)) (NewImageHandle, gST);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
This driver is dispatched by Dxe core and the driver will reload itself to ACPI reserved memory
|
||||
in the entry point. The functionality is to interpret and restore the S3 boot script
|
||||
|
||||
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
@@ -36,9 +36,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#include <Library/DebugAgentLib.h>
|
||||
#include <Library/LockBoxLib.h>
|
||||
#include <Library/CpuExceptionHandlerLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
|
||||
#include <Guid/AcpiS3Context.h>
|
||||
#include <Guid/BootScriptExecutorVariable.h>
|
||||
#include <Guid/MemoryProfile.h>
|
||||
|
||||
#include <Protocol/DxeSmmReadyToLock.h>
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
/**
|
||||
|
Reference in New Issue
Block a user