- paramters -> parameters - funciton -> function - dependecy -> dependency - evauated -> evaluated - genric -> generic - retore -> restore - Protocl -> Protocol - availible -> available - elasped -> elapsed - sarted -> started - boundry -> boundary - permenent -> permanent - debuging -> debugging - availble -> available Cc: Feng Tian <feng.tian@intel.com> Cc: Star Zeng <star.zeng@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Gary Lin <glin@suse.com> Reviewed-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
		
			
				
	
	
		
			2908 lines
		
	
	
		
			98 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2908 lines
		
	
	
		
			98 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  The internal header file includes the common header files, defines
 | 
						|
  internal structure and functions used by DxeCore module.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
 | 
						|
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.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _DXE_MAIN_H_
 | 
						|
#define _DXE_MAIN_H_
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#include <PiDxe.h>
 | 
						|
 | 
						|
#include <Protocol/LoadedImage.h>
 | 
						|
#include <Protocol/GuidedSectionExtraction.h>
 | 
						|
#include <Protocol/DevicePath.h>
 | 
						|
#include <Protocol/Runtime.h>
 | 
						|
#include <Protocol/LoadFile.h>
 | 
						|
#include <Protocol/LoadFile2.h>
 | 
						|
#include <Protocol/DriverBinding.h>
 | 
						|
#include <Protocol/VariableWrite.h>
 | 
						|
#include <Protocol/PlatformDriverOverride.h>
 | 
						|
#include <Protocol/Variable.h>
 | 
						|
#include <Protocol/Timer.h>
 | 
						|
#include <Protocol/SimpleFileSystem.h>
 | 
						|
#include <Protocol/Bds.h>
 | 
						|
#include <Protocol/RealTimeClock.h>
 | 
						|
#include <Protocol/WatchdogTimer.h>
 | 
						|
#include <Protocol/FirmwareVolume2.h>
 | 
						|
#include <Protocol/MonotonicCounter.h>
 | 
						|
#include <Protocol/StatusCode.h>
 | 
						|
#include <Protocol/Decompress.h>
 | 
						|
#include <Protocol/LoadPe32Image.h>
 | 
						|
#include <Protocol/Security.h>
 | 
						|
#include <Protocol/Security2.h>
 | 
						|
#include <Protocol/Ebc.h>
 | 
						|
#include <Protocol/Reset.h>
 | 
						|
#include <Protocol/Cpu.h>
 | 
						|
#include <Protocol/Metronome.h>
 | 
						|
#include <Protocol/FirmwareVolumeBlock.h>
 | 
						|
#include <Protocol/Capsule.h>
 | 
						|
#include <Protocol/BusSpecificDriverOverride.h>
 | 
						|
#include <Protocol/DriverFamilyOverride.h>
 | 
						|
#include <Protocol/TcgService.h>
 | 
						|
#include <Protocol/HiiPackageList.h>
 | 
						|
#include <Protocol/SmmBase2.h>
 | 
						|
#include <Guid/MemoryTypeInformation.h>
 | 
						|
#include <Guid/FirmwareFileSystem2.h>
 | 
						|
#include <Guid/FirmwareFileSystem3.h>
 | 
						|
#include <Guid/HobList.h>
 | 
						|
#include <Guid/DebugImageInfoTable.h>
 | 
						|
#include <Guid/FileInfo.h>
 | 
						|
#include <Guid/Apriori.h>
 | 
						|
#include <Guid/DxeServices.h>
 | 
						|
#include <Guid/MemoryAllocationHob.h>
 | 
						|
#include <Guid/EventLegacyBios.h>
 | 
						|
#include <Guid/EventGroup.h>
 | 
						|
#include <Guid/EventExitBootServiceFailed.h>
 | 
						|
#include <Guid/LoadModuleAtFixedAddress.h>
 | 
						|
#include <Guid/IdleLoopEvent.h>
 | 
						|
#include <Guid/VectorHandoffTable.h>
 | 
						|
#include <Ppi/VectorHandoffInfo.h>
 | 
						|
#include <Guid/MemoryProfile.h>
 | 
						|
 | 
						|
#include <Library/DxeCoreEntryPoint.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/HobLib.h>
 | 
						|
#include <Library/PerformanceLib.h>
 | 
						|
#include <Library/UefiDecompressLib.h>
 | 
						|
#include <Library/ExtractGuidedSectionLib.h>
 | 
						|
#include <Library/CacheMaintenanceLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/PeCoffLib.h>
 | 
						|
#include <Library/PeCoffGetEntryPointLib.h>
 | 
						|
#include <Library/PeCoffExtraActionLib.h>
 | 
						|
#include <Library/PcdLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/DevicePathLib.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/ReportStatusCodeLib.h>
 | 
						|
#include <Library/TimerLib.h>
 | 
						|
#include <Library/DxeServicesLib.h>
 | 
						|
#include <Library/DebugAgentLib.h>
 | 
						|
#include <Library/CpuExceptionHandlerLib.h>
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// attributes for reserved memory before it is promoted to system memory
 | 
						|
//
 | 
						|
#define EFI_MEMORY_PRESENT      0x0100000000000000ULL
 | 
						|
#define EFI_MEMORY_INITIALIZED  0x0200000000000000ULL
 | 
						|
#define EFI_MEMORY_TESTED       0x0400000000000000ULL
 | 
						|
 | 
						|
//
 | 
						|
// range for memory mapped port I/O on IPF
 | 
						|
//
 | 
						|
#define EFI_MEMORY_PORT_IO  0x4000000000000000ULL
 | 
						|
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DEP_REPLACE_TRUE - Used to dynamically patch the dependency expression
 | 
						|
///                        to save time.  A EFI_DEP_PUSH is evaluated one an
 | 
						|
///                        replaced with EFI_DEP_REPLACE_TRUE. If PI spec's Vol 2
 | 
						|
///                        Driver Execution Environment Core Interface use 0xff
 | 
						|
///                        as new DEPEX opcode. EFI_DEP_REPLACE_TRUE should be
 | 
						|
///                        defined to a new value that is not conflicting with PI spec.
 | 
						|
///
 | 
						|
#define EFI_DEP_REPLACE_TRUE  0xff
 | 
						|
 | 
						|
///
 | 
						|
/// Define the initial size of the dependency expression evaluation stack
 | 
						|
///
 | 
						|
#define DEPEX_STACK_SIZE_INCREMENT  0x1000
 | 
						|
 | 
						|
#if defined (MDE_CPU_IPF)
 | 
						|
///
 | 
						|
/// For Itanium machines make the default allocations 8K aligned
 | 
						|
///
 | 
						|
#define EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT  (EFI_PAGE_SIZE * 2)
 | 
						|
#define DEFAULT_PAGE_ALLOCATION                     (EFI_PAGE_SIZE * 2)
 | 
						|
 | 
						|
#elif defined (MDE_CPU_AARCH64)
 | 
						|
///
 | 
						|
/// 64-bit ARM systems allow the OS to execute with 64 KB page size,
 | 
						|
/// so for improved interoperability with the firmware, align the
 | 
						|
/// runtime regions to 64 KB as well
 | 
						|
///
 | 
						|
#define EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT  (SIZE_64KB)
 | 
						|
#define DEFAULT_PAGE_ALLOCATION                     (EFI_PAGE_SIZE)
 | 
						|
 | 
						|
#else
 | 
						|
///
 | 
						|
/// For generic EFI machines make the default allocations 4K aligned
 | 
						|
///
 | 
						|
#define EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT  (EFI_PAGE_SIZE)
 | 
						|
#define DEFAULT_PAGE_ALLOCATION                     (EFI_PAGE_SIZE)
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  EFI_GUID                    *ProtocolGuid;
 | 
						|
  VOID                        **Protocol;
 | 
						|
  EFI_EVENT                   Event;
 | 
						|
  VOID                        *Registration;
 | 
						|
  BOOLEAN                     Present;
 | 
						|
} EFI_CORE_PROTOCOL_NOTIFY_ENTRY;
 | 
						|
 | 
						|
//
 | 
						|
// DXE Dispatcher Data structures
 | 
						|
//
 | 
						|
 | 
						|
#define KNOWN_HANDLE_SIGNATURE  SIGNATURE_32('k','n','o','w')
 | 
						|
typedef struct {
 | 
						|
  UINTN           Signature;
 | 
						|
  LIST_ENTRY      Link;         // mFvHandleList
 | 
						|
  EFI_HANDLE      Handle;
 | 
						|
  EFI_GUID        FvNameGuid;
 | 
						|
} KNOWN_HANDLE;
 | 
						|
 | 
						|
 | 
						|
#define EFI_CORE_DRIVER_ENTRY_SIGNATURE SIGNATURE_32('d','r','v','r')
 | 
						|
typedef struct {
 | 
						|
  UINTN                           Signature;
 | 
						|
  LIST_ENTRY                      Link;             // mDriverList
 | 
						|
 | 
						|
  LIST_ENTRY                      ScheduledLink;    // mScheduledQueue
 | 
						|
 | 
						|
  EFI_HANDLE                      FvHandle;
 | 
						|
  EFI_GUID                        FileName;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL        *FvFileDevicePath;
 | 
						|
  EFI_FIRMWARE_VOLUME2_PROTOCOL   *Fv;
 | 
						|
 | 
						|
  VOID                            *Depex;
 | 
						|
  UINTN                           DepexSize;
 | 
						|
 | 
						|
  BOOLEAN                         Before;
 | 
						|
  BOOLEAN                         After;
 | 
						|
  EFI_GUID                        BeforeAfterGuid;
 | 
						|
 | 
						|
  BOOLEAN                         Dependent;
 | 
						|
  BOOLEAN                         Unrequested;
 | 
						|
  BOOLEAN                         Scheduled;
 | 
						|
  BOOLEAN                         Untrusted;
 | 
						|
  BOOLEAN                         Initialized;
 | 
						|
  BOOLEAN                         DepexProtocolError;
 | 
						|
 | 
						|
  EFI_HANDLE                      ImageHandle;
 | 
						|
  BOOLEAN                         IsFvImage;
 | 
						|
 | 
						|
} EFI_CORE_DRIVER_ENTRY;
 | 
						|
 | 
						|
//
 | 
						|
//The data structure of GCD memory map entry
 | 
						|
//
 | 
						|
#define EFI_GCD_MAP_SIGNATURE  SIGNATURE_32('g','c','d','m')
 | 
						|
typedef struct {
 | 
						|
  UINTN                 Signature;
 | 
						|
  LIST_ENTRY            Link;
 | 
						|
  EFI_PHYSICAL_ADDRESS  BaseAddress;
 | 
						|
  UINT64                EndAddress;
 | 
						|
  UINT64                Capabilities;
 | 
						|
  UINT64                Attributes;
 | 
						|
  EFI_GCD_MEMORY_TYPE   GcdMemoryType;
 | 
						|
  EFI_GCD_IO_TYPE       GcdIoType;
 | 
						|
  EFI_HANDLE            ImageHandle;
 | 
						|
  EFI_HANDLE            DeviceHandle;
 | 
						|
} EFI_GCD_MAP_ENTRY;
 | 
						|
 | 
						|
 | 
						|
#define LOADED_IMAGE_PRIVATE_DATA_SIGNATURE   SIGNATURE_32('l','d','r','i')
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN                       Signature;
 | 
						|
  /// Image handle
 | 
						|
  EFI_HANDLE                  Handle;   
 | 
						|
  /// Image type
 | 
						|
  UINTN                       Type;           
 | 
						|
  /// If entrypoint has been called
 | 
						|
  BOOLEAN                     Started;        
 | 
						|
  /// The image's entry point
 | 
						|
  EFI_IMAGE_ENTRY_POINT       EntryPoint;     
 | 
						|
  /// loaded image protocol
 | 
						|
  EFI_LOADED_IMAGE_PROTOCOL   Info;           
 | 
						|
  /// Location in memory
 | 
						|
  EFI_PHYSICAL_ADDRESS        ImageBasePage;  
 | 
						|
  /// Number of pages
 | 
						|
  UINTN                       NumberOfPages;  
 | 
						|
  /// Original fixup data
 | 
						|
  CHAR8                       *FixupData;     
 | 
						|
  /// Tpl of started image
 | 
						|
  EFI_TPL                     Tpl;            
 | 
						|
  /// Status returned by started image
 | 
						|
  EFI_STATUS                  Status;         
 | 
						|
  /// Size of ExitData from started image
 | 
						|
  UINTN                       ExitDataSize;   
 | 
						|
  /// Pointer to exit data from started image
 | 
						|
  VOID                        *ExitData;      
 | 
						|
  /// Pointer to pool allocation for context save/restore
 | 
						|
  VOID                        *JumpBuffer;    
 | 
						|
  /// Pointer to buffer for context save/restore
 | 
						|
  BASE_LIBRARY_JUMP_BUFFER    *JumpContext;  
 | 
						|
  /// Machine type from PE image
 | 
						|
  UINT16                      Machine;        
 | 
						|
  /// EBC Protocol pointer
 | 
						|
  EFI_EBC_PROTOCOL            *Ebc;           
 | 
						|
  /// Runtime image list
 | 
						|
  EFI_RUNTIME_IMAGE_ENTRY     *RuntimeData;   
 | 
						|
  /// Pointer to Loaded Image Device Path Protocol
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL    *LoadedImageDevicePath;  
 | 
						|
  /// PeCoffLoader ImageContext
 | 
						|
  PE_COFF_LOADER_IMAGE_CONTEXT  ImageContext; 
 | 
						|
  /// Status returned by LoadImage() service.
 | 
						|
  EFI_STATUS                  LoadImageStatus;
 | 
						|
} LOADED_IMAGE_PRIVATE_DATA;
 | 
						|
 | 
						|
#define LOADED_IMAGE_PRIVATE_DATA_FROM_THIS(a) \
 | 
						|
          CR(a, LOADED_IMAGE_PRIVATE_DATA, Info, LOADED_IMAGE_PRIVATE_DATA_SIGNATURE)
 | 
						|
 | 
						|
//
 | 
						|
// DXE Core Global Variables
 | 
						|
//
 | 
						|
extern EFI_SYSTEM_TABLE                         *gDxeCoreST;
 | 
						|
extern EFI_RUNTIME_SERVICES                     *gDxeCoreRT;
 | 
						|
extern EFI_DXE_SERVICES                         *gDxeCoreDS;
 | 
						|
extern EFI_HANDLE                               gDxeCoreImageHandle;
 | 
						|
 | 
						|
extern BOOLEAN                                  gMemoryMapTerminated;
 | 
						|
 | 
						|
extern EFI_DECOMPRESS_PROTOCOL                  gEfiDecompress;
 | 
						|
 | 
						|
extern EFI_RUNTIME_ARCH_PROTOCOL                *gRuntime;
 | 
						|
extern EFI_CPU_ARCH_PROTOCOL                    *gCpu;
 | 
						|
extern EFI_WATCHDOG_TIMER_ARCH_PROTOCOL         *gWatchdogTimer;
 | 
						|
extern EFI_METRONOME_ARCH_PROTOCOL              *gMetronome;
 | 
						|
extern EFI_TIMER_ARCH_PROTOCOL                  *gTimer;
 | 
						|
extern EFI_SECURITY_ARCH_PROTOCOL               *gSecurity;
 | 
						|
extern EFI_SECURITY2_ARCH_PROTOCOL              *gSecurity2;
 | 
						|
extern EFI_BDS_ARCH_PROTOCOL                    *gBds;
 | 
						|
extern EFI_SMM_BASE2_PROTOCOL                   *gSmmBase2;
 | 
						|
 | 
						|
extern EFI_TPL                                  gEfiCurrentTpl;
 | 
						|
 | 
						|
extern EFI_GUID                                 *gDxeCoreFileName;
 | 
						|
extern EFI_LOADED_IMAGE_PROTOCOL                *gDxeCoreLoadedImage;
 | 
						|
 | 
						|
extern EFI_MEMORY_TYPE_INFORMATION              gMemoryTypeInformation[EfiMaxMemoryType + 1];
 | 
						|
 | 
						|
extern BOOLEAN                                  gDispatcherRunning;
 | 
						|
extern EFI_RUNTIME_ARCH_PROTOCOL                gRuntimeTemplate;
 | 
						|
 | 
						|
extern EFI_LOAD_FIXED_ADDRESS_CONFIGURATION_TABLE    gLoadModuleAtFixAddressConfigurationTable;
 | 
						|
extern BOOLEAN                                       gLoadFixedAddressCodeMemoryReady;
 | 
						|
//
 | 
						|
// Service Initialization Functions
 | 
						|
//
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Called to initialize the pool.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreInitializePool (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Called to initialize the memory map and add descriptors to
 | 
						|
  the current descriptor list.
 | 
						|
  The first descriptor that is added must be general usable
 | 
						|
  memory as the addition allocates heap.
 | 
						|
 | 
						|
  @param  Type                   The type of memory to add
 | 
						|
  @param  Start                  The starting address in the memory range Must be
 | 
						|
                                 page aligned
 | 
						|
  @param  NumberOfPages          The number of pages in the range
 | 
						|
  @param  Attribute              Attributes of the memory to add
 | 
						|
 | 
						|
  @return None.  The range is added to the memory map
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreAddMemoryDescriptor (
 | 
						|
  IN EFI_MEMORY_TYPE       Type,
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  Start,
 | 
						|
  IN UINT64                NumberOfPages,
 | 
						|
  IN UINT64                Attribute
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Release memory lock on mGcdMemorySpaceLock.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreReleaseGcdMemoryLock (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Acquire memory lock on mGcdMemorySpaceLock.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreAcquireGcdMemoryLock (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  External function. Initializes memory services based on the memory
 | 
						|
  descriptor HOBs.  This function is responsible for priming the memory
 | 
						|
  map, so memory allocations and resource allocations can be made.
 | 
						|
  The first part of this function can not depend on any memory services
 | 
						|
  until at least one memory descriptor is provided to the memory services.
 | 
						|
 | 
						|
  @param  HobStart               The start address of the HOB.
 | 
						|
  @param  MemoryBaseAddress      Start address of memory region found to init DXE
 | 
						|
                                 core.
 | 
						|
  @param  MemoryLength           Length of memory region found to init DXE core.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Memory services successfully initialized.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreInitializeMemoryServices (
 | 
						|
  IN  VOID                  **HobStart,
 | 
						|
  OUT EFI_PHYSICAL_ADDRESS  *MemoryBaseAddress,
 | 
						|
  OUT UINT64                *MemoryLength
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  External function. Initializes the GCD and memory services based on the memory
 | 
						|
  descriptor HOBs.  This function is responsible for priming the GCD map and the
 | 
						|
  memory map, so memory allocations and resource allocations can be made. The
 | 
						|
  HobStart will be relocated to a pool buffer.
 | 
						|
 | 
						|
  @param  HobStart               The start address of the HOB
 | 
						|
  @param  MemoryBaseAddress      Start address of memory region found to init DXE
 | 
						|
                                 core.
 | 
						|
  @param  MemoryLength           Length of memory region found to init DXE core.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            GCD services successfully initialized.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreInitializeGcdServices (
 | 
						|
  IN OUT VOID              **HobStart,
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  MemoryBaseAddress,
 | 
						|
  IN UINT64                MemoryLength
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Initializes "event" support.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Always return success
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreInitializeEventServices (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Add the Image Services to EFI Boot Services Table and install the protocol
 | 
						|
  interfaces for this image.
 | 
						|
 | 
						|
  @param  HobStart                The HOB to initialize
 | 
						|
 | 
						|
  @return Status code.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreInitializeImageServices (
 | 
						|
  IN  VOID *HobStart
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Creates an event that is fired everytime a Protocol of a specific type is installed.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreNotifyOnProtocolInstallation (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Return TRUE if all AP services are available.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS    All AP services are available
 | 
						|
  @retval EFI_NOT_FOUND  At least one AP service is not available
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreAllEfiServicesAvailable (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Calcualte the 32-bit CRC in a EFI table using the service provided by the
 | 
						|
  gRuntime service.
 | 
						|
 | 
						|
  @param  Hdr                    Pointer to an EFI standard header
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CalculateEfiHdrCrc (
 | 
						|
  IN  OUT EFI_TABLE_HEADER    *Hdr
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Called by the platform code to process a tick.
 | 
						|
 | 
						|
  @param  Duration               The number of 100ns elapsed since the last call
 | 
						|
                                 to TimerTick
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
CoreTimerTick (
 | 
						|
  IN UINT64   Duration
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize the dispatcher. Initialize the notification function that runs when
 | 
						|
  an FV2 protocol is added to the system.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreInitializeDispatcher (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This is the POSTFIX version of the dependency evaluator.  This code does
 | 
						|
  not need to handle Before or After, as it is not valid to call this
 | 
						|
  routine in this case. The SOR is just ignored and is a nop in the grammer.
 | 
						|
  POSTFIX means all the math is done on top of the stack.
 | 
						|
 | 
						|
  @param  DriverEntry           DriverEntry element to update.
 | 
						|
 | 
						|
  @retval TRUE                  If driver is ready to run.
 | 
						|
  @retval FALSE                 If driver is not ready to run or some fatal error
 | 
						|
                                was found.
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
CoreIsSchedulable (
 | 
						|
  IN  EFI_CORE_DRIVER_ENTRY   *DriverEntry
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Preprocess dependency expression and update DriverEntry to reflect the
 | 
						|
  state of  Before, After, and SOR dependencies. If DriverEntry->Before
 | 
						|
  or DriverEntry->After is set it will never be cleared. If SOR is set
 | 
						|
  it will be cleared by CoreSchedule(), and then the driver can be
 | 
						|
  dispatched.
 | 
						|
 | 
						|
  @param  DriverEntry           DriverEntry element to update .
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           It always works.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CorePreProcessDepex (
 | 
						|
  IN  EFI_CORE_DRIVER_ENTRY   *DriverEntry
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Terminates all boot services.
 | 
						|
 | 
						|
  @param  ImageHandle            Handle that identifies the exiting image.
 | 
						|
  @param  MapKey                 Key to the latest memory map.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Boot Services terminated
 | 
						|
  @retval EFI_INVALID_PARAMETER  MapKey is incorrect.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreExitBootServices (
 | 
						|
  IN EFI_HANDLE   ImageHandle,
 | 
						|
  IN UINTN        MapKey
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Make sure the memory map is following all the construction rules,
 | 
						|
  it is the last time to check memory map error before exit boot services.
 | 
						|
 | 
						|
  @param  MapKey                 Memory map key
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Memory map not consistent with construction
 | 
						|
                                 rules.
 | 
						|
  @retval EFI_SUCCESS            Valid memory map.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreTerminateMemoryMap (
 | 
						|
  IN UINTN          MapKey
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Signals all events in the EventGroup.
 | 
						|
 | 
						|
  @param  EventGroup             The list to signal
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreNotifySignalList (
 | 
						|
  IN EFI_GUID     *EventGroup
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Boot Service called to add, modify, or remove a system configuration table from
 | 
						|
  the EFI System Table.
 | 
						|
 | 
						|
  @param  Guid           Pointer to the GUID for the entry to add, update, or
 | 
						|
                         remove
 | 
						|
  @param  Table          Pointer to the configuration table for the entry to add,
 | 
						|
                         update, or remove, may be NULL.
 | 
						|
 | 
						|
  @return EFI_SUCCESS               Guid, Table pair added, updated, or removed.
 | 
						|
  @return EFI_INVALID_PARAMETER     Input GUID not valid.
 | 
						|
  @return EFI_NOT_FOUND             Attempted to delete non-existant entry
 | 
						|
  @return EFI_OUT_OF_RESOURCES      Not enough memory available
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreInstallConfigurationTable (
 | 
						|
  IN EFI_GUID *Guid,
 | 
						|
  IN VOID     *Table
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Raise the task priority level to the new level.
 | 
						|
  High level is implemented by disabling processor interrupts.
 | 
						|
 | 
						|
  @param  NewTpl  New task priority level
 | 
						|
 | 
						|
  @return The previous task priority level
 | 
						|
 | 
						|
**/
 | 
						|
EFI_TPL
 | 
						|
EFIAPI
 | 
						|
CoreRaiseTpl (
 | 
						|
  IN EFI_TPL      NewTpl
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Lowers the task priority to the previous value.   If the new
 | 
						|
  priority unmasks events at a higher priority, they are dispatched.
 | 
						|
 | 
						|
  @param  NewTpl  New, lower, task priority
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
CoreRestoreTpl (
 | 
						|
  IN EFI_TPL NewTpl
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Introduces a fine-grained stall.
 | 
						|
 | 
						|
  @param  Microseconds           The number of microseconds to stall execution.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Execution was stalled for at least the requested
 | 
						|
                                 amount of microseconds.
 | 
						|
  @retval EFI_NOT_AVAILABLE_YET  gMetronome is not available yet
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreStall (
 | 
						|
  IN UINTN            Microseconds
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Sets the system's watchdog timer.
 | 
						|
 | 
						|
  @param  Timeout         The number of seconds to set the watchdog timer to.
 | 
						|
                          A value of zero disables the timer.
 | 
						|
  @param  WatchdogCode    The numeric code to log on a watchdog timer timeout
 | 
						|
                          event. The firmware reserves codes 0x0000 to 0xFFFF.
 | 
						|
                          Loaders and operating systems may use other timeout
 | 
						|
                          codes.
 | 
						|
  @param  DataSize        The size, in bytes, of WatchdogData.
 | 
						|
  @param  WatchdogData    A data buffer that includes a Null-terminated Unicode
 | 
						|
                          string, optionally followed by additional binary data.
 | 
						|
                          The string is a description that the call may use to
 | 
						|
                          further indicate the reason to be logged with a
 | 
						|
                          watchdog event.
 | 
						|
 | 
						|
  @return EFI_SUCCESS               Timeout has been set
 | 
						|
  @return EFI_NOT_AVAILABLE_YET     WatchdogTimer is not available yet
 | 
						|
  @return EFI_UNSUPPORTED           System does not have a timer (currently not used)
 | 
						|
  @return EFI_DEVICE_ERROR          Could not complete due to hardware error
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreSetWatchdogTimer (
 | 
						|
  IN UINTN    Timeout,
 | 
						|
  IN UINT64   WatchdogCode,
 | 
						|
  IN UINTN    DataSize,
 | 
						|
  IN CHAR16   *WatchdogData OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Wrapper function to CoreInstallProtocolInterfaceNotify.  This is the public API which
 | 
						|
  Calls the private one which contains a BOOLEAN parameter for notifications
 | 
						|
 | 
						|
  @param  UserHandle             The handle to install the protocol handler on,
 | 
						|
                                 or NULL if a new handle is to be allocated
 | 
						|
  @param  Protocol               The protocol to add to the handle
 | 
						|
  @param  InterfaceType          Indicates whether Interface is supplied in
 | 
						|
                                 native form.
 | 
						|
  @param  Interface              The interface for the protocol being added
 | 
						|
 | 
						|
  @return Status code
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreInstallProtocolInterface (
 | 
						|
  IN OUT EFI_HANDLE     *UserHandle,
 | 
						|
  IN EFI_GUID           *Protocol,
 | 
						|
  IN EFI_INTERFACE_TYPE InterfaceType,
 | 
						|
  IN VOID               *Interface
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Installs a protocol interface into the boot services environment.
 | 
						|
 | 
						|
  @param  UserHandle             The handle to install the protocol handler on,
 | 
						|
                                 or NULL if a new handle is to be allocated
 | 
						|
  @param  Protocol               The protocol to add to the handle
 | 
						|
  @param  InterfaceType          Indicates whether Interface is supplied in
 | 
						|
                                 native form.
 | 
						|
  @param  Interface              The interface for the protocol being added
 | 
						|
  @param  Notify                 indicates whether notify the notification list
 | 
						|
                                 for this protocol
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   No enough buffer to allocate
 | 
						|
  @retval EFI_SUCCESS            Protocol interface successfully installed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreInstallProtocolInterfaceNotify (
 | 
						|
  IN OUT EFI_HANDLE     *UserHandle,
 | 
						|
  IN EFI_GUID           *Protocol,
 | 
						|
  IN EFI_INTERFACE_TYPE InterfaceType,
 | 
						|
  IN VOID               *Interface,
 | 
						|
  IN BOOLEAN            Notify
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Installs a list of protocol interface into the boot services environment.
 | 
						|
  This function calls InstallProtocolInterface() in a loop. If any error
 | 
						|
  occures all the protocols added by this function are removed. This is
 | 
						|
  basically a lib function to save space.
 | 
						|
 | 
						|
  @param  Handle                 The handle to install the protocol handlers on,
 | 
						|
                                 or NULL if a new handle is to be allocated
 | 
						|
  @param  ...                    EFI_GUID followed by protocol instance. A NULL
 | 
						|
                                 terminates the  list. The pairs are the
 | 
						|
                                 arguments to InstallProtocolInterface(). All the
 | 
						|
                                 protocols are added to Handle.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            All the protocol interface was installed.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   There was not enough memory in pool to install all the protocols.
 | 
						|
  @retval EFI_ALREADY_STARTED    A Device Path Protocol instance was passed in that is already present in
 | 
						|
                                 the handle database.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Handle is NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Protocol is already installed on the handle specified by Handle.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreInstallMultipleProtocolInterfaces (
 | 
						|
  IN OUT EFI_HANDLE           *Handle,
 | 
						|
  ...
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Uninstalls a list of protocol interface in the boot services environment.
 | 
						|
  This function calls UnisatllProtocolInterface() in a loop. This is
 | 
						|
  basically a lib function to save space.
 | 
						|
 | 
						|
  @param  Handle                 The handle to uninstall the protocol
 | 
						|
  @param  ...                    EFI_GUID followed by protocol instance. A NULL
 | 
						|
                                 terminates the  list. The pairs are the
 | 
						|
                                 arguments to UninstallProtocolInterface(). All
 | 
						|
                                 the protocols are added to Handle.
 | 
						|
 | 
						|
  @return Status code
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreUninstallMultipleProtocolInterfaces (
 | 
						|
  IN EFI_HANDLE           Handle,
 | 
						|
  ...
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Reinstall a protocol interface on a device handle.  The OldInterface for Protocol is replaced by the NewInterface.
 | 
						|
 | 
						|
  @param  UserHandle             Handle on which the interface is to be
 | 
						|
                                 reinstalled
 | 
						|
  @param  Protocol               The numeric ID of the interface
 | 
						|
  @param  OldInterface           A pointer to the old interface
 | 
						|
  @param  NewInterface           A pointer to the new interface
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The protocol interface was installed
 | 
						|
  @retval EFI_NOT_FOUND          The OldInterface on the handle was not found
 | 
						|
  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreReinstallProtocolInterface (
 | 
						|
  IN EFI_HANDLE     UserHandle,
 | 
						|
  IN EFI_GUID       *Protocol,
 | 
						|
  IN VOID           *OldInterface,
 | 
						|
  IN VOID           *NewInterface
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Uninstalls all instances of a protocol:interfacer from a handle.
 | 
						|
  If the last protocol interface is remove from the handle, the
 | 
						|
  handle is freed.
 | 
						|
 | 
						|
  @param  UserHandle             The handle to remove the protocol handler from
 | 
						|
  @param  Protocol               The protocol, of protocol:interface, to remove
 | 
						|
  @param  Interface              The interface, of protocol:interface, to remove
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Protocol is NULL.
 | 
						|
  @retval EFI_SUCCESS            Protocol interface successfully uninstalled.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreUninstallProtocolInterface (
 | 
						|
  IN EFI_HANDLE       UserHandle,
 | 
						|
  IN EFI_GUID         *Protocol,
 | 
						|
  IN VOID             *Interface
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Queries a handle to determine if it supports a specified protocol.
 | 
						|
 | 
						|
  @param  UserHandle             The handle being queried.
 | 
						|
  @param  Protocol               The published unique identifier of the protocol.
 | 
						|
  @param  Interface              Supplies the address where a pointer to the
 | 
						|
                                 corresponding Protocol Interface is returned.
 | 
						|
 | 
						|
  @return The requested protocol interface for the handle
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreHandleProtocol (
 | 
						|
  IN EFI_HANDLE       UserHandle,
 | 
						|
  IN EFI_GUID         *Protocol,
 | 
						|
  OUT VOID            **Interface
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Locates the installed protocol handler for the handle, and
 | 
						|
  invokes it to obtain the protocol interface. Usage information
 | 
						|
  is registered in the protocol data base.
 | 
						|
 | 
						|
  @param  UserHandle             The handle to obtain the protocol interface on
 | 
						|
  @param  Protocol               The ID of the protocol
 | 
						|
  @param  Interface              The location to return the protocol interface
 | 
						|
  @param  ImageHandle            The handle of the Image that is opening the
 | 
						|
                                 protocol interface specified by Protocol and
 | 
						|
                                 Interface.
 | 
						|
  @param  ControllerHandle       The controller handle that is requiring this
 | 
						|
                                 interface.
 | 
						|
  @param  Attributes             The open mode of the protocol interface
 | 
						|
                                 specified by Handle and Protocol.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Protocol is NULL.
 | 
						|
  @retval EFI_SUCCESS            Get the protocol interface.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreOpenProtocol (
 | 
						|
  IN  EFI_HANDLE                UserHandle,
 | 
						|
  IN  EFI_GUID                  *Protocol,
 | 
						|
  OUT VOID                      **Interface OPTIONAL,
 | 
						|
  IN  EFI_HANDLE                ImageHandle,
 | 
						|
  IN  EFI_HANDLE                ControllerHandle,
 | 
						|
  IN  UINT32                    Attributes
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Return information about Opened protocols in the system
 | 
						|
 | 
						|
  @param  UserHandle             The handle to close the protocol interface on
 | 
						|
  @param  Protocol               The ID of the protocol
 | 
						|
  @param  EntryBuffer            A pointer to a buffer of open protocol
 | 
						|
                                 information in the form of
 | 
						|
                                 EFI_OPEN_PROTOCOL_INFORMATION_ENTRY structures.
 | 
						|
  @param  EntryCount             Number of EntryBuffer entries
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreOpenProtocolInformation (
 | 
						|
  IN  EFI_HANDLE                          UserHandle,
 | 
						|
  IN  EFI_GUID                            *Protocol,
 | 
						|
  OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
 | 
						|
  OUT UINTN                               *EntryCount
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Closes a protocol on a handle that was opened using OpenProtocol().
 | 
						|
 | 
						|
  @param  UserHandle             The handle for the protocol interface that was
 | 
						|
                                 previously opened with OpenProtocol(), and is
 | 
						|
                                 now being closed.
 | 
						|
  @param  Protocol               The published unique identifier of the protocol.
 | 
						|
                                 It is the caller's responsibility to pass in a
 | 
						|
                                 valid GUID.
 | 
						|
  @param  AgentHandle            The handle of the agent that is closing the
 | 
						|
                                 protocol interface.
 | 
						|
  @param  ControllerHandle       If the agent that opened a protocol is a driver
 | 
						|
                                 that follows the EFI Driver Model, then this
 | 
						|
                                 parameter is the controller handle that required
 | 
						|
                                 the protocol interface. If the agent does not
 | 
						|
                                 follow the EFI Driver Model, then this parameter
 | 
						|
                                 is optional and may be NULL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The protocol instance was closed.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Handle, AgentHandle or ControllerHandle is not a
 | 
						|
                                 valid EFI_HANDLE.
 | 
						|
  @retval EFI_NOT_FOUND          Can not find the specified protocol or
 | 
						|
                                 AgentHandle.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreCloseProtocol (
 | 
						|
  IN  EFI_HANDLE                UserHandle,
 | 
						|
  IN  EFI_GUID                  *Protocol,
 | 
						|
  IN  EFI_HANDLE                AgentHandle,
 | 
						|
  IN  EFI_HANDLE                ControllerHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieves the list of protocol interface GUIDs that are installed on a handle in a buffer allocated
 | 
						|
  from pool.
 | 
						|
 | 
						|
  @param  UserHandle             The handle from which to retrieve the list of
 | 
						|
                                 protocol interface GUIDs.
 | 
						|
  @param  ProtocolBuffer         A pointer to the list of protocol interface GUID
 | 
						|
                                 pointers that are installed on Handle.
 | 
						|
  @param  ProtocolBufferCount    A pointer to the number of GUID pointers present
 | 
						|
                                 in ProtocolBuffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The list of protocol interface GUIDs installed
 | 
						|
                                 on Handle was returned in ProtocolBuffer. The
 | 
						|
                                 number of protocol interface GUIDs was returned
 | 
						|
                                 in ProtocolBufferCount.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Handle is NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Handle is not a valid EFI_HANDLE.
 | 
						|
  @retval EFI_INVALID_PARAMETER  ProtocolBuffer is NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER  ProtocolBufferCount is NULL.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   There is not enough pool memory to store the
 | 
						|
                                 results.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreProtocolsPerHandle (
 | 
						|
  IN EFI_HANDLE       UserHandle,
 | 
						|
  OUT EFI_GUID        ***ProtocolBuffer,
 | 
						|
  OUT UINTN           *ProtocolBufferCount
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Add a new protocol notification record for the request protocol.
 | 
						|
 | 
						|
  @param  Protocol               The requested protocol to add the notify
 | 
						|
                                 registration
 | 
						|
  @param  Event                  The event to signal
 | 
						|
  @param  Registration           Returns the registration record
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter
 | 
						|
  @retval EFI_SUCCESS            Successfully returned the registration record
 | 
						|
                                 that has been added
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreRegisterProtocolNotify (
 | 
						|
  IN EFI_GUID       *Protocol,
 | 
						|
  IN EFI_EVENT      Event,
 | 
						|
  OUT  VOID         **Registration
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Removes all the events in the protocol database that match Event.
 | 
						|
 | 
						|
  @param  Event                  The event to search for in the protocol
 | 
						|
                                 database.
 | 
						|
 | 
						|
  @return EFI_SUCCESS when done searching the entire database.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreUnregisterProtocolNotify (
 | 
						|
  IN EFI_EVENT      Event
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Locates the requested handle(s) and returns them in Buffer.
 | 
						|
 | 
						|
  @param  SearchType             The type of search to perform to locate the
 | 
						|
                                 handles
 | 
						|
  @param  Protocol               The protocol to search for
 | 
						|
  @param  SearchKey              Dependant on SearchType
 | 
						|
  @param  BufferSize             On input the size of Buffer.  On output the
 | 
						|
                                 size of data returned.
 | 
						|
  @param  Buffer                 The buffer to return the results in
 | 
						|
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL   Buffer too small, required buffer size is
 | 
						|
                                 returned in BufferSize.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter
 | 
						|
  @retval EFI_SUCCESS            Successfully found the requested handle(s) and
 | 
						|
                                 returns them in Buffer.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreLocateHandle (
 | 
						|
  IN EFI_LOCATE_SEARCH_TYPE   SearchType,
 | 
						|
  IN EFI_GUID                 *Protocol   OPTIONAL,
 | 
						|
  IN VOID                     *SearchKey  OPTIONAL,
 | 
						|
  IN OUT UINTN                *BufferSize,
 | 
						|
  OUT EFI_HANDLE              *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Locates the handle to a device on the device path that best matches the specified protocol.
 | 
						|
 | 
						|
  @param  Protocol               The protocol to search for.
 | 
						|
  @param  DevicePath             On input, a pointer to a pointer to the device
 | 
						|
                                 path. On output, the device path pointer is
 | 
						|
                                 modified to point to the remaining part of the
 | 
						|
                                 devicepath.
 | 
						|
  @param  Device                 A pointer to the returned device handle.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The resulting handle was returned.
 | 
						|
  @retval EFI_NOT_FOUND          No handles matched the search.
 | 
						|
  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreLocateDevicePath (
 | 
						|
  IN EFI_GUID                       *Protocol,
 | 
						|
  IN OUT EFI_DEVICE_PATH_PROTOCOL   **DevicePath,
 | 
						|
  OUT EFI_HANDLE                    *Device
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Function returns an array of handles that support the requested protocol
 | 
						|
  in a buffer allocated from pool. This is a version of CoreLocateHandle()
 | 
						|
  that allocates a buffer for the caller.
 | 
						|
 | 
						|
  @param  SearchType             Specifies which handle(s) are to be returned.
 | 
						|
  @param  Protocol               Provides the protocol to search by.    This
 | 
						|
                                 parameter is only valid for SearchType
 | 
						|
                                 ByProtocol.
 | 
						|
  @param  SearchKey              Supplies the search key depending on the
 | 
						|
                                 SearchType.
 | 
						|
  @param  NumberHandles          The number of handles returned in Buffer.
 | 
						|
  @param  Buffer                 A pointer to the buffer to return the requested
 | 
						|
                                 array of  handles that support Protocol.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The result array of handles was returned.
 | 
						|
  @retval EFI_NOT_FOUND          No handles match the search.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   There is not enough pool memory to store the
 | 
						|
                                 matching results.
 | 
						|
  @retval EFI_INVALID_PARAMETER  One or more parameters are not valid.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreLocateHandleBuffer (
 | 
						|
  IN EFI_LOCATE_SEARCH_TYPE       SearchType,
 | 
						|
  IN EFI_GUID                     *Protocol OPTIONAL,
 | 
						|
  IN VOID                         *SearchKey OPTIONAL,
 | 
						|
  IN OUT UINTN                    *NumberHandles,
 | 
						|
  OUT EFI_HANDLE                  **Buffer
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Return the first Protocol Interface that matches the Protocol GUID. If
 | 
						|
  Registration is passed in, return a Protocol Instance that was just add
 | 
						|
  to the system. If Registration is NULL return the first Protocol Interface
 | 
						|
  you find.
 | 
						|
 | 
						|
  @param  Protocol               The protocol to search for
 | 
						|
  @param  Registration           Optional Registration Key returned from
 | 
						|
                                 RegisterProtocolNotify()
 | 
						|
  @param  Interface              Return the Protocol interface (instance).
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            If a valid Interface is returned
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter
 | 
						|
  @retval EFI_NOT_FOUND          Protocol interface not found
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreLocateProtocol (
 | 
						|
  IN  EFI_GUID  *Protocol,
 | 
						|
  IN  VOID      *Registration OPTIONAL,
 | 
						|
  OUT VOID      **Interface
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  return handle database key.
 | 
						|
 | 
						|
 | 
						|
  @return Handle database key.
 | 
						|
 | 
						|
**/
 | 
						|
UINT64
 | 
						|
CoreGetHandleDatabaseKey (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Go connect any handles that were created or modified while a image executed.
 | 
						|
 | 
						|
  @param  Key                    The Key to show that the handle has been
 | 
						|
                                 created/modified
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreConnectHandlesByKey (
 | 
						|
  UINT64  Key
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Connects one or more drivers to a controller.
 | 
						|
 | 
						|
  @param  ControllerHandle      The handle of the controller to which driver(s) are to be connected.
 | 
						|
  @param  DriverImageHandle     A pointer to an ordered list handles that support the
 | 
						|
                                EFI_DRIVER_BINDING_PROTOCOL.
 | 
						|
  @param  RemainingDevicePath   A pointer to the device path that specifies a child of the
 | 
						|
                                controller specified by ControllerHandle.
 | 
						|
  @param  Recursive             If TRUE, then ConnectController() is called recursively
 | 
						|
                                until the entire tree of controllers below the controller specified
 | 
						|
                                by ControllerHandle have been created. If FALSE, then
 | 
						|
                                the tree of controllers is only expanded one level.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           1) One or more drivers were connected to ControllerHandle.
 | 
						|
                                2) No drivers were connected to ControllerHandle, but
 | 
						|
                                RemainingDevicePath is not NULL, and it is an End Device
 | 
						|
                                Path Node.
 | 
						|
  @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
 | 
						|
  @retval EFI_NOT_FOUND         1) There are no EFI_DRIVER_BINDING_PROTOCOL instances
 | 
						|
                                present in the system.
 | 
						|
                                2) No drivers were connected to ControllerHandle.
 | 
						|
  @retval EFI_SECURITY_VIOLATION 
 | 
						|
                                The user has no permission to start UEFI device drivers on the device path 
 | 
						|
                                associated with the ControllerHandle or specified by the RemainingDevicePath.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreConnectController (
 | 
						|
  IN  EFI_HANDLE                ControllerHandle,
 | 
						|
  IN  EFI_HANDLE                *DriverImageHandle    OPTIONAL,
 | 
						|
  IN  EFI_DEVICE_PATH_PROTOCOL  *RemainingDevicePath  OPTIONAL,
 | 
						|
  IN  BOOLEAN                   Recursive
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Disonnects a controller from a driver
 | 
						|
 | 
						|
  @param  ControllerHandle                      ControllerHandle The handle of
 | 
						|
                                                the controller from which
 | 
						|
                                                driver(s)  are to be
 | 
						|
                                                disconnected.
 | 
						|
  @param  DriverImageHandle                     DriverImageHandle The driver to
 | 
						|
                                                disconnect from ControllerHandle.
 | 
						|
  @param  ChildHandle                           ChildHandle The handle of the
 | 
						|
                                                child to destroy.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS                           One or more drivers were
 | 
						|
                                                disconnected from the controller.
 | 
						|
  @retval EFI_SUCCESS                           On entry, no drivers are managing
 | 
						|
                                                ControllerHandle.
 | 
						|
  @retval EFI_SUCCESS                           DriverImageHandle is not NULL,
 | 
						|
                                                and on entry DriverImageHandle is
 | 
						|
                                                not managing ControllerHandle.
 | 
						|
  @retval EFI_INVALID_PARAMETER                 ControllerHandle is NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER                 DriverImageHandle is not NULL,
 | 
						|
                                                and it is not a valid EFI_HANDLE.
 | 
						|
  @retval EFI_INVALID_PARAMETER                 ChildHandle is not NULL, and it
 | 
						|
                                                is not a valid EFI_HANDLE.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES                  There are not enough resources
 | 
						|
                                                available to disconnect any
 | 
						|
                                                drivers from ControllerHandle.
 | 
						|
  @retval EFI_DEVICE_ERROR                      The controller could not be
 | 
						|
                                                disconnected because of a device
 | 
						|
                                                error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreDisconnectController (
 | 
						|
  IN  EFI_HANDLE  ControllerHandle,
 | 
						|
  IN  EFI_HANDLE  DriverImageHandle  OPTIONAL,
 | 
						|
  IN  EFI_HANDLE  ChildHandle        OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates pages from the memory map.
 | 
						|
 | 
						|
  @param  Type                   The type of allocation to perform
 | 
						|
  @param  MemoryType             The type of memory to turn the allocated pages
 | 
						|
                                 into
 | 
						|
  @param  NumberOfPages          The number of pages to allocate
 | 
						|
  @param  Memory                 A pointer to receive the base allocated memory
 | 
						|
                                 address
 | 
						|
 | 
						|
  @return Status. On success, Memory is filled in with the base address allocated
 | 
						|
  @retval EFI_INVALID_PARAMETER  Parameters violate checking rules defined in
 | 
						|
                                 spec.
 | 
						|
  @retval EFI_NOT_FOUND          Could not allocate pages match the requirement.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   No enough pages to allocate.
 | 
						|
  @retval EFI_SUCCESS            Pages successfully allocated.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreAllocatePages (
 | 
						|
  IN EFI_ALLOCATE_TYPE      Type,
 | 
						|
  IN EFI_MEMORY_TYPE        MemoryType,
 | 
						|
  IN UINTN                  NumberOfPages,
 | 
						|
  IN OUT EFI_PHYSICAL_ADDRESS  *Memory
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Frees previous allocated pages.
 | 
						|
 | 
						|
  @param  Memory                 Base address of memory being freed
 | 
						|
  @param  NumberOfPages          The number of pages to free
 | 
						|
 | 
						|
  @retval EFI_NOT_FOUND          Could not find the entry that covers the range
 | 
						|
  @retval EFI_INVALID_PARAMETER  Address not aligned
 | 
						|
  @return EFI_SUCCESS         -Pages successfully freed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreFreePages (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS   Memory,
 | 
						|
  IN UINTN                  NumberOfPages
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function returns a copy of the current memory map. The map is an array of
 | 
						|
  memory descriptors, each of which describes a contiguous block of memory.
 | 
						|
 | 
						|
  @param  MemoryMapSize          A pointer to the size, in bytes, of the
 | 
						|
                                 MemoryMap buffer. On input, this is the size of
 | 
						|
                                 the buffer allocated by the caller.  On output,
 | 
						|
                                 it is the size of the buffer returned by the
 | 
						|
                                 firmware  if the buffer was large enough, or the
 | 
						|
                                 size of the buffer needed  to contain the map if
 | 
						|
                                 the buffer was too small.
 | 
						|
  @param  MemoryMap              A pointer to the buffer in which firmware places
 | 
						|
                                 the current memory map.
 | 
						|
  @param  MapKey                 A pointer to the location in which firmware
 | 
						|
                                 returns the key for the current memory map.
 | 
						|
  @param  DescriptorSize         A pointer to the location in which firmware
 | 
						|
                                 returns the size, in bytes, of an individual
 | 
						|
                                 EFI_MEMORY_DESCRIPTOR.
 | 
						|
  @param  DescriptorVersion      A pointer to the location in which firmware
 | 
						|
                                 returns the version number associated with the
 | 
						|
                                 EFI_MEMORY_DESCRIPTOR.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The memory map was returned in the MemoryMap
 | 
						|
                                 buffer.
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL   The MemoryMap buffer was too small. The current
 | 
						|
                                 buffer size needed to hold the memory map is
 | 
						|
                                 returned in MemoryMapSize.
 | 
						|
  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreGetMemoryMap (
 | 
						|
  IN OUT UINTN                  *MemoryMapSize,
 | 
						|
  IN OUT EFI_MEMORY_DESCRIPTOR  *MemoryMap,
 | 
						|
  OUT UINTN                     *MapKey,
 | 
						|
  OUT UINTN                     *DescriptorSize,
 | 
						|
  OUT UINT32                    *DescriptorVersion
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Allocate pool of a particular type.
 | 
						|
 | 
						|
  @param  PoolType               Type of pool to allocate
 | 
						|
  @param  Size                   The amount of pool to allocate
 | 
						|
  @param  Buffer                 The address to return a pointer to the allocated
 | 
						|
                                 pool
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  PoolType not valid or Buffer is NULL
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Size exceeds max pool size or allocation failed.
 | 
						|
  @retval EFI_SUCCESS            Pool successfully allocated.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreAllocatePool (
 | 
						|
  IN EFI_MEMORY_TYPE  PoolType,
 | 
						|
  IN UINTN            Size,
 | 
						|
  OUT VOID            **Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocate pool of a particular type.
 | 
						|
 | 
						|
  @param  PoolType               Type of pool to allocate
 | 
						|
  @param  Size                   The amount of pool to allocate
 | 
						|
  @param  Buffer                 The address to return a pointer to the allocated
 | 
						|
                                 pool
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  PoolType not valid or Buffer is NULL
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Size exceeds max pool size or allocation failed.
 | 
						|
  @retval EFI_SUCCESS            Pool successfully allocated.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreInternalAllocatePool (
 | 
						|
  IN EFI_MEMORY_TYPE  PoolType,
 | 
						|
  IN UINTN            Size,
 | 
						|
  OUT VOID            **Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Frees pool.
 | 
						|
 | 
						|
  @param  Buffer                 The allocated pool entry to free
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Buffer is not a valid value.
 | 
						|
  @retval EFI_SUCCESS            Pool successfully freed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreFreePool (
 | 
						|
  IN VOID        *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Frees pool.
 | 
						|
 | 
						|
  @param  Buffer                 The allocated pool entry to free
 | 
						|
  @param  PoolType               Pointer to pool type
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Buffer is not a valid value.
 | 
						|
  @retval EFI_SUCCESS            Pool successfully freed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreInternalFreePool (
 | 
						|
  IN VOID               *Buffer,
 | 
						|
  OUT EFI_MEMORY_TYPE   *PoolType OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Loads an EFI image into memory and returns a handle to the image.
 | 
						|
 | 
						|
  @param  BootPolicy              If TRUE, indicates that the request originates
 | 
						|
                                  from the boot manager, and that the boot
 | 
						|
                                  manager is attempting to load FilePath as a
 | 
						|
                                  boot selection.
 | 
						|
  @param  ParentImageHandle       The caller's image handle.
 | 
						|
  @param  FilePath                The specific file path from which the image is
 | 
						|
                                  loaded.
 | 
						|
  @param  SourceBuffer            If not NULL, a pointer to the memory location
 | 
						|
                                  containing a copy of the image to be loaded.
 | 
						|
  @param  SourceSize              The size in bytes of SourceBuffer.
 | 
						|
  @param  ImageHandle             Pointer to the returned image handle that is
 | 
						|
                                  created when the image is successfully loaded.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The image was loaded into memory.
 | 
						|
  @retval EFI_NOT_FOUND           The FilePath was not found.
 | 
						|
  @retval EFI_INVALID_PARAMETER   One of the parameters has an invalid value.
 | 
						|
  @retval EFI_UNSUPPORTED         The image type is not supported, or the device
 | 
						|
                                  path cannot be parsed to locate the proper
 | 
						|
                                  protocol for loading the file.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Image was not loaded due to insufficient
 | 
						|
                                  resources.
 | 
						|
  @retval EFI_LOAD_ERROR          Image was not loaded because the image format was corrupt or not
 | 
						|
                                  understood.
 | 
						|
  @retval EFI_DEVICE_ERROR        Image was not loaded because the device returned a read error.
 | 
						|
  @retval EFI_ACCESS_DENIED       Image was not loaded because the platform policy prohibits the 
 | 
						|
                                  image from being loaded. NULL is returned in *ImageHandle.
 | 
						|
  @retval EFI_SECURITY_VIOLATION  Image was loaded and an ImageHandle was created with a 
 | 
						|
                                  valid EFI_LOADED_IMAGE_PROTOCOL. However, the current 
 | 
						|
                                  platform policy specifies that the image should not be started.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreLoadImage (
 | 
						|
  IN BOOLEAN                    BootPolicy,
 | 
						|
  IN EFI_HANDLE                 ParentImageHandle,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL   *FilePath,
 | 
						|
  IN VOID                       *SourceBuffer   OPTIONAL,
 | 
						|
  IN UINTN                      SourceSize,
 | 
						|
  OUT EFI_HANDLE                *ImageHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Unloads an image.
 | 
						|
 | 
						|
  @param  ImageHandle             Handle that identifies the image to be
 | 
						|
                                  unloaded.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The image has been unloaded.
 | 
						|
  @retval EFI_UNSUPPORTED         The image has been started, and does not support
 | 
						|
                                  unload.
 | 
						|
  @retval EFI_INVALID_PARAMPETER  ImageHandle is not a valid image handle.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreUnloadImage (
 | 
						|
  IN EFI_HANDLE  ImageHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Transfer control to a loaded image's entry point.
 | 
						|
 | 
						|
  @param  ImageHandle             Handle of image to be started.
 | 
						|
  @param  ExitDataSize            Pointer of the size to ExitData
 | 
						|
  @param  ExitData                Pointer to a pointer to a data buffer that
 | 
						|
                                  includes a Null-terminated string,
 | 
						|
                                  optionally followed by additional binary data.
 | 
						|
                                  The string is a description that the caller may
 | 
						|
                                  use to further indicate the reason for the
 | 
						|
                                  image's exit.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    No enough buffer to allocate
 | 
						|
  @retval EFI_SECURITY_VIOLATION  The current platform policy specifies that the image should not be started.
 | 
						|
  @retval EFI_SUCCESS             Successfully transfer control to the image's
 | 
						|
                                  entry point.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreStartImage (
 | 
						|
  IN EFI_HANDLE  ImageHandle,
 | 
						|
  OUT UINTN      *ExitDataSize,
 | 
						|
  OUT CHAR16     **ExitData  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Terminates the currently loaded EFI image and returns control to boot services.
 | 
						|
 | 
						|
  @param  ImageHandle             Handle that identifies the image. This
 | 
						|
                                  parameter is passed to the image on entry.
 | 
						|
  @param  Status                  The image's exit code.
 | 
						|
  @param  ExitDataSize            The size, in bytes, of ExitData. Ignored if
 | 
						|
                                  ExitStatus is EFI_SUCCESS.
 | 
						|
  @param  ExitData                Pointer to a data buffer that includes a
 | 
						|
                                  Null-terminated Unicode string, optionally
 | 
						|
                                  followed by additional binary data. The string
 | 
						|
                                  is a description that the caller may use to
 | 
						|
                                  further indicate the reason for the image's
 | 
						|
                                  exit.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER   Image handle is NULL or it is not current
 | 
						|
                                  image.
 | 
						|
  @retval EFI_SUCCESS             Successfully terminates the currently loaded
 | 
						|
                                  EFI image.
 | 
						|
  @retval EFI_ACCESS_DENIED       Should never reach there.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Could not allocate pool
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreExit (
 | 
						|
  IN EFI_HANDLE  ImageHandle,
 | 
						|
  IN EFI_STATUS  Status,
 | 
						|
  IN UINTN       ExitDataSize,
 | 
						|
  IN CHAR16      *ExitData  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Creates an event.
 | 
						|
 | 
						|
  @param  Type                   The type of event to create and its mode and
 | 
						|
                                 attributes
 | 
						|
  @param  NotifyTpl              The task priority level of event notifications
 | 
						|
  @param  NotifyFunction         Pointer to the events notification function
 | 
						|
  @param  NotifyContext          Pointer to the notification functions context;
 | 
						|
                                 corresponds to parameter "Context" in the
 | 
						|
                                 notification function
 | 
						|
  @param  Event                  Pointer to the newly created event if the call
 | 
						|
                                 succeeds; undefined otherwise
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The event structure was created
 | 
						|
  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   The event could not be allocated
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreCreateEvent (
 | 
						|
  IN UINT32                   Type,
 | 
						|
  IN EFI_TPL                  NotifyTpl,
 | 
						|
  IN EFI_EVENT_NOTIFY         NotifyFunction, OPTIONAL
 | 
						|
  IN VOID                     *NotifyContext, OPTIONAL
 | 
						|
  OUT EFI_EVENT               *Event
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Creates an event in a group.
 | 
						|
 | 
						|
  @param  Type                   The type of event to create and its mode and
 | 
						|
                                 attributes
 | 
						|
  @param  NotifyTpl              The task priority level of event notifications
 | 
						|
  @param  NotifyFunction         Pointer to the events notification function
 | 
						|
  @param  NotifyContext          Pointer to the notification functions context;
 | 
						|
                                 corresponds to parameter "Context" in the
 | 
						|
                                 notification function
 | 
						|
  @param  EventGroup             GUID for EventGroup if NULL act the same as
 | 
						|
                                 gBS->CreateEvent().
 | 
						|
  @param  Event                  Pointer to the newly created event if the call
 | 
						|
                                 succeeds; undefined otherwise
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The event structure was created
 | 
						|
  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   The event could not be allocated
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreCreateEventEx (
 | 
						|
  IN UINT32                   Type,
 | 
						|
  IN EFI_TPL                  NotifyTpl,
 | 
						|
  IN EFI_EVENT_NOTIFY         NotifyFunction, OPTIONAL
 | 
						|
  IN CONST VOID               *NotifyContext, OPTIONAL
 | 
						|
  IN CONST EFI_GUID           *EventGroup,    OPTIONAL
 | 
						|
  OUT EFI_EVENT               *Event
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Creates a general-purpose event structure
 | 
						|
 | 
						|
  @param  Type                   The type of event to create and its mode and
 | 
						|
                                 attributes
 | 
						|
  @param  NotifyTpl              The task priority level of event notifications
 | 
						|
  @param  NotifyFunction         Pointer to the events notification function
 | 
						|
  @param  NotifyContext          Pointer to the notification functions context;
 | 
						|
                                 corresponds to parameter "Context" in the
 | 
						|
                                 notification function
 | 
						|
  @param  EventGroup             GUID for EventGroup if NULL act the same as
 | 
						|
                                 gBS->CreateEvent().
 | 
						|
  @param  Event                  Pointer to the newly created event if the call
 | 
						|
                                 succeeds; undefined otherwise
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The event structure was created
 | 
						|
  @retval EFI_INVALID_PARAMETER  One of the parameters has an invalid value
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   The event could not be allocated
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreCreateEventInternal (
 | 
						|
  IN UINT32                   Type,
 | 
						|
  IN EFI_TPL                  NotifyTpl,
 | 
						|
  IN EFI_EVENT_NOTIFY         NotifyFunction, OPTIONAL
 | 
						|
  IN CONST VOID               *NotifyContext, OPTIONAL
 | 
						|
  IN CONST EFI_GUID           *EventGroup,    OPTIONAL
 | 
						|
  OUT EFI_EVENT               *Event
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Sets the type of timer and the trigger time for a timer event.
 | 
						|
 | 
						|
  @param  UserEvent              The timer event that is to be signaled at the
 | 
						|
                                 specified time
 | 
						|
  @param  Type                   The type of time that is specified in
 | 
						|
                                 TriggerTime
 | 
						|
  @param  TriggerTime            The number of 100ns units until the timer
 | 
						|
                                 expires
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The event has been set to be signaled at the
 | 
						|
                                 requested time
 | 
						|
  @retval EFI_INVALID_PARAMETER  Event or Type is not valid
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreSetTimer (
 | 
						|
  IN EFI_EVENT            UserEvent,
 | 
						|
  IN EFI_TIMER_DELAY      Type,
 | 
						|
  IN UINT64               TriggerTime
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Signals the event.  Queues the event to be notified if needed.
 | 
						|
 | 
						|
  @param  UserEvent              The event to signal .
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Parameters are not valid.
 | 
						|
  @retval EFI_SUCCESS            The event was signaled.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreSignalEvent (
 | 
						|
  IN EFI_EVENT    UserEvent
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Stops execution until an event is signaled.
 | 
						|
 | 
						|
  @param  NumberOfEvents         The number of events in the UserEvents array
 | 
						|
  @param  UserEvents             An array of EFI_EVENT
 | 
						|
  @param  UserIndex              Pointer to the index of the event which
 | 
						|
                                 satisfied the wait condition
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The event indicated by Index was signaled.
 | 
						|
  @retval EFI_INVALID_PARAMETER  The event indicated by Index has a notification
 | 
						|
                                 function or Event was not a valid type
 | 
						|
  @retval EFI_UNSUPPORTED        The current TPL is not TPL_APPLICATION
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreWaitForEvent (
 | 
						|
  IN UINTN        NumberOfEvents,
 | 
						|
  IN EFI_EVENT    *UserEvents,
 | 
						|
  OUT UINTN       *UserIndex
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Closes an event and frees the event structure.
 | 
						|
 | 
						|
  @param  UserEvent              Event to close
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Parameters are not valid.
 | 
						|
  @retval EFI_SUCCESS            The event has been closed
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreCloseEvent (
 | 
						|
  IN EFI_EVENT    UserEvent
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Check the status of an event.
 | 
						|
 | 
						|
  @param  UserEvent              The event to check
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The event is in the signaled state
 | 
						|
  @retval EFI_NOT_READY          The event is not in the signaled state
 | 
						|
  @retval EFI_INVALID_PARAMETER  Event is of type EVT_NOTIFY_SIGNAL
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreCheckEvent (
 | 
						|
  IN EFI_EVENT        UserEvent
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Adds reserved memory, system memory, or memory-mapped I/O resources to the
 | 
						|
  global coherency domain of the processor.
 | 
						|
 | 
						|
  @param  GcdMemoryType          Memory type of the memory space.
 | 
						|
  @param  BaseAddress            Base address of the memory space.
 | 
						|
  @param  Length                 Length of the memory space.
 | 
						|
  @param  Capabilities           alterable attributes of the memory space.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Merged this memory space into GCD map.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreAddMemorySpace (
 | 
						|
  IN EFI_GCD_MEMORY_TYPE   GcdMemoryType,
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  BaseAddress,
 | 
						|
  IN UINT64                Length,
 | 
						|
  IN UINT64                Capabilities
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates nonexistent memory, reserved memory, system memory, or memorymapped
 | 
						|
  I/O resources from the global coherency domain of the processor.
 | 
						|
 | 
						|
  @param  GcdAllocateType        The type of allocate operation
 | 
						|
  @param  GcdMemoryType          The desired memory type
 | 
						|
  @param  Alignment              Align with 2^Alignment
 | 
						|
  @param  Length                 Length to allocate
 | 
						|
  @param  BaseAddress            Base address to allocate
 | 
						|
  @param  ImageHandle            The image handle consume the allocated space.
 | 
						|
  @param  DeviceHandle           The device handle consume the allocated space.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter.
 | 
						|
  @retval EFI_NOT_FOUND          No descriptor contains the desired space.
 | 
						|
  @retval EFI_SUCCESS            Memory space successfully allocated.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreAllocateMemorySpace (
 | 
						|
  IN     EFI_GCD_ALLOCATE_TYPE  GcdAllocateType,
 | 
						|
  IN     EFI_GCD_MEMORY_TYPE    GcdMemoryType,
 | 
						|
  IN     UINTN                  Alignment,
 | 
						|
  IN     UINT64                 Length,
 | 
						|
  IN OUT EFI_PHYSICAL_ADDRESS   *BaseAddress,
 | 
						|
  IN     EFI_HANDLE             ImageHandle,
 | 
						|
  IN     EFI_HANDLE             DeviceHandle OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Frees nonexistent memory, reserved memory, system memory, or memory-mapped
 | 
						|
  I/O resources from the global coherency domain of the processor.
 | 
						|
 | 
						|
  @param  BaseAddress            Base address of the memory space.
 | 
						|
  @param  Length                 Length of the memory space.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Space successfully freed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreFreeMemorySpace (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  BaseAddress,
 | 
						|
  IN UINT64                Length
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Removes reserved memory, system memory, or memory-mapped I/O resources from
 | 
						|
  the global coherency domain of the processor.
 | 
						|
 | 
						|
  @param  BaseAddress            Base address of the memory space.
 | 
						|
  @param  Length                 Length of the memory space.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Successfully remove a segment of memory space.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreRemoveMemorySpace (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  BaseAddress,
 | 
						|
  IN UINT64                Length
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieves the descriptor for a memory region containing a specified address.
 | 
						|
 | 
						|
  @param  BaseAddress            Specified start address
 | 
						|
  @param  Descriptor             Specified length
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter
 | 
						|
  @retval EFI_SUCCESS            Successfully get memory space descriptor.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreGetMemorySpaceDescriptor (
 | 
						|
  IN  EFI_PHYSICAL_ADDRESS             BaseAddress,
 | 
						|
  OUT EFI_GCD_MEMORY_SPACE_DESCRIPTOR  *Descriptor
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Modifies the attributes for a memory region in the global coherency domain of the
 | 
						|
  processor.
 | 
						|
 | 
						|
  @param  BaseAddress            Specified start address
 | 
						|
  @param  Length                 Specified length
 | 
						|
  @param  Attributes             Specified attributes
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The attributes were set for the memory region.
 | 
						|
  @retval EFI_INVALID_PARAMETER Length is zero. 
 | 
						|
  @retval EFI_UNSUPPORTED       The processor does not support one or more bytes of the memory
 | 
						|
                                resource range specified by BaseAddress and Length.
 | 
						|
  @retval EFI_UNSUPPORTED       The bit mask of attributes is not support for the memory resource
 | 
						|
                                range specified by BaseAddress and Length.
 | 
						|
  @retval EFI_ACCESS_DENIED     The attributes for the memory resource range specified by
 | 
						|
                                BaseAddress and Length cannot be modified.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  There are not enough system resources to modify the attributes of
 | 
						|
                                the memory resource range.
 | 
						|
  @retval EFI_NOT_AVAILABLE_YET The attributes cannot be set because CPU architectural protocol is
 | 
						|
                                not available yet.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreSetMemorySpaceAttributes (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  BaseAddress,
 | 
						|
  IN UINT64                Length,
 | 
						|
  IN UINT64                Attributes
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Modifies the capabilities for a memory region in the global coherency domain of the
 | 
						|
  processor.
 | 
						|
 | 
						|
  @param  BaseAddress      The physical address that is the start address of a memory region.
 | 
						|
  @param  Length           The size in bytes of the memory region.
 | 
						|
  @param  Capabilities     The bit mask of capabilities that the memory region supports.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The capabilities were set for the memory region.
 | 
						|
  @retval EFI_INVALID_PARAMETER Length is zero.
 | 
						|
  @retval EFI_UNSUPPORTED       The capabilities specified by Capabilities do not include the
 | 
						|
                                memory region attributes currently in use.
 | 
						|
  @retval EFI_ACCESS_DENIED     The capabilities for the memory resource range specified by
 | 
						|
                                BaseAddress and Length cannot be modified.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  There are not enough system resources to modify the capabilities
 | 
						|
                                of the memory resource range.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreSetMemorySpaceCapabilities (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  BaseAddress,
 | 
						|
  IN UINT64                Length,
 | 
						|
  IN UINT64                Capabilities
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Returns a map of the memory resources in the global coherency domain of the
 | 
						|
  processor.
 | 
						|
 | 
						|
  @param  NumberOfDescriptors    Number of descriptors.
 | 
						|
  @param  MemorySpaceMap         Descriptor array
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   No enough buffer to allocate
 | 
						|
  @retval EFI_SUCCESS            Successfully get memory space map.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreGetMemorySpaceMap (
 | 
						|
  OUT UINTN                            *NumberOfDescriptors,
 | 
						|
  OUT EFI_GCD_MEMORY_SPACE_DESCRIPTOR  **MemorySpaceMap
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Adds reserved I/O or I/O resources to the global coherency domain of the processor.
 | 
						|
 | 
						|
  @param  GcdIoType              IO type of the segment.
 | 
						|
  @param  BaseAddress            Base address of the segment.
 | 
						|
  @param  Length                 Length of the segment.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Merged this segment into GCD map.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Parameter not valid
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreAddIoSpace (
 | 
						|
  IN EFI_GCD_IO_TYPE       GcdIoType,
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  BaseAddress,
 | 
						|
  IN UINT64                Length
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates nonexistent I/O, reserved I/O, or I/O resources from the global coherency
 | 
						|
  domain of the processor.
 | 
						|
 | 
						|
  @param  GcdAllocateType        The type of allocate operation
 | 
						|
  @param  GcdIoType              The desired IO type
 | 
						|
  @param  Alignment              Align with 2^Alignment
 | 
						|
  @param  Length                 Length to allocate
 | 
						|
  @param  BaseAddress            Base address to allocate
 | 
						|
  @param  ImageHandle            The image handle consume the allocated space.
 | 
						|
  @param  DeviceHandle           The device handle consume the allocated space.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter.
 | 
						|
  @retval EFI_NOT_FOUND          No descriptor contains the desired space.
 | 
						|
  @retval EFI_SUCCESS            IO space successfully allocated.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreAllocateIoSpace (
 | 
						|
  IN     EFI_GCD_ALLOCATE_TYPE  GcdAllocateType,
 | 
						|
  IN     EFI_GCD_IO_TYPE        GcdIoType,
 | 
						|
  IN     UINTN                  Alignment,
 | 
						|
  IN     UINT64                 Length,
 | 
						|
  IN OUT EFI_PHYSICAL_ADDRESS   *BaseAddress,
 | 
						|
  IN     EFI_HANDLE             ImageHandle,
 | 
						|
  IN     EFI_HANDLE             DeviceHandle OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Frees nonexistent I/O, reserved I/O, or I/O resources from the global coherency
 | 
						|
  domain of the processor.
 | 
						|
 | 
						|
  @param  BaseAddress            Base address of the segment.
 | 
						|
  @param  Length                 Length of the segment.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Space successfully freed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreFreeIoSpace (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  BaseAddress,
 | 
						|
  IN UINT64                Length
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Removes reserved I/O or I/O resources from the global coherency domain of the
 | 
						|
  processor.
 | 
						|
 | 
						|
  @param  BaseAddress            Base address of the segment.
 | 
						|
  @param  Length                 Length of the segment.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Successfully removed a segment of IO space.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreRemoveIoSpace (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  BaseAddress,
 | 
						|
  IN UINT64                Length
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieves the descriptor for an I/O region containing a specified address.
 | 
						|
 | 
						|
  @param  BaseAddress            Specified start address
 | 
						|
  @param  Descriptor             Specified length
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Descriptor is NULL.
 | 
						|
  @retval EFI_SUCCESS            Successfully get the IO space descriptor.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreGetIoSpaceDescriptor (
 | 
						|
  IN  EFI_PHYSICAL_ADDRESS         BaseAddress,
 | 
						|
  OUT EFI_GCD_IO_SPACE_DESCRIPTOR  *Descriptor
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Returns a map of the I/O resources in the global coherency domain of the processor.
 | 
						|
 | 
						|
  @param  NumberOfDescriptors    Number of descriptors.
 | 
						|
  @param  IoSpaceMap             Descriptor array
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Invalid parameter
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   No enough buffer to allocate
 | 
						|
  @retval EFI_SUCCESS            Successfully get IO space map.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreGetIoSpaceMap (
 | 
						|
  OUT UINTN                        *NumberOfDescriptors,
 | 
						|
  OUT EFI_GCD_IO_SPACE_DESCRIPTOR  **IoSpaceMap
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This is the main Dispatcher for DXE and it exits when there are no more
 | 
						|
  drivers to run. Drain the mScheduledQueue and load and start a PE
 | 
						|
  image for each driver. Search the mDiscoveredList to see if any driver can
 | 
						|
  be placed on the mScheduledQueue. If no drivers are placed on the
 | 
						|
  mScheduledQueue exit the function. On exit it is assumed the Bds()
 | 
						|
  will be called, and when the Bds() exits the Dispatcher will be called
 | 
						|
  again.
 | 
						|
 | 
						|
  @retval EFI_ALREADY_STARTED   The DXE Dispatcher is already running
 | 
						|
  @retval EFI_NOT_FOUND         No DXE Drivers were dispatched
 | 
						|
  @retval EFI_SUCCESS           One or more DXE Drivers were dispatched
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreDispatcher (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Check every driver and locate a matching one. If the driver is found, the Unrequested
 | 
						|
  state flag is cleared.
 | 
						|
 | 
						|
  @param  FirmwareVolumeHandle  The handle of the Firmware Volume that contains
 | 
						|
                                the firmware  file specified by DriverName.
 | 
						|
  @param  DriverName            The Driver name to put in the Dependent state.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The DriverName was found and it's SOR bit was
 | 
						|
                                cleared
 | 
						|
  @retval EFI_NOT_FOUND         The DriverName does not exist or it's SOR bit was
 | 
						|
                                not set.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreSchedule (
 | 
						|
  IN  EFI_HANDLE  FirmwareVolumeHandle,
 | 
						|
  IN  EFI_GUID    *DriverName
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Convert a driver from the Untrused back to the Scheduled state.
 | 
						|
 | 
						|
  @param  FirmwareVolumeHandle  The handle of the Firmware Volume that contains
 | 
						|
                                the firmware  file specified by DriverName.
 | 
						|
  @param  DriverName            The Driver name to put in the Scheduled state
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The file was found in the untrusted state, and it
 | 
						|
                                was promoted  to the trusted state.
 | 
						|
  @retval EFI_NOT_FOUND         The file was not found in the untrusted state.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreTrust (
 | 
						|
  IN  EFI_HANDLE  FirmwareVolumeHandle,
 | 
						|
  IN  EFI_GUID    *DriverName
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This routine is the driver initialization entry point.  It initializes the
 | 
						|
  libraries, and registers two notification functions.  These notification
 | 
						|
  functions are responsible for building the FV stack dynamically.
 | 
						|
 | 
						|
  @param  ImageHandle           The image handle.
 | 
						|
  @param  SystemTable           The system table.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Function successfully returned.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FwVolDriverInit (
 | 
						|
  IN EFI_HANDLE                   ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE             *SystemTable
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Entry point of the section extraction code. Initializes an instance of the
 | 
						|
  section extraction interface and installs it on a new handle.
 | 
						|
 | 
						|
  @param  ImageHandle   A handle for the image that is initializing this driver
 | 
						|
  @param  SystemTable   A pointer to the EFI system table
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Driver initialized successfully
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Could not allocate needed resources
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
InitializeSectionExtraction (
 | 
						|
  IN EFI_HANDLE                   ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE             *SystemTable
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This DXE service routine is used to process a firmware volume. In
 | 
						|
  particular, it can be called by BDS to process a single firmware
 | 
						|
  volume found in a capsule.
 | 
						|
 | 
						|
  @param  FvHeader               pointer to a firmware volume header
 | 
						|
  @param  Size                   the size of the buffer pointed to by FvHeader
 | 
						|
  @param  FVProtocolHandle       the handle on which a firmware volume protocol
 | 
						|
                                 was produced for the firmware volume passed in.
 | 
						|
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   if an FVB could not be produced due to lack of
 | 
						|
                                 system resources
 | 
						|
  @retval EFI_VOLUME_CORRUPTED   if the volume was corrupted
 | 
						|
  @retval EFI_SUCCESS            a firmware volume protocol was produced for the
 | 
						|
                                 firmware volume
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreProcessFirmwareVolume (
 | 
						|
  IN VOID                             *FvHeader,
 | 
						|
  IN UINTN                            Size,
 | 
						|
  OUT EFI_HANDLE                      *FVProtocolHandle
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
//Functions used during debug buils
 | 
						|
//
 | 
						|
 | 
						|
/**
 | 
						|
  Displays Architectural protocols that were not loaded and are required for DXE
 | 
						|
  core to function.  Only used in Debug Builds.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreDisplayMissingArchProtocols (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Traverse the discovered list for any drivers that were discovered but not loaded
 | 
						|
  because the dependency experessions evaluated to false.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreDisplayDiscoveredNotDispatched (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Place holder function until all the Boot Services and Runtime Services are
 | 
						|
  available.
 | 
						|
 | 
						|
  @return EFI_NOT_AVAILABLE_YET
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreEfiNotAvailableYetArg0 (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Place holder function until all the Boot Services and Runtime Services are
 | 
						|
  available.
 | 
						|
 | 
						|
  @param  Arg1                   Undefined
 | 
						|
 | 
						|
  @return EFI_NOT_AVAILABLE_YET
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreEfiNotAvailableYetArg1 (
 | 
						|
  UINTN Arg1
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Place holder function until all the Boot Services and Runtime Services are available.
 | 
						|
 | 
						|
  @param  Arg1                   Undefined
 | 
						|
  @param  Arg2                   Undefined
 | 
						|
 | 
						|
  @return EFI_NOT_AVAILABLE_YET
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreEfiNotAvailableYetArg2 (
 | 
						|
  UINTN Arg1,
 | 
						|
  UINTN Arg2
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Place holder function until all the Boot Services and Runtime Services are available.
 | 
						|
 | 
						|
  @param  Arg1                   Undefined
 | 
						|
  @param  Arg2                   Undefined
 | 
						|
  @param  Arg3                   Undefined
 | 
						|
 | 
						|
  @return EFI_NOT_AVAILABLE_YET
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreEfiNotAvailableYetArg3 (
 | 
						|
  UINTN Arg1,
 | 
						|
  UINTN Arg2,
 | 
						|
  UINTN Arg3
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Place holder function until all the Boot Services and Runtime Services are available.
 | 
						|
 | 
						|
  @param  Arg1                   Undefined
 | 
						|
  @param  Arg2                   Undefined
 | 
						|
  @param  Arg3                   Undefined
 | 
						|
  @param  Arg4                   Undefined
 | 
						|
 | 
						|
  @return EFI_NOT_AVAILABLE_YET
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreEfiNotAvailableYetArg4 (
 | 
						|
  UINTN Arg1,
 | 
						|
  UINTN Arg2,
 | 
						|
  UINTN Arg3,
 | 
						|
  UINTN Arg4
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Place holder function until all the Boot Services and Runtime Services are available.
 | 
						|
 | 
						|
  @param  Arg1                   Undefined
 | 
						|
  @param  Arg2                   Undefined
 | 
						|
  @param  Arg3                   Undefined
 | 
						|
  @param  Arg4                   Undefined
 | 
						|
  @param  Arg5                   Undefined
 | 
						|
 | 
						|
  @return EFI_NOT_AVAILABLE_YET
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreEfiNotAvailableYetArg5 (
 | 
						|
  UINTN Arg1,
 | 
						|
  UINTN Arg2,
 | 
						|
  UINTN Arg3,
 | 
						|
  UINTN Arg4,
 | 
						|
  UINTN Arg5
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Given a compressed source buffer, this function retrieves the size of the
 | 
						|
  uncompressed buffer and the size of the scratch buffer required to decompress
 | 
						|
  the compressed source buffer.
 | 
						|
 | 
						|
  The GetInfo() function retrieves the size of the uncompressed buffer and the
 | 
						|
  temporary scratch buffer required to decompress the buffer specified by Source
 | 
						|
  and SourceSize. If the size of the uncompressed buffer or the size of the
 | 
						|
  scratch buffer cannot be determined from the compressed data specified by
 | 
						|
  Source and SourceData, then EFI_INVALID_PARAMETER is returned. Otherwise, the
 | 
						|
  size of the uncompressed buffer is returned in DestinationSize, the size of
 | 
						|
  the scratch buffer is returned in ScratchSize, and EFI_SUCCESS is returned.
 | 
						|
  The GetInfo() function does not have scratch buffer available to perform a
 | 
						|
  thorough checking of the validity of the source data. It just retrieves the
 | 
						|
  "Original Size" field from the beginning bytes of the source data and output
 | 
						|
  it as DestinationSize. And ScratchSize is specific to the decompression
 | 
						|
  implementation.
 | 
						|
 | 
						|
  @param  This               A pointer to the EFI_DECOMPRESS_PROTOCOL instance.
 | 
						|
  @param  Source             The source buffer containing the compressed data.
 | 
						|
  @param  SourceSize         The size, in bytes, of the source buffer.
 | 
						|
  @param  DestinationSize    A pointer to the size, in bytes, of the
 | 
						|
                             uncompressed buffer that will be generated when the
 | 
						|
                             compressed buffer specified by Source and
 | 
						|
                             SourceSize is decompressed.
 | 
						|
  @param  ScratchSize        A pointer to the size, in bytes, of the scratch
 | 
						|
                             buffer that is required to decompress the
 | 
						|
                             compressed buffer specified by Source and
 | 
						|
                             SourceSize.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS        The size of the uncompressed data was returned in
 | 
						|
                             DestinationSize and the size of the scratch buffer
 | 
						|
                             was returned in ScratchSize.
 | 
						|
  @retval EFI_INVALID_PARAMETER The size of the uncompressed data or the size of
 | 
						|
                                the scratch buffer cannot be determined from the
 | 
						|
                                compressed data specified by Source and
 | 
						|
                                SourceSize.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DxeMainUefiDecompressGetInfo (
 | 
						|
  IN EFI_DECOMPRESS_PROTOCOL            *This,
 | 
						|
  IN   VOID                             *Source,
 | 
						|
  IN   UINT32                           SourceSize,
 | 
						|
  OUT  UINT32                           *DestinationSize,
 | 
						|
  OUT  UINT32                           *ScratchSize
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Decompresses a compressed source buffer.
 | 
						|
 | 
						|
  The Decompress() function extracts decompressed data to its original form.
 | 
						|
  This protocol is designed so that the decompression algorithm can be
 | 
						|
  implemented without using any memory services. As a result, the Decompress()
 | 
						|
  Function is not allowed to call AllocatePool() or AllocatePages() in its
 | 
						|
  implementation. It is the caller's responsibility to allocate and free the
 | 
						|
  Destination and Scratch buffers.
 | 
						|
  If the compressed source data specified by Source and SourceSize is
 | 
						|
  sucessfully decompressed into Destination, then EFI_SUCCESS is returned. If
 | 
						|
  the compressed source data specified by Source and SourceSize is not in a
 | 
						|
  valid compressed data format, then EFI_INVALID_PARAMETER is returned.
 | 
						|
 | 
						|
  @param  This                A pointer to the EFI_DECOMPRESS_PROTOCOL instance.
 | 
						|
  @param  Source              The source buffer containing the compressed data.
 | 
						|
  @param  SourceSize          SourceSizeThe size of source data.
 | 
						|
  @param  Destination         On output, the destination buffer that contains
 | 
						|
                              the uncompressed data.
 | 
						|
  @param  DestinationSize     The size of the destination buffer.  The size of
 | 
						|
                              the destination buffer needed is obtained from
 | 
						|
                              EFI_DECOMPRESS_PROTOCOL.GetInfo().
 | 
						|
  @param  Scratch             A temporary scratch buffer that is used to perform
 | 
						|
                              the decompression.
 | 
						|
  @param  ScratchSize         The size of scratch buffer. The size of the
 | 
						|
                              scratch buffer needed is obtained from GetInfo().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS         Decompression completed successfully, and the
 | 
						|
                              uncompressed buffer is returned in Destination.
 | 
						|
  @retval EFI_INVALID_PARAMETER  The source buffer specified by Source and
 | 
						|
                                 SourceSize is corrupted (not in a valid
 | 
						|
                                 compressed format).
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DxeMainUefiDecompress (
 | 
						|
  IN     EFI_DECOMPRESS_PROTOCOL          *This,
 | 
						|
  IN     VOID                             *Source,
 | 
						|
  IN     UINT32                           SourceSize,
 | 
						|
  IN OUT VOID                             *Destination,
 | 
						|
  IN     UINT32                           DestinationSize,
 | 
						|
  IN OUT VOID                             *Scratch,
 | 
						|
  IN     UINT32                           ScratchSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  SEP member function.  This function creates and returns a new section stream
 | 
						|
  handle to represent the new section stream.
 | 
						|
 | 
						|
  @param  SectionStreamLength    Size in bytes of the section stream.
 | 
						|
  @param  SectionStream          Buffer containing the new section stream.
 | 
						|
  @param  SectionStreamHandle    A pointer to a caller allocated UINTN that on
 | 
						|
                                 output contains the new section stream handle.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The section stream is created successfully.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   memory allocation failed.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Section stream does not end concident with end
 | 
						|
                                 of last section.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
OpenSectionStream (
 | 
						|
  IN     UINTN                                     SectionStreamLength,
 | 
						|
  IN     VOID                                      *SectionStream,
 | 
						|
     OUT UINTN                                     *SectionStreamHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  SEP member function.  Retrieves requested section from section stream.
 | 
						|
 | 
						|
  @param  SectionStreamHandle   The section stream from which to extract the
 | 
						|
                                requested section.
 | 
						|
  @param  SectionType           A pointer to the type of section to search for.
 | 
						|
  @param  SectionDefinitionGuid If the section type is EFI_SECTION_GUID_DEFINED,
 | 
						|
                                then SectionDefinitionGuid indicates which of
 | 
						|
                                these types of sections to search for.
 | 
						|
  @param  SectionInstance       Indicates which instance of the requested
 | 
						|
                                section to return.
 | 
						|
  @param  Buffer                Double indirection to buffer.  If *Buffer is
 | 
						|
                                non-null on input, then the buffer is caller
 | 
						|
                                allocated.  If Buffer is NULL, then the buffer
 | 
						|
                                is callee allocated.  In either case, the
 | 
						|
                                required buffer size is returned in *BufferSize.
 | 
						|
  @param  BufferSize            On input, indicates the size of *Buffer if
 | 
						|
                                *Buffer is non-null on input.  On output,
 | 
						|
                                indicates the required size (allocated size if
 | 
						|
                                callee allocated) of *Buffer.
 | 
						|
  @param  AuthenticationStatus  A pointer to a caller-allocated UINT32 that
 | 
						|
                                indicates the authentication status of the
 | 
						|
                                output buffer. If the input section's
 | 
						|
                                GuidedSectionHeader.Attributes field
 | 
						|
                                has the EFI_GUIDED_SECTION_AUTH_STATUS_VALID
 | 
						|
                                bit as clear, AuthenticationStatus must return
 | 
						|
                                zero. Both local bits (19:16) and aggregate
 | 
						|
                                bits (3:0) in AuthenticationStatus are returned
 | 
						|
                                by ExtractSection(). These bits reflect the
 | 
						|
                                status of the extraction operation. The bit
 | 
						|
                                pattern in both regions must be the same, as
 | 
						|
                                the local and aggregate authentication statuses
 | 
						|
                                have equivalent meaning at this level. If the
 | 
						|
                                function returns anything other than
 | 
						|
                                EFI_SUCCESS, the value of *AuthenticationStatus
 | 
						|
                                is undefined.
 | 
						|
  @param  IsFfs3Fv              Indicates the FV format.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Section was retrieved successfully
 | 
						|
  @retval EFI_PROTOCOL_ERROR    A GUID defined section was encountered in the
 | 
						|
                                section stream with its
 | 
						|
                                EFI_GUIDED_SECTION_PROCESSING_REQUIRED bit set,
 | 
						|
                                but there was no corresponding GUIDed Section
 | 
						|
                                Extraction Protocol in the handle database.
 | 
						|
                                *Buffer is unmodified.
 | 
						|
  @retval EFI_NOT_FOUND         An error was encountered when parsing the
 | 
						|
                                SectionStream.  This indicates the SectionStream
 | 
						|
                                is not correctly formatted.
 | 
						|
  @retval EFI_NOT_FOUND         The requested section does not exist.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The system has insufficient resources to process
 | 
						|
                                the request.
 | 
						|
  @retval EFI_INVALID_PARAMETER The SectionStreamHandle does not exist.
 | 
						|
  @retval EFI_WARN_TOO_SMALL    The size of the caller allocated input buffer is
 | 
						|
                                insufficient to contain the requested section.
 | 
						|
                                The input buffer is filled and section contents
 | 
						|
                                are truncated.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
GetSection (
 | 
						|
  IN UINTN                                              SectionStreamHandle,
 | 
						|
  IN EFI_SECTION_TYPE                                   *SectionType,
 | 
						|
  IN EFI_GUID                                           *SectionDefinitionGuid,
 | 
						|
  IN UINTN                                              SectionInstance,
 | 
						|
  IN VOID                                               **Buffer,
 | 
						|
  IN OUT UINTN                                          *BufferSize,
 | 
						|
  OUT UINT32                                            *AuthenticationStatus,
 | 
						|
  IN BOOLEAN                                            IsFfs3Fv
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  SEP member function.  Deletes an existing section stream
 | 
						|
 | 
						|
  @param  StreamHandleToClose    Indicates the stream to close
 | 
						|
  @param  FreeStreamBuffer       TRUE - Need to free stream buffer;
 | 
						|
                                 FALSE - No need to free stream buffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The section stream is closed sucessfully.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Memory allocation failed.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Section stream does not end concident with end
 | 
						|
                                 of last section.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CloseSectionStream (
 | 
						|
  IN  UINTN                                     StreamHandleToClose,
 | 
						|
  IN  BOOLEAN                                   FreeStreamBuffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Creates and initializes the DebugImageInfo Table.  Also creates the configuration
 | 
						|
  table and registers it into the system table.
 | 
						|
 | 
						|
  Note:
 | 
						|
    This function allocates memory, frees it, and then allocates memory at an
 | 
						|
    address within the initial allocation. Since this function is called early
 | 
						|
    in DXE core initialization (before drivers are dispatched), this should not
 | 
						|
    be a problem.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreInitializeDebugImageInfoTable (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Update the CRC32 in the Debug Table.
 | 
						|
  Since the CRC32 service is made available by the Runtime driver, we have to
 | 
						|
  wait for the Runtime Driver to be installed before the CRC32 can be computed.
 | 
						|
  This function is called elsewhere by the core when the runtime architectural
 | 
						|
  protocol is produced.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreUpdateDebugTableCrc32 (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Adds a new DebugImageInfo structure to the DebugImageInfo Table.  Re-Allocates
 | 
						|
  the table if it's not large enough to accomidate another entry.
 | 
						|
 | 
						|
  @param  ImageInfoType  type of debug image information
 | 
						|
  @param  LoadedImage    pointer to the loaded image protocol for the image being
 | 
						|
                         loaded
 | 
						|
  @param  ImageHandle    image handle for the image being loaded
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreNewDebugImageInfoEntry (
 | 
						|
  IN  UINT32                      ImageInfoType,
 | 
						|
  IN  EFI_LOADED_IMAGE_PROTOCOL   *LoadedImage,
 | 
						|
  IN  EFI_HANDLE                  ImageHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Removes and frees an entry from the DebugImageInfo Table.
 | 
						|
 | 
						|
  @param  ImageHandle    image handle for the image being unloaded
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreRemoveDebugImageInfoEntry (
 | 
						|
  EFI_HANDLE ImageHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This routine consumes FV hobs and produces instances of FW_VOL_BLOCK_PROTOCOL as appropriate.
 | 
						|
 | 
						|
  @param  ImageHandle            The image handle.
 | 
						|
  @param  SystemTable            The system table.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Successfully initialized firmware volume block
 | 
						|
                                 driver.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
FwVolBlockDriverInit (
 | 
						|
  IN EFI_HANDLE                 ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE           *SystemTable
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Get FVB authentication status
 | 
						|
 | 
						|
  @param FvbProtocol    FVB protocol.
 | 
						|
 | 
						|
  @return Authentication status.
 | 
						|
 | 
						|
**/
 | 
						|
UINT32
 | 
						|
GetFvbAuthenticationStatus (
 | 
						|
  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *FvbProtocol
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This routine produces a firmware volume block protocol on a given
 | 
						|
  buffer.
 | 
						|
 | 
						|
  @param  BaseAddress            base address of the firmware volume image
 | 
						|
  @param  Length                 length of the firmware volume image
 | 
						|
  @param  ParentHandle           handle of parent firmware volume, if this image
 | 
						|
                                 came from an FV image file and section in another firmware
 | 
						|
                                 volume (ala capsules)
 | 
						|
  @param  AuthenticationStatus   Authentication status inherited, if this image
 | 
						|
                                 came from an FV image file and section in another firmware volume.
 | 
						|
  @param  FvProtocol             Firmware volume block protocol produced.
 | 
						|
 | 
						|
  @retval EFI_VOLUME_CORRUPTED   Volume corrupted.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   No enough buffer to be allocated.
 | 
						|
  @retval EFI_SUCCESS            Successfully produced a FVB protocol on given
 | 
						|
                                 buffer.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
ProduceFVBProtocolOnBuffer (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS   BaseAddress,
 | 
						|
  IN UINT64                 Length,
 | 
						|
  IN EFI_HANDLE             ParentHandle,
 | 
						|
  IN UINT32                 AuthenticationStatus,
 | 
						|
  OUT EFI_HANDLE            *FvProtocol  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Raising to the task priority level of the mutual exclusion
 | 
						|
  lock, and then acquires ownership of the lock.
 | 
						|
 | 
						|
  @param  Lock               The lock to acquire
 | 
						|
 | 
						|
  @return Lock owned
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreAcquireLock (
 | 
						|
  IN EFI_LOCK  *Lock
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize a basic mutual exclusion lock.   Each lock
 | 
						|
  provides mutual exclusion access at it's task priority
 | 
						|
  level.  Since there is no-premption (at any TPL) or
 | 
						|
  multiprocessor support, acquiring the lock only consists
 | 
						|
  of raising to the locks TPL.
 | 
						|
 | 
						|
  @param  Lock               The EFI_LOCK structure to initialize
 | 
						|
 | 
						|
  @retval EFI_SUCCESS        Lock Owned.
 | 
						|
  @retval EFI_ACCESS_DENIED  Reentrant Lock Acquisition, Lock not Owned.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreAcquireLockOrFail (
 | 
						|
  IN EFI_LOCK  *Lock
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Releases ownership of the mutual exclusion lock, and
 | 
						|
  restores the previous task priority level.
 | 
						|
 | 
						|
  @param  Lock               The lock to release
 | 
						|
 | 
						|
  @return Lock unowned
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreReleaseLock (
 | 
						|
  IN EFI_LOCK  *Lock
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  An empty function to pass error checking of CreateEventEx ().
 | 
						|
 | 
						|
  @param  Event                 Event whose notification function is being invoked.
 | 
						|
  @param  Context               Pointer to the notification function's context,
 | 
						|
                                which is implementation-dependent.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
CoreEmptyCallbackFunction (
 | 
						|
  IN EFI_EVENT                Event,
 | 
						|
  IN VOID                     *Context
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Read data from Firmware Block by FVB protocol Read. 
 | 
						|
  The data may cross the multi block ranges.
 | 
						|
 | 
						|
  @param  Fvb                   The FW_VOL_BLOCK_PROTOCOL instance from which to read data.
 | 
						|
  @param  StartLba              Pointer to StartLba.
 | 
						|
                                On input, the start logical block index from which to read.
 | 
						|
                                On output,the end logical block index after reading.
 | 
						|
  @param  Offset                Pointer to Offset
 | 
						|
                                On input, offset into the block at which to begin reading.
 | 
						|
                                On output, offset into the end block after reading.
 | 
						|
  @param  DataSize              Size of data to be read.
 | 
						|
  @param  Data                  Pointer to Buffer that the data will be read into.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Successfully read data from firmware block.
 | 
						|
  @retval others
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
ReadFvbData (
 | 
						|
  IN     EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *Fvb,
 | 
						|
  IN OUT EFI_LBA                                *StartLba,
 | 
						|
  IN OUT UINTN                                  *Offset,
 | 
						|
  IN     UINTN                                  DataSize,
 | 
						|
  OUT    UINT8                                  *Data
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Given the supplied FW_VOL_BLOCK_PROTOCOL, allocate a buffer for output and
 | 
						|
  copy the real length volume header into it.
 | 
						|
 | 
						|
  @param  Fvb                   The FW_VOL_BLOCK_PROTOCOL instance from which to
 | 
						|
                                read the volume header
 | 
						|
  @param  FwVolHeader           Pointer to pointer to allocated buffer in which
 | 
						|
                                the volume header is returned.
 | 
						|
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  No enough buffer could be allocated.
 | 
						|
  @retval EFI_SUCCESS           Successfully read volume header to the allocated
 | 
						|
                                buffer.
 | 
						|
  @retval EFI_INVALID_PARAMETER The FV Header signature is not as expected or
 | 
						|
                                the file system could not be understood.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
GetFwVolHeader (
 | 
						|
  IN     EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *Fvb,
 | 
						|
  OUT    EFI_FIRMWARE_VOLUME_HEADER             **FwVolHeader
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Verify checksum of the firmware volume header.
 | 
						|
 | 
						|
  @param  FvHeader       Points to the firmware volume header to be checked
 | 
						|
 | 
						|
  @retval TRUE           Checksum verification passed
 | 
						|
  @retval FALSE          Checksum verification failed
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
VerifyFvHeaderChecksum (
 | 
						|
  IN EFI_FIRMWARE_VOLUME_HEADER *FvHeader
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize memory profile.
 | 
						|
 | 
						|
  @param HobStart   The start address of the HOB.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
MemoryProfileInit (
 | 
						|
  IN VOID   *HobStart
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Install memory profile protocol.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
MemoryProfileInstallProtocol (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Register image to memory profile.
 | 
						|
 | 
						|
  @param DriverEntry    Image info.
 | 
						|
  @param FileType       Image file type.
 | 
						|
 | 
						|
  @return EFI_SUCCESS           Register successfully.
 | 
						|
  @return EFI_UNSUPPORTED       Memory profile unsupported,
 | 
						|
                                or memory profile for the image is not required.
 | 
						|
  @return EFI_OUT_OF_RESOURCES  No enough resource for this register.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RegisterMemoryProfileImage (
 | 
						|
  IN LOADED_IMAGE_PRIVATE_DATA  *DriverEntry,
 | 
						|
  IN EFI_FV_FILETYPE            FileType
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Unregister image from memory profile.
 | 
						|
 | 
						|
  @param DriverEntry    Image info.
 | 
						|
 | 
						|
  @return EFI_SUCCESS           Unregister successfully.
 | 
						|
  @return EFI_UNSUPPORTED       Memory profile unsupported,
 | 
						|
                                or memory profile for the image is not required.
 | 
						|
  @return EFI_NOT_FOUND         The image is not found.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UnregisterMemoryProfileImage (
 | 
						|
  IN LOADED_IMAGE_PRIVATE_DATA  *DriverEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Update memory profile information.
 | 
						|
 | 
						|
  @param CallerAddress  Address of caller who call Allocate or Free.
 | 
						|
  @param Action         This Allocate or Free action.
 | 
						|
  @param MemoryType     Memory type.
 | 
						|
                        EfiMaxMemoryType means the MemoryType is unknown.
 | 
						|
  @param Size           Buffer size.
 | 
						|
  @param Buffer         Buffer address.
 | 
						|
  @param ActionString   String for memory profile action.
 | 
						|
                        Only needed for user defined allocate action.
 | 
						|
 | 
						|
  @return EFI_SUCCESS           Memory profile is updated.
 | 
						|
  @return EFI_UNSUPPORTED       Memory profile is unsupported,
 | 
						|
                                or memory profile for the image is not required,
 | 
						|
                                or memory profile for the memory type is not required.
 | 
						|
  @return EFI_ACCESS_DENIED     It is during memory profile data getting.
 | 
						|
  @return EFI_ABORTED           Memory profile recording is not enabled.
 | 
						|
  @return EFI_OUT_OF_RESOURCES  No enough resource to update memory profile for allocate action.
 | 
						|
  @return EFI_NOT_FOUND         No matched allocate info found for free action.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CoreUpdateProfile (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS   CallerAddress,
 | 
						|
  IN MEMORY_PROFILE_ACTION  Action,
 | 
						|
  IN EFI_MEMORY_TYPE        MemoryType,
 | 
						|
  IN UINTN                  Size,       // Valid for AllocatePages/FreePages/AllocatePool
 | 
						|
  IN VOID                   *Buffer,
 | 
						|
  IN CHAR8                  *ActionString OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Internal function.  Converts a memory range to use new attributes.
 | 
						|
 | 
						|
  @param  Start                  The first address of the range Must be page
 | 
						|
                                 aligned
 | 
						|
  @param  NumberOfPages          The number of pages to convert
 | 
						|
  @param  NewAttributes          The new attributes value for the range.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreUpdateMemoryAttributes (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  Start,
 | 
						|
  IN UINT64                NumberOfPages,
 | 
						|
  IN UINT64                NewAttributes
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize PropertiesTable support.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
CoreInitializePropertiesTable (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize MemoryAttrubutesTable support.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
CoreInitializeMemoryAttributesTable (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Install MemoryAttributesTable on memory allocation.
 | 
						|
 | 
						|
  @param[in] MemoryType EFI memory type.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
InstallMemoryAttributesTableOnMemoryAllocation (
 | 
						|
  IN EFI_MEMORY_TYPE    MemoryType
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Insert image record.
 | 
						|
 | 
						|
  @param  RuntimeImage    Runtime image information
 | 
						|
**/
 | 
						|
VOID
 | 
						|
InsertImageRecord (
 | 
						|
  IN EFI_RUNTIME_IMAGE_ENTRY  *RuntimeImage
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Remove Image record.
 | 
						|
 | 
						|
  @param  RuntimeImage    Runtime image information
 | 
						|
**/
 | 
						|
VOID
 | 
						|
RemoveImageRecord (
 | 
						|
  IN EFI_RUNTIME_IMAGE_ENTRY  *RuntimeImage
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |