-/** @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
-\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
-\r
-VOID\r
-EFIAPI\r
-ProcessLibraryConstructorList (\r
- IN EFI_HANDLE ImageHandle,\r
- IN IN EFI_MM_SYSTEM_TABLE *MmSystemTable\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-ProcessModuleEntryPointList (\r
- IN EFI_HANDLE ImageHandle,\r
- IN IN EFI_MM_SYSTEM_TABLE *MmSystemTable\r
- );\r
-\r
-VOID\r
-EFIAPI\r
-ProcessLibraryDestructorList (\r
- IN EFI_HANDLE ImageHandle,\r
- IN IN EFI_MM_SYSTEM_TABLE *MmSystemTable\r
- );\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 _gDriverUnloadImageCount is greater than zero, then an unload\r
- handler must be registered for this image\r
- and the unload handler must invoke ProcessModuleUnloadList().\r
- If _gUefiDriverRevision is not zero and SystemTable->Hdr.Revision is less\r
- than _gUefiDriverRevison, then return EFI_INCOMPATIBLE_VERSION.\r
-\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 _gUefiDriverRevision is greater than\r
- SystemTable->Hdr.Revision.\r
- @retval Other Return value from 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
- //\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
-\r