4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Module entry point library for UEFI drivers, DXE Drivers, DXE Runtime Drivers,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and DXE SMM Drivers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __MODULE_ENTRY_POINT_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __MODULE_ENTRY_POINT_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///Declare the PI Specification Revision that this driver requires to execute correctly.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern CONST UINT32 _gDxeRevision;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Declare the EFI/UEFI Specification Revision to which this driver is implemented
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern CONST UINT32 _gUefiDriverRevision;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Declare the number of unload handler in the image.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern CONST UINT8 _gDriverUnloadImageCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The entry point of PE/COFF Image for a DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is the entry point for a DXE Driver, DXE Runtime Driver, DXE SMM Driver,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or UEFI Driver. This function must call ProcessLibraryConstructorList() and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProcessModuleEntryPointList(). If the return status from ProcessModuleEntryPointList()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is an error status, then ProcessLibraryDestructorList() must be called. The return value
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync from ProcessModuleEntryPointList() is returned. If _gDriverUnloadImageCount is greater
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync than zero, then an unload handler must be registered for this image and the unload handler
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync must invoke ProcessModuleUnloadList().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If _gUefiDriverRevision is not zero and SystemTable->Hdr.Revision is less than _gUefiDriverRevison,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then return EFI_INCOMPATIBLE_VERSION.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ImageHandle The image handle of the DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SystemTable A pointer to the EFI System Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The DXE Driver, DXE Runtime Driver, DXE SMM Driver,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or UEFI Driver exited normally.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INCOMPATIBLE_VERSION _gUefiDriverRevision is greater than SystemTable->Hdr.Revision.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Other Return value from ProcessModuleEntryPointList().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_ModuleEntryPoint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SYSTEM_TABLE *SystemTable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Required by the EBC compiler and identical in functionality to _ModuleEntryPoint().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is required to call _ModuleEntryPoint() passing in ImageHandle, and SystemTable.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ImageHandle The image handle of the DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SystemTable A pointer to the EFI System Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The DXE Driver, DXE Runtime Driver, DXE SMM Driver,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or UEFI Driver exited normally.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INCOMPATIBLE_VERSION _gUefiDriverRevision is greater than SystemTable->Hdr.Revision.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Other Return value from ProcessModuleEntryPointList().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEfiMain (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SYSTEM_TABLE *SystemTable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Invokes the library destructors for all dependent libraries and terminates the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function calls ProcessLibraryDestructorList() and the EFI Boot Service Exit()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync with a status specified by Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status Status returned by the driver that is exiting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncExitDriver (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_STATUS Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Autogenerated function that calls the library constructors for all of the module's
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync dependent libraries.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function must be called by _ModuleEntryPoint().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function calls the set of library constructors for the set of library instances
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that a module depends on. This includes library instances that a module depends on
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync directly and library instances that a module depends on indirectly through other libraries.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is autogenerated by build tools and those build tools are responsible
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for collecting the set of library instances, determine which ones have constructors,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and calling the library constructors in the proper order based upon each of the library
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync instances own dependencies.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ImageHandle The image handle of the DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SystemTable A pointer to the EFI System Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncProcessLibraryConstructorList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SYSTEM_TABLE *SystemTable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Autogenerated function that calls the library descructors for all of the module's
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync dependent libraries.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function may be called by _ModuleEntryPoint() or ExitDriver().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function calls the set of library destructors for the set of library instances
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that a module depends on. This includes library instances that a module depends on
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync directly and library instances that a module depends on indirectly through other libraries.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is autogenerated by build tools and those build tools are responsible for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync collecting the set of library instances, determine which ones have destructors, and calling
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the library destructors in the proper order based upon each of the library instances own dependencies.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ImageHandle The image handle of the DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SystemTable A pointer to the EFI System Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncProcessLibraryDestructorList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SYSTEM_TABLE *SystemTable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Autogenerated function that calls a set of module entry points.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function must be called by _ModuleEntryPoint().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function calls the set of module entry points.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is autogenerated by build tools and those build tools are responsible
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for collecting the module entry points and calling them in a specified order.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ImageHandle The image handle of the DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SystemTable A pointer to the EFI System Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver executed normally.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval !EFI_SUCCESS The DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver failed to execute normally.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncProcessModuleEntryPointList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SYSTEM_TABLE *SystemTable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Autogenerated function that calls a set of module unload handlers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function must be called from the unload handler registered by _ModuleEntryPoint().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function calls the set of module unload handlers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is autogenerated by build tools and those build tools are responsible
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for collecting the module unload handlers and calling them in a specified order.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ImageHandle The image handle of the DXE Driver, DXE Runtime Driver, DXE SMM Driver, or UEFI Driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The unload handlers executed normally.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval !EFI_SUCCESS The unload handlers failed to execute normally.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncProcessModuleUnloadList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ImageHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif