MdePkg: introduce standalone MM entry point library implementation

Add an implementation of the StandaloneMmDriverEntryPoint library
class.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Ard Biesheuvel 2019-01-14 12:56:33 +01:00
parent 7df4764e6a
commit 5866d49923
4 changed files with 154 additions and 0 deletions

View File

@ -0,0 +1,87 @@
/** @file
Entry point to a Standalone MM driver.
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2016 - 2018, ARM Ltd. All rights reserved.<BR>
Copyright (c) 2018, Linaro, Limited. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include <PiMm.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/MmServicesTableLib.h>
#include <Library/StandaloneMmDriverEntryPoint.h>
/**
The entry point of PE/COFF Image for a Standalone MM Driver.
This function is the entry point for a Standalone MM Driver.
This function must call ProcessLibraryConstructorList() and
ProcessModuleEntryPointList().
If the return status from ProcessModuleEntryPointList()
is an error status, then ProcessLibraryDestructorList() must be called.
The return value from ProcessModuleEntryPointList() is returned.
If _gMmRevision is not zero and SystemTable->Hdr.Revision is
less than _gMmRevision, then return EFI_INCOMPATIBLE_VERSION.
@param ImageHandle The image handle of the Standalone MM Driver.
@param SystemTable A pointer to the EFI System Table.
@retval EFI_SUCCESS The Standalone MM Driver exited normally.
@retval EFI_INCOMPATIBLE_VERSION _gMmRevision is greater than
MmSystemTable->Hdr.Revision.
@retval Other Return value from
ProcessModuleEntryPointList().
**/
EFI_STATUS
EFIAPI
_ModuleEntryPoint (
IN EFI_HANDLE ImageHandle,
IN IN EFI_MM_SYSTEM_TABLE *MmSystemTable
)
{
EFI_STATUS Status;
if (_gMmRevision != 0) {
//
// Make sure that the MM spec revision of the platform
// is >= MM spec revision of the driver
//
if (MmSystemTable->Hdr.Revision < _gMmRevision) {
return EFI_INCOMPATIBLE_VERSION;
}
}
//
// Call constructor for all libraries
//
ProcessLibraryConstructorList (ImageHandle, MmSystemTable);
//
// Call the driver entry point
//
Status = ProcessModuleEntryPointList (ImageHandle, MmSystemTable);
//
// If all of the drivers returned errors, then invoke all of the library destructors
//
if (EFI_ERROR (Status)) {
ProcessLibraryDestructorList (ImageHandle, MmSystemTable);
}
//
// Return the cumulative return status code from all of the driver entry points
//
return Status;
}

View File

@ -0,0 +1,43 @@
## @file
# Module entry point library for Standalone MM driver.
#
# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2016-2018, ARM Ltd. All rights reserved.<BR>
# Copyright (c) 2018, Linaro, Limited. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php.
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
##
[Defines]
INF_VERSION = 0x0001001B
BASE_NAME = StandaloneMmDriverEntryPoint
MODULE_UNI_FILE = StandaloneMmDriverEntryPoint.uni
FILE_GUID = 5ca126c0-b598-4f4b-abb9-b6e7d077aea9
MODULE_TYPE = MM_STANDALONE
VERSION_STRING = 1.0
PI_SPECIFICATION_VERSION = 0x00010032
LIBRARY_CLASS = StandaloneMmDriverEntryPoint|MM_STANDALONE
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64 AARCH64
#
[Sources]
StandaloneMmDriverEntryPoint.c
[Packages]
MdePkg/MdePkg.dec
[LibraryClasses]
BaseLib
DebugLib
MmServicesTableLib

View File

@ -0,0 +1,22 @@
// /** @file
//
// Module entry point library for standalone MM driver
//
// Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
// Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>
// Copyright (c) 2018, Linaro, Limited. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php.
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
// **/
#string STR_MODULE_ABSTRACT #language en-US "Module entry point library for standalone MM driver"
#string STR_MODULE_DESCRIPTION #language en-US "Module entry point library for standalone MM driver."

View File

@ -115,6 +115,8 @@
MdePkg/Library/SmmLibNull/SmmLibNull.inf
MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf
MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf
[Components.IA32, Components.X64]
MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf