From 878ddf1fc3540a715f63594ed22b6929e881afb4 Mon Sep 17 00:00:00 2001 From: bbahnsen Date: Fri, 21 Apr 2006 22:54:32 +0000 Subject: Initial import. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UefiDriverEntryPoint/DriverEntryPoint.c | 137 +++++++++++++++++++++ .../UefiDriverEntryPoint/UefiDriverEntryPoint.mbd | 30 +++++ .../UefiDriverEntryPoint/UefiDriverEntryPoint.msa | 50 ++++++++ MdePkg/Library/UefiDriverEntryPoint/build.xml | 47 +++++++ 4 files changed, 264 insertions(+) create mode 100644 MdePkg/Library/UefiDriverEntryPoint/DriverEntryPoint.c create mode 100644 MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.mbd create mode 100644 MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.msa create mode 100644 MdePkg/Library/UefiDriverEntryPoint/build.xml (limited to 'MdePkg/Library/UefiDriverEntryPoint') diff --git a/MdePkg/Library/UefiDriverEntryPoint/DriverEntryPoint.c b/MdePkg/Library/UefiDriverEntryPoint/DriverEntryPoint.c new file mode 100644 index 0000000000..60177bc9c5 --- /dev/null +++ b/MdePkg/Library/UefiDriverEntryPoint/DriverEntryPoint.c @@ -0,0 +1,137 @@ +/** @file + Entry point to a EFI/DXE driver. + +Copyright (c) 2006, Intel Corporation
+All rights reserved. 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. + +**/ + +/** + Unload function that is registered in the LoadImage protocol. It un-installs + protocols produced and deallocates pool used by the driver. Called by the core + when unloading the driver. + + @param ImageHandle + + @retval EFI_SUCCESS + +**/ +EFI_STATUS +EFIAPI +_DriverUnloadHandler ( + EFI_HANDLE ImageHandle + ) +{ + EFI_STATUS Status; + + // + // If an UnloadImage() handler is specified, then call it + // + Status = ProcessModuleUnloadList (ImageHandle); + + // + // If the driver specific unload handler does not return an error, then call all of the + // library destructors. If the unload handler returned an error, then the driver can not be + // unloaded, and the library destructors should not be called + // + if (!EFI_ERROR (Status)) { + ProcessLibraryDestructorList (ImageHandle, gST); + } + + // + // Return the status from the driver specific unload handler + // + return Status; +} + +/** + Enrty point to DXE Driver. + + @param ImageHandle ImageHandle of the loaded driver. + @param SystemTable Pointer to the EFI System Table. + + @retval EFI_SUCCESS One or more of the drivers returned a success code. + @retval !EFI_SUCESS The return status from the last driver entry point in the list. + +**/ +EFI_STATUS +EFIAPI +_ModuleEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; + + if (_gUefiDriverRevision != 0) { + // + // Make sure that the EFI/UEFI spec revision of the platform is >= EFI/UEFI spec revision of the driver + // + if (SystemTable->Hdr.Revision < _gUefiDriverRevision) { + return EFI_INCOMPATIBLE_VERSION; + } + } + + // + // Call constructor for all libraries + // + ProcessLibraryConstructorList (ImageHandle, SystemTable); + + // + // Install unload handler... + // + if (_gDriverUnloadImageCount != 0) { + Status = gBS->HandleProtocol ( + ImageHandle, + &gEfiLoadedImageProtocolGuid, + (VOID **)&LoadedImage + ); + ASSERT_EFI_ERROR (Status); + LoadedImage->Unload = _DriverUnloadHandler; + } + + // + // Call the driver entry point + // + Status = ProcessModuleEntryPointList (ImageHandle, SystemTable); + + // + // If all of the drivers returned errors, then invoke all of the library destructors + // + if (EFI_ERROR (Status)) { + ProcessLibraryDestructorList (ImageHandle, SystemTable); + } + + // + // Return the cummalative return status code from all of the driver entry points + // + return Status; +} + + +/** + Enrty point wrapper of DXE Driver. + + @param ImageHandle ImageHandle of the loaded driver. + @param SystemTable Pointer to the EFI System Table. + + @retval EFI_SUCCESS One or more of the drivers returned a success code. + @retval !EFI_SUCESS The return status from the last driver entry point in the list. + +**/ +EFI_STATUS +EFIAPI +EfiMain ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + return _ModuleEntryPoint (ImageHandle, SystemTable); +} diff --git a/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.mbd b/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.mbd new file mode 100644 index 0000000000..d41abe2f6b --- /dev/null +++ b/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.mbd @@ -0,0 +1,30 @@ + + + + + UefiDriverEntryPoint + 331deb15-454b-48d8-9b74-70d01f3f3556 + 0 + Library to abstract Framework extensions that conflict with UEFI 2.0 Specification + Copyright (c) 2004-2006, Intel Corporation + + All rights reserved. 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. + + 2006-03-09 23:12 + 2006-03-19 15:17 + + diff --git a/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.msa b/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.msa new file mode 100644 index 0000000000..d4029e6c1b --- /dev/null +++ b/MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.msa @@ -0,0 +1,50 @@ + + + + + UefiDriverEntryPoint + UEFI_DRIVER + LIBRARY + 331deb15-454b-48d8-9b74-70d01f3f3556 + 0 + Component description file for the entry point to a EFIDXE Drivers + Library to abstract Framework extensions that conflict with UEFI 2.0 Specification + Copyright (c) 2004-2006, Intel Corporation + + All rights reserved. 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. + + 0 + 2006-03-09 23:12 + 2006-03-19 15:17 + + + UefiDriverEntryPoint + DebugLib + BaseLib + UefiBootServicesTableLib + UefiRuntimeServicesTableLib + + + DriverEntryPoint.c + + + MdePkg + + + LoadedImage + + diff --git a/MdePkg/Library/UefiDriverEntryPoint/build.xml b/MdePkg/Library/UefiDriverEntryPoint/build.xml new file mode 100644 index 0000000000..8fae304134 --- /dev/null +++ b/MdePkg/Library/UefiDriverEntryPoint/build.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3