]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OldMdePkg/Library/UefiApplicationEntryPoint/ApplicationEntryPoint.c
Moved the MdePkg to OldMdePkg so that new code in MdePkg does not break existing...
[mirror_edk2.git] / OldMdePkg / Library / UefiApplicationEntryPoint / ApplicationEntryPoint.c
diff --git a/OldMdePkg/Library/UefiApplicationEntryPoint/ApplicationEntryPoint.c b/OldMdePkg/Library/UefiApplicationEntryPoint/ApplicationEntryPoint.c
new file mode 100644 (file)
index 0000000..d6d9bea
--- /dev/null
@@ -0,0 +1,103 @@
+/** @file\r
+  Entry point library instance to a UEFI application.\r
+\r
+Copyright (c) 2007, Intel Corporation<BR>\r
+All rights reserved. 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
+/**\r
+  Enrty point to UEFI application.\r
+\r
+  @param  ImageHandle ImageHandle of the loaded driver.\r
+  @param  SystemTable Pointer to the EFI System Table.\r
+\r
+  @retval  EFI_SUCCESS One or more of the drivers returned a success code.\r
+  @retval  !EFI_SUCESS The return status from the last driver entry point in the list.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+_ModuleEntryPoint (\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
+  )\r
+{\r
+  EFI_STATUS                 Status;\r
+\r
+  if (_gUefiDriverRevision != 0) {\r
+    //\r
+    // Make sure that the EFI/UEFI spec revision of the platform is >= EFI/UEFI spec revision of the application.\r
+    //\r
+    if (SystemTable->Hdr.Revision < _gUefiDriverRevision) {\r
+      return EFI_INCOMPATIBLE_VERSION;\r
+    }\r
+  }\r
+\r
+  //\r
+  // Call constructor for all libraries.\r
+  //\r
+  ProcessLibraryConstructorList (ImageHandle, SystemTable);\r
+\r
+  //\r
+  // Call the module's entry point\r
+  //\r
+  Status = ProcessModuleEntryPointList (ImageHandle, SystemTable);\r
+\r
+  //\r
+  // Process destructor for all libraries.\r
+  //\r
+  ProcessLibraryDestructorList (ImageHandle, SystemTable);\r
+\r
+  //\r
+  // Return the return status code from the driver entry point\r
+  //\r
+  return Status;\r
+}\r
+\r
+/**\r
+  Invoke the destuctors of all libraries and call gBS->Exit\r
+  to return control to firmware core.\r
+\r
+  @param  Status Status returned by the application that is exiting.\r
+  \r
+  @retval VOID\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+Exit (\r
+  IN EFI_STATUS  Status\r
+  )\r
+\r
+{\r
+  ProcessLibraryDestructorList (gImageHandle, gST);\r
+\r
+  gBS->Exit (gImageHandle, Status, 0, NULL);\r
+}\r
+\r
+/**\r
+  Enrty point wrapper of UEFI Application.\r
+\r
+  @param  ImageHandle ImageHandle of the loaded driver.\r
+  @param  SystemTable Pointer to the EFI System Table.\r
+\r
+  @retval  EFI_SUCCESS One or more of the drivers returned a success code.\r
+  @retval  !EFI_SUCESS The return status from the last driver entry point in the list.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiMain (\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
+  )\r
+{\r
+  return _ModuleEntryPoint (ImageHandle, SystemTable);\r
+}\r