mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 23:24:03 +02:00
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>
This commit is contained in:
parent
094c0bc7d7
commit
b2877855c7
@ -87,21 +87,12 @@ EFI_MM_SYSTEM_TABLE gMmCoreMmst = {
|
|||||||
MmiHandlerUnRegister
|
MmiHandlerUnRegister
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
|
||||||
// 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
|
// Table of MMI Handlers that are registered by the MM Core when it is initialized
|
||||||
//
|
//
|
||||||
MM_CORE_MMI_HANDLERS mMmCoreMmiHandlers[] = {
|
MM_CORE_MMI_HANDLERS mMmCoreMmiHandlers[] = {
|
||||||
{ MmReadyToLockHandler, &gEfiDxeMmReadyToLockProtocolGuid, NULL, TRUE },
|
{ MmReadyToLockHandler, &gEfiDxeMmReadyToLockProtocolGuid, NULL, TRUE },
|
||||||
{ MmEndOfDxeHandler, &gEfiEndOfDxeEventGroupGuid, NULL, FALSE },
|
{ MmEndOfDxeHandler, &gEfiEndOfDxeEventGroupGuid, NULL, FALSE },
|
||||||
{ MmLegacyBootHandler, &gEfiEventLegacyBootGuid, NULL, FALSE },
|
|
||||||
{ MmExitBootServiceHandler,&gEfiEventExitBootServicesGuid, NULL, FALSE },
|
{ MmExitBootServiceHandler,&gEfiEventExitBootServicesGuid, NULL, FALSE },
|
||||||
{ MmReadyToBootHandler, &gEfiEventReadyToBootGuid, NULL, FALSE },
|
{ MmReadyToBootHandler, &gEfiEventReadyToBootGuid, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL, FALSE },
|
{ NULL, NULL, NULL, FALSE },
|
||||||
@ -142,47 +133,6 @@ MmEfiNotAvailableYetArg5 (
|
|||||||
return EFI_NOT_AVAILABLE_YET;
|
return EFI_NOT_AVAILABLE_YET;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
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.
|
Software MMI handler that is called when a ExitBoot Service event is signaled.
|
||||||
|
|
||||||
@ -396,7 +346,6 @@ MmEntryPoint (
|
|||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_MM_COMMUNICATE_HEADER *CommunicateHeader;
|
EFI_MM_COMMUNICATE_HEADER *CommunicateHeader;
|
||||||
BOOLEAN InLegacyBoot;
|
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "MmEntryPoint ...\n"));
|
DEBUG ((DEBUG_INFO, "MmEntryPoint ...\n"));
|
||||||
|
|
||||||
@ -413,44 +362,42 @@ MmEntryPoint (
|
|||||||
//
|
//
|
||||||
// If a legacy boot has occured, then make sure gMmCorePrivate is not accessed
|
// 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
|
// Synchronous MMI for MM Core or request from Communicate protocol
|
||||||
// Protocol or an Asynchronous MMI
|
|
||||||
//
|
//
|
||||||
if (gMmCorePrivate->CommunicationBuffer != 0) {
|
if (!MmIsBufferOutsideMmValid ((UINTN)gMmCorePrivate->CommunicationBuffer, gMmCorePrivate->BufferSize)) {
|
||||||
//
|
//
|
||||||
// Synchronous MMI for MM Core or request from Communicate protocol
|
// If CommunicationBuffer is not in valid address scope, return EFI_INVALID_PARAMETER
|
||||||
//
|
//
|
||||||
if (!MmIsBufferOutsideMmValid ((UINTN)gMmCorePrivate->CommunicationBuffer, gMmCorePrivate->BufferSize)) {
|
gMmCorePrivate->CommunicationBuffer = 0;
|
||||||
//
|
gMmCorePrivate->ReturnStatus = EFI_INVALID_PARAMETER;
|
||||||
// If CommunicationBuffer is not in valid address scope, return EFI_INVALID_PARAMETER
|
} else {
|
||||||
//
|
CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *)(UINTN)gMmCorePrivate->CommunicationBuffer;
|
||||||
gMmCorePrivate->CommunicationBuffer = 0;
|
gMmCorePrivate->BufferSize -= OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
|
||||||
gMmCorePrivate->ReturnStatus = EFI_INVALID_PARAMETER;
|
Status = MmiManage (
|
||||||
} else {
|
&CommunicateHeader->HeaderGuid,
|
||||||
CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *)(UINTN)gMmCorePrivate->CommunicationBuffer;
|
NULL,
|
||||||
gMmCorePrivate->BufferSize -= OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
|
CommunicateHeader->Data,
|
||||||
Status = MmiManage (
|
(UINTN *)&gMmCorePrivate->BufferSize
|
||||||
&CommunicateHeader->HeaderGuid,
|
);
|
||||||
NULL,
|
//
|
||||||
CommunicateHeader->Data,
|
// Update CommunicationBuffer, BufferSize and ReturnStatus
|
||||||
(UINTN *)&gMmCorePrivate->BufferSize
|
// Communicate service finished, reset the pointer to CommBuffer to NULL
|
||||||
);
|
//
|
||||||
//
|
gMmCorePrivate->BufferSize += OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data);
|
||||||
// Update CommunicationBuffer, BufferSize and ReturnStatus
|
gMmCorePrivate->CommunicationBuffer = 0;
|
||||||
// Communicate service finished, reset the pointer to CommBuffer to NULL
|
gMmCorePrivate->ReturnStatus = (Status == EFI_SUCCESS) ? EFI_SUCCESS : EFI_NOT_FOUND;
|
||||||
//
|
|
||||||
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) {
|
gMmCorePrivate->InMm = FALSE;
|
||||||
//
|
|
||||||
// Clear the InMm flag as we are going to leave MM
|
|
||||||
//
|
|
||||||
gMmCorePrivate->InMm = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
DEBUG ((DEBUG_INFO, "MmEntryPoint Done\n"));
|
DEBUG ((DEBUG_INFO, "MmEntryPoint Done\n"));
|
||||||
}
|
}
|
||||||
|
@ -635,28 +635,6 @@ MmDriverDispatchHandler (
|
|||||||
|
|
||||||
@return Status Code
|
@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
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
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
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
|
Loading…
x
Reference in New Issue
Block a user