MdePkg: introduce standalone MM entry point library implementation
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Mon, 14 Jan 2019 11:56:33 +0000 (12:56 +0100)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Wed, 16 Jan 2019 19:10:51 +0000 (20:10 +0100)
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>
MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.c [new file with mode: 0644]
MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf [new file with mode: 0644]
MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.uni [new file with mode: 0644]
MdePkg/MdePkg.dsc

diff --git a/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.c b/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.c
new file mode 100644 (file)
index 0000000..4fb494d
--- /dev/null
@@ -0,0 +1,87 @@
+/** @file\r
+  Entry point to a Standalone MM driver.\r
+\r
+Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2016 - 2018, ARM Ltd. All rights reserved.<BR>\r
+Copyright (c) 2018, Linaro, Limited. All rights reserved.<BR>\r
+\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <PiMm.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/MmServicesTableLib.h>\r
+#include <Library/StandaloneMmDriverEntryPoint.h>\r
+\r
+/**\r
+  The entry point of PE/COFF Image for a Standalone MM Driver.\r
+\r
+  This function is the entry point for a Standalone MM Driver.\r
+  This function must call ProcessLibraryConstructorList() and\r
+  ProcessModuleEntryPointList().\r
+  If the return status from ProcessModuleEntryPointList()\r
+  is an error status, then ProcessLibraryDestructorList() must be called.\r
+  The return value from ProcessModuleEntryPointList() is returned.\r
+  If _gMmRevision is not zero and SystemTable->Hdr.Revision is\r
+  less than _gMmRevision, then return EFI_INCOMPATIBLE_VERSION.\r
+\r
+  @param  ImageHandle  The image handle of the Standalone MM Driver.\r
+  @param  SystemTable  A pointer to the EFI System Table.\r
+\r
+  @retval  EFI_SUCCESS               The Standalone MM Driver exited normally.\r
+  @retval  EFI_INCOMPATIBLE_VERSION  _gMmRevision is greater than\r
+                                     MmSystemTable->Hdr.Revision.\r
+  @retval  Other                     Return value from\r
+                                     ProcessModuleEntryPointList().\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+_ModuleEntryPoint (\r
+  IN EFI_HANDLE               ImageHandle,\r
+  IN IN EFI_MM_SYSTEM_TABLE   *MmSystemTable\r
+  )\r
+{\r
+  EFI_STATUS                 Status;\r
+\r
+  if (_gMmRevision != 0) {\r
+    //\r
+    // Make sure that the MM spec revision of the platform\r
+    // is >= MM spec revision of the driver\r
+    //\r
+    if (MmSystemTable->Hdr.Revision < _gMmRevision) {\r
+      return EFI_INCOMPATIBLE_VERSION;\r
+    }\r
+  }\r
+\r
+  //\r
+  // Call constructor for all libraries\r
+  //\r
+  ProcessLibraryConstructorList (ImageHandle, MmSystemTable);\r
+\r
+  //\r
+  // Call the driver entry point\r
+  //\r
+  Status = ProcessModuleEntryPointList (ImageHandle, MmSystemTable);\r
+\r
+  //\r
+  // If all of the drivers returned errors, then invoke all of the library destructors\r
+  //\r
+  if (EFI_ERROR (Status)) {\r
+    ProcessLibraryDestructorList (ImageHandle, MmSystemTable);\r
+  }\r
+\r
+  //\r
+  // Return the cumulative return status code from all of the driver entry points\r
+  //\r
+  return Status;\r
+}\r
diff --git a/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf b/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf
new file mode 100644 (file)
index 0000000..c9309de
--- /dev/null
@@ -0,0 +1,43 @@
+## @file\r
+# Module entry point library for Standalone MM driver.\r
+#\r
+# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2016-2018, ARM Ltd. All rights reserved.<BR>\r
+# Copyright (c) 2018, Linaro, Limited. All rights reserved.<BR>\r
+#\r
+#  This program and the accompanying materials\r
+#  are licensed and made available under the terms and conditions of the BSD License\r
+#  which accompanies this distribution. The full text of the license may be found at\r
+#  http://opensource.org/licenses/bsd-license.php.\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+#\r
+##\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x0001001B\r
+  BASE_NAME                      = StandaloneMmDriverEntryPoint\r
+  MODULE_UNI_FILE                = StandaloneMmDriverEntryPoint.uni\r
+  FILE_GUID                      = 5ca126c0-b598-4f4b-abb9-b6e7d077aea9\r
+  MODULE_TYPE                    = MM_STANDALONE\r
+  VERSION_STRING                 = 1.0\r
+  PI_SPECIFICATION_VERSION       = 0x00010032\r
+  LIBRARY_CLASS                  = StandaloneMmDriverEntryPoint|MM_STANDALONE\r
+\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+#  VALID_ARCHITECTURES           = IA32 X64 AARCH64\r
+#\r
+\r
+[Sources]\r
+  StandaloneMmDriverEntryPoint.c\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+\r
+[LibraryClasses]\r
+  BaseLib\r
+  DebugLib\r
+  MmServicesTableLib\r
diff --git a/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.uni b/MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.uni
new file mode 100644 (file)
index 0000000..11765d7
--- /dev/null
@@ -0,0 +1,22 @@
+// /** @file\r
+//\r
+// Module entry point library for standalone MM driver\r
+//\r
+// Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+// Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>\r
+// Copyright (c) 2018, Linaro, Limited. All rights reserved.<BR>\r
+//\r
+// This program and the accompanying materials\r
+// are licensed and made available under the terms and conditions of the BSD License\r
+// which accompanies this distribution. The full text of the license may be found at\r
+// http://opensource.org/licenses/bsd-license.php.\r
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+// **/\r
+\r
+\r
+#string STR_MODULE_ABSTRACT             #language en-US "Module entry point library for standalone MM driver"\r
+\r
+#string STR_MODULE_DESCRIPTION          #language en-US "Module entry point library for standalone MM driver."\r
+\r
index 428b14e..ec561c5 100644 (file)
   MdePkg/Library/SmmLibNull/SmmLibNull.inf\r
   MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf\r
 \r
+  MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf\r
+\r
 [Components.IA32, Components.X64]\r
   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf\r
   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf\r