summaryrefslogtreecommitdiffstats
path: root/StandaloneMmPkg
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2019-03-05 10:14:12 +0100
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2019-03-11 12:51:12 +0100
commitb2877855c7ec3060148ca5b8a286dbfb51a76518 (patch)
treee9269f061cfc124cc5dcb10e60414580b7bbbf02 /StandaloneMmPkg
parent094c0bc7d7a5d0d878d44706cfcc2d7ef5418ea8 (diff)
downloadedk2-b2877855c7ec3060148ca5b8a286dbfb51a76518.tar.gz
edk2-b2877855c7ec3060148ca5b8a286dbfb51a76518.tar.bz2
edk2-b2877855c7ec3060148ca5b8a286dbfb51a76518.zip
StandaloneMmPkg/Core: remove legacy boot support
Remove the support for booting 'legacy' (i.e., non-UEFI boot) OSes. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: "Yao, Jiewen" <jiewen.yao@intel.com> Reviewed-by: Achin Gupta <achin.gupta@arm.com>
Diffstat (limited to 'StandaloneMmPkg')
-rw-r--r--StandaloneMmPkg/Core/StandaloneMmCore.c124
-rw-r--r--StandaloneMmPkg/Core/StandaloneMmCore.h22
2 files changed, 33 insertions, 113 deletions
diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.c b/StandaloneMmPkg/Core/StandaloneMmCore.c
index 766cdb5c84..fb6b3055e9 100644
--- a/StandaloneMmPkg/Core/StandaloneMmCore.c
+++ b/StandaloneMmPkg/Core/StandaloneMmCore.c
@@ -88,20 +88,11 @@ EFI_MM_SYSTEM_TABLE gMmCoreMmst = {
};
//
-// Flag to determine if the platform has performed a legacy boot.
-// If this flag is TRUE, then the runtime code and runtime data associated with the
-// MM IPL are converted to free memory, so the MM Core must guarantee that is
-// does not touch of the code/data associated with the MM IPL if this flag is TRUE.
-//
-BOOLEAN mInLegacyBoot = FALSE;
-
-//
// Table of MMI Handlers that are registered by the MM Core when it is initialized
//
MM_CORE_MMI_HANDLERS mMmCoreMmiHandlers[] = {
{ MmReadyToLockHandler, &gEfiDxeMmReadyToLockProtocolGuid, NULL, TRUE },
{ MmEndOfDxeHandler, &gEfiEndOfDxeEventGroupGuid, NULL, FALSE },
- { MmLegacyBootHandler, &gEfiEventLegacyBootGuid, NULL, FALSE },
{ MmExitBootServiceHandler,&gEfiEventExitBootServicesGuid, NULL, FALSE },
{ MmReadyToBootHandler, &gEfiEventReadyToBootGuid, NULL, FALSE },
{ NULL, NULL, NULL, FALSE },
@@ -143,47 +134,6 @@ MmEfiNotAvailableYetArg5 (
}
/**
- Software MMI handler that is called when a Legacy Boot event is signaled. The MM
- Core uses this signal to know that a Legacy Boot has been performed and that
- gMmCorePrivate that is shared between the UEFI and MM execution environments can
- not be accessed from MM anymore since that structure is considered free memory by
- a legacy OS.
-
- @param DispatchHandle The unique handle assigned to this handler by MmiHandlerRegister().
- @param Context Points to an optional handler context which was specified when the handler was registered.
- @param CommBuffer A pointer to a collection of data in memory that will
- be conveyed from a non-MM environment into an MM environment.
- @param CommBufferSize The size of the CommBuffer.
-
- @return Status Code
-
-**/
-EFI_STATUS
-EFIAPI
-MmLegacyBootHandler (
- IN EFI_HANDLE DispatchHandle,
- IN CONST VOID *Context, OPTIONAL
- IN OUT VOID *CommBuffer, OPTIONAL
- IN OUT UINTN *CommBufferSize OPTIONAL
- )
-{
- EFI_HANDLE MmHandle;
- EFI_STATUS Status = EFI_SUCCESS;
-
- if (!mInLegacyBoot) {
- MmHandle = NULL;
- Status = MmInstallProtocolInterface (
- &MmHandle,
- &gEfiEventLegacyBootGuid,
- EFI_NATIVE_INTERFACE,
- NULL
- );
- }
- mInLegacyBoot = TRUE;
- return Status;
-}
-
-/**
Software MMI handler that is called when a ExitBoot Service event is signaled.
@param DispatchHandle The unique handle assigned to this handler by MmiHandlerRegister().
@@ -396,7 +346,6 @@ MmEntryPoint (
{
EFI_STATUS Status;
EFI_MM_COMMUNICATE_HEADER *CommunicateHeader;
- BOOLEAN InLegacyBoot;
DEBUG ((DEBUG_INFO, "MmEntryPoint ...\n"));
@@ -413,44 +362,42 @@ MmEntryPoint (
//
// If a legacy boot has occured, then make sure gMmCorePrivate is not accessed
//
- InLegacyBoot = mInLegacyBoot;
- if (!InLegacyBoot) {
- //
- // TBD: Mark the InMm flag as TRUE
- //
- gMmCorePrivate->InMm = TRUE;
+ //
+ // TBD: Mark the InMm flag as TRUE
+ //
+ gMmCorePrivate->InMm = TRUE;
+
+ //
+ // Check to see if this is a Synchronous MMI sent through the MM Communication
+ // Protocol or an Asynchronous MMI
+ //
+ if (gMmCorePrivate->CommunicationBuffer != 0) {
//
- // Check to see if this is a Synchronous MMI sent through the MM Communication
- // Protocol or an Asynchronous MMI
+ // Synchronous MMI for MM Core or request from Communicate protocol
//
- if (gMmCorePrivate->CommunicationBuffer != 0) {
+ if (!MmIsBufferOutsideMmValid ((UINTN)gMmCorePrivate->CommunicationBuffer, gMmCorePrivate->BufferSize)) {
+ //
+ // If CommunicationBuffer is not in valid address scope, return EFI_INVALID_PARAMETER
//
- // Synchronous MMI for MM Core or request from Communicate protocol
+ gMmCorePrivate->CommunicationBuffer = 0;
+ gMmCorePrivate->ReturnStatus = EFI_INVALID_PARAMETER;
+ } else {
+ CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *)(UINTN)gMmCorePrivate->CommunicationBuffer;
+ gMmCorePrivate->BufferSize -= OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
+ Status = MmiManage (
+ &CommunicateHeader->HeaderGuid,
+ NULL,
+ CommunicateHeader->Data,
+ (UINTN *)&gMmCorePrivate->BufferSize
+ );
//
- if (!MmIsBufferOutsideMmValid ((UINTN)gMmCorePrivate->CommunicationBuffer, gMmCorePrivate->BufferSize)) {
- //
- // If CommunicationBuffer is not in valid address scope, return EFI_INVALID_PARAMETER
- //
- gMmCorePrivate->CommunicationBuffer = 0;
- gMmCorePrivate->ReturnStatus = EFI_INVALID_PARAMETER;
- } else {
- CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *)(UINTN)gMmCorePrivate->CommunicationBuffer;
- gMmCorePrivate->BufferSize -= OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
- Status = MmiManage (
- &CommunicateHeader->HeaderGuid,
- NULL,
- CommunicateHeader->Data,
- (UINTN *)&gMmCorePrivate->BufferSize
- );
- //
- // Update CommunicationBuffer, BufferSize and ReturnStatus
- // Communicate service finished, reset the pointer to CommBuffer to NULL
- //
- gMmCorePrivate->BufferSize += OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
- gMmCorePrivate->CommunicationBuffer = 0;
- gMmCorePrivate->ReturnStatus = (Status == EFI_SUCCESS) ? EFI_SUCCESS : EFI_NOT_FOUND;
- }
+ // Update CommunicationBuffer, BufferSize and ReturnStatus
+ // Communicate service finished, reset the pointer to CommBuffer to NULL
+ //
+ gMmCorePrivate->BufferSize += OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
+ gMmCorePrivate->CommunicationBuffer = 0;
+ gMmCorePrivate->ReturnStatus = (Status == EFI_SUCCESS) ? EFI_SUCCESS : EFI_NOT_FOUND;
}
}
@@ -464,14 +411,9 @@ MmEntryPoint (
//
//
- // If a legacy boot has occured, then make sure gMmCorePrivate is not accessed
+ // Clear the InMm flag as we are going to leave MM
//
- if (!InLegacyBoot) {
- //
- // Clear the InMm flag as we are going to leave MM
- //
- gMmCorePrivate->InMm = FALSE;
- }
+ gMmCorePrivate->InMm = FALSE;
DEBUG ((DEBUG_INFO, "MmEntryPoint Done\n"));
}
diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.h b/StandaloneMmPkg/Core/StandaloneMmCore.h
index 74338dc9da..5d336b3dbb 100644
--- a/StandaloneMmPkg/Core/StandaloneMmCore.h
+++ b/StandaloneMmPkg/Core/StandaloneMmCore.h
@@ -638,28 +638,6 @@ MmDriverDispatchHandler (
**/
EFI_STATUS
EFIAPI
-MmLegacyBootHandler (
- IN EFI_HANDLE DispatchHandle,
- IN CONST VOID *Context, OPTIONAL
- IN OUT VOID *CommBuffer, OPTIONAL
- IN OUT UINTN *CommBufferSize OPTIONAL
- );
-
-/**
- This function is the main entry point for an MM handler dispatch
- or communicate-based callback.
-
- @param DispatchHandle The unique handle assigned to this handler by MmiHandlerRegister().
- @param Context Points to an optional handler context which was specified when the handler was registered.
- @param CommBuffer A pointer to a collection of data in memory that will
- be conveyed from a non-MM environment into an MM environment.
- @param CommBufferSize The size of the CommBuffer.
-
- @return Status Code
-
-**/
-EFI_STATUS
-EFIAPI
MmExitBootServiceHandler (
IN EFI_HANDLE DispatchHandle,
IN CONST VOID *Context, OPTIONAL