X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FLibrary%2FUefiDriverEntryPoint%2FDriverEntryPoint.c;h=c3ccf0fe9e5808336f00e01053a0ad14a3974a2f;hb=9344f0921518309295da89c221d10cbead8531aa;hp=cd096c59b5edca493bd483f7f263ca11c919b18a;hpb=756e4264d3e06c986cab44abe9a4db55787f7a49;p=mirror_edk2.git diff --git a/MdePkg/Library/UefiDriverEntryPoint/DriverEntryPoint.c b/MdePkg/Library/UefiDriverEntryPoint/DriverEntryPoint.c index cd096c59b5..c3ccf0fe9e 100644 --- a/MdePkg/Library/UefiDriverEntryPoint/DriverEntryPoint.c +++ b/MdePkg/Library/UefiDriverEntryPoint/DriverEntryPoint.c @@ -1,30 +1,34 @@ /** @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. +Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent **/ -/** - 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 +#include + +#include + +#include +#include +#include +#include -**/ -EFI_EVENT _mDriverExitBootServicesNotifyEvent; +/** + Unloads an image from memory. + + This function is a callback that a driver registers to do cleanup + when the UnloadImage boot service function is called. + + @param ImageHandle The handle to the image to unload. + @return Status returned by all unload(). + +**/ EFI_STATUS EFIAPI _DriverUnloadHandler ( @@ -44,14 +48,6 @@ _DriverUnloadHandler ( // unloaded, and the library destructors should not be called // if (!EFI_ERROR (Status)) { - // - // Close our ExitBootServices () notify function - // - if (_gDriverExitBootServicesEvent[0] != NULL) { - Status = gBS->CloseEvent (_mDriverExitBootServicesNotifyEvent); - ASSERT_EFI_ERROR (Status); - } - ProcessLibraryDestructorList (ImageHandle, gST); } @@ -61,47 +57,31 @@ _DriverUnloadHandler ( return Status; } -VOID -EFIAPI -_DriverExitBootServices ( - IN EFI_EVENT Event, - IN VOID *Context - ) -/*++ - -Routine Description: - - Set AtRuntime flag as TRUE after ExitBootServices - -Arguments: - - Event - The Event that is being processed - - Context - Event Context - -Returns: - - None - ---*/ -{ - EFI_EVENT_NOTIFY ChildNotifyEventHandler; - UINTN Index; - - for (Index = 0; _gDriverExitBootServicesEvent[Index] != NULL; Index++) { - ChildNotifyEventHandler = _gDriverExitBootServicesEvent[Index]; - ChildNotifyEventHandler (Event, NULL); - } -} /** - 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. + The entry point of PE/COFF Image for a DXE Driver, DXE Runtime Driver, DXE SMM + Driver, or UEFI Driver. + + This function is the entry point for a DXE Driver, DXE Runtime Driver, DXE SMM Driver, + or UEFI 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 _gDriverUnloadImageCount + is greater than zero, then an unload handler must be registered for this image + and the unload handler must invoke ProcessModuleUnloadList(). + If _gUefiDriverRevision is not zero and SystemTable->Hdr.Revision is less than + _gUefiDriverRevison, then return EFI_INCOMPATIBLE_VERSION. + + + @param ImageHandle The image handle of the DXE Driver, DXE Runtime Driver, + DXE SMM Driver, or UEFI Driver. + @param SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The DXE Driver, DXE Runtime Driver, DXE SMM + Driver, or UEFI Driver exited normally. + @retval EFI_INCOMPATIBLE_VERSION _gUefiDriverRevision is greater than + SystemTable->Hdr.Revision. + @retval Other Return value from ProcessModuleEntryPointList(). **/ EFI_STATUS @@ -128,21 +108,6 @@ _ModuleEntryPoint ( // ProcessLibraryConstructorList (ImageHandle, SystemTable); - // - // Register our ExitBootServices () notify function - // - if (_gDriverExitBootServicesEvent[0] != NULL) { - Status = gBS->CreateEvent ( - EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES, - EFI_TPL_NOTIFY, - _DriverExitBootServices, - NULL, - &_mDriverExitBootServicesNotifyEvent - ); - - ASSERT_EFI_ERROR (Status); - } - // // Install unload handler... // @@ -165,14 +130,6 @@ _ModuleEntryPoint ( // If all of the drivers returned errors, then invoke all of the library destructors // if (EFI_ERROR (Status)) { - // - // Close our ExitBootServices () notify function - // - if (_gDriverExitBootServicesEvent[0] != NULL) { - Status = gBS->CloseEvent (_mDriverExitBootServicesNotifyEvent); - ASSERT_EFI_ERROR (Status); - } - ProcessLibraryDestructorList (ImageHandle, SystemTable); } @@ -184,14 +141,20 @@ _ModuleEntryPoint ( /** - Enrty point wrapper of DXE Driver. + Required by the EBC compiler and identical in functionality to _ModuleEntryPoint(). - @param ImageHandle ImageHandle of the loaded driver. - @param SystemTable Pointer to the EFI System Table. + This function is required to call _ModuleEntryPoint() passing in ImageHandle, + and SystemTable. - @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. + @param ImageHandle The image handle of the DXE Driver, DXE Runtime Driver, DXE + SMM Driver, or UEFI Driver. + @param SystemTable A pointer to the EFI System Table. + @retval EFI_SUCCESS The DXE Driver, DXE Runtime Driver, DXE SMM + Driver, or UEFI Driver exited normally. + @retval EFI_INCOMPATIBLE_VERSION _gUefiDriverRevision is greater than + SystemTable->Hdr.Revision. + @retval Other Return value from ProcessModuleEntryPointList(). **/ EFI_STATUS EFIAPI