dxecore.h
来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· C头文件 代码 · 共 2,531 行 · 第 1/4 页
H
2,531 行
/*++
Copyright (c) 2004 - 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
DxeCore.h
Abstract:
Revision History
--*/
#ifndef _DXECORE_H_
#define _DXECORE_H_
#include EFI_GUID_DEFINITION (PeiFlushInstructionCache)
#include EFI_GUID_DEFINITION (PeiPeCoffLoader)
#include EFI_GUID_DEFINITION (PeiTransferControl)
#include EFI_GUID_DEFINITION (Hob)
#include EFI_GUID_DEFINITION (StatusCodeDataTypeId)
#include EFI_GUID_DEFINITION (DxeServices)
#include EFI_GUID_DEFINITION (MemoryTypeInformation)
#include EFI_GUID_DEFINITION (StatusCodeCallerId)
#include EFI_GUID_DEFINITION (EventGroup)
#include EFI_GUID_DEFINITION (EventLegacyBios)
#include EFI_GUID_DEFINITION (FrameworkDevicePath)
#include EFI_ARCH_PROTOCOL_DEFINITION (Cpu)
#include EFI_ARCH_PROTOCOL_DEFINITION (Metronome)
#include EFI_ARCH_PROTOCOL_DEFINITION (MonotonicCounter)
#include EFI_ARCH_PROTOCOL_DEFINITION (Timer)
#include EFI_ARCH_PROTOCOL_DEFINITION (Bds)
#include EFI_ARCH_PROTOCOL_DEFINITION (Reset)
#include EFI_ARCH_PROTOCOL_DEFINITION (RealTimeClock)
#include EFI_ARCH_PROTOCOL_DEFINITION (Variable)
#include EFI_ARCH_PROTOCOL_DEFINITION (VariableWrite)
#include EFI_ARCH_PROTOCOL_DEFINITION (Capsule)
#include EFI_ARCH_PROTOCOL_DEFINITION (WatchdogTimer)
#include EFI_ARCH_PROTOCOL_DEFINITION (Runtime)
#include EFI_ARCH_PROTOCOL_DEFINITION (StatusCode)
#include EFI_ARCH_PROTOCOL_DEFINITION (Security)
#include EFI_PROTOCOL_DEFINITION (Decompress)
#include EFI_PROTOCOL_DEFINITION (TianoDecompress)
#include EFI_PROTOCOL_DEFINITION (CustomizedDecompress)
#include EFI_PROTOCOL_DEFINITION (FirmwareVolume)
#include EFI_PROTOCOL_DEFINITION (FirmwareVolumeDispatch)
#include EFI_PROTOCOL_DEFINITION (LoadedImage)
#include "LinkedList.h"
#include "DebugImageInfo.h"
#include "EfiCommonLib.h"
#include "Library.h"
#include "Peihob.h"
#include "EfiHobLib.h"
#include "DebugMask.h"
typedef struct {
EFI_GUID *ProtocolGuid;
VOID **Protocol;
EFI_EVENT Event;
VOID *Registration;
BOOLEAN Present;
} ARCHITECTURAL_PROTOCOL_ENTRY;
//
// DXE Dispatcher Data structures
//
#define KNOWN_HANDLE_SIGNATURE EFI_SIGNATURE_32('k','n','o','w')
typedef struct {
UINTN Signature;
EFI_LIST_ENTRY Link; // mFvHandleList
EFI_HANDLE Handle;
} KNOWN_HANDLE;
#define EFI_CORE_DRIVER_ENTRY_SIGNATURE EFI_SIGNATURE_32('d','r','v','r')
typedef struct {
UINTN Signature;
EFI_LIST_ENTRY Link; // mDriverList
EFI_LIST_ENTRY ScheduledLink; // mScheduledQueue
EFI_HANDLE FvHandle;
EFI_GUID FileName;
EFI_DEVICE_PATH_PROTOCOL *FvFileDevicePath;
EFI_FIRMWARE_VOLUME_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;
} EFI_CORE_DRIVER_ENTRY;
//
//The data structure of GCD memory map entry
//
#define EFI_GCD_MAP_SIGNATURE EFI_SIGNATURE_32('g','c','d','m')
typedef struct {
UINTN Signature;
EFI_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;
//
// DXE Core Global Variables
//
extern EFI_SYSTEM_TABLE *gST;
extern EFI_BOOT_SERVICES *gBS;
extern EFI_RUNTIME_SERVICES *gRT;
extern EFI_DXE_SERVICES *gDS;
extern EFI_HANDLE gDxeCoreImageHandle;
extern EFI_DECOMPRESS_PROTOCOL *gEfiDecompress;
extern EFI_PEI_FLUSH_INSTRUCTION_CACHE_PROTOCOL *gEfiPeiFlushInstructionCache;
extern EFI_PEI_PE_COFF_LOADER_PROTOCOL *gEfiPeiPeCoffLoader;
extern EFI_PEI_TRANSFER_CONTROL_PROTOCOL *gEfiPeiTransferControl;
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_BDS_ARCH_PROTOCOL *gBds;
extern EFI_STATUS_CODE_PROTOCOL *gStatusCode;
extern EFI_TPL gEfiCurrentTpl;
extern EFI_GUID *gDxeCoreFileName;
extern EFI_LOADED_IMAGE_PROTOCOL *gDxeCoreLoadedImage;
extern EFI_MEMORY_TYPE_INFORMATION gMemoryTypeInformation[EfiMaxMemoryType + 1];
extern EFI_RUNTIME_ARCH_PROTOCOL gRuntimeTemplate;
//
// Service Initialization Functions
//
VOID
CoreInitializePool (
VOID
)
/*++
Routine Description:
Called to initialize the pool.
Arguments:
None
Returns:
None
--*/
;
VOID
CoreAddMemoryDescriptor (
IN EFI_MEMORY_TYPE Type,
IN EFI_PHYSICAL_ADDRESS Start,
IN UINT64 NumberOfPages,
IN UINT64 Attribute
)
/*++
Routine Description:
Called to initialize the memory map and add descriptors to
the current descriptor list.
N.B. The first descriptor that is added must be general usable
memory as the addition allocates heap.
Arguments:
Type - The type of memory to add
Start - The starting address in the memory range
Must be page aligned
NumberOfPages - The number of pages in the range
Attribute - Attributes of the memory to add
Returns:
None. The range is added to the memory map
--*/
;
VOID
CoreReleaseGcdMemoryLock (
VOID
)
/*++
Routine Description:
Release memory lock on mGcdMemorySpaceLock
Arguments:
None
Returns:
None
--*/
;
VOID
CoreAcquireGcdMemoryLock (
VOID
)
/*++
Routine Description:
Acquire memory lock on mGcdMemorySpaceLock
Arguments:
None
Returns:
None
--*/
;
EFI_STATUS
CoreInitializeMemoryServices (
IN VOID **HobStart,
IN EFI_PHYSICAL_ADDRESS *MemoryBaseAddress,
IN UINT64 *MemoryLength
)
/*++
Routine Description:
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 first
part of this function can not depend on any memory services until at least one
memory descriptor is provided to the memory services. Then the memory services
can be used to intialize the GCD map.
Arguments:
HobStart - The start address of the HOB.
MemoryBaseAddress - Start address of memory region found to init DXE core.
MemoryLength - Length of memory region found to init DXE core.
Returns:
EFI_SUCCESS - Memory services successfully initialized.
--*/
;
EFI_STATUS
CoreInitializeGcdServices (
IN VOID **HobStart,
IN EFI_PHYSICAL_ADDRESS MemoryBaseAddress,
IN UINT64 MemoryLength
)
/*++
Routine Description:
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 first
part of this function can not depend on any memory services until at least one
memory descriptor is provided to the memory services. Then the memory services
can be used to intialize the GCD map.
Arguments:
HobStart - The start address of the HOB
MemoryBaseAddress - Start address of memory region found to init DXE core.
MemoryLength - Length of memory region found to init DXE core.
Returns:
EFI_SUCCESS - GCD services successfully initialized.
--*/
;
EFI_STATUS
CoreInitializeEventServices (
VOID
)
/*++
Routine Description:
Initializes "event" support and populates parts of the System and Runtime Table.
Arguments:
None
Returns:
EFI_SUCCESS - Always return success
--*/
;
EFI_STATUS
CoreInitializeImageServices (
IN VOID *HobStart
)
/*++
Routine Description:
Add the Image Services to EFI Boot Services Table and install the protocol
interfaces for this image.
Arguments:
HobStart - The HOB to initialize
Returns:
Status code.
--*/
;
VOID
CoreNotifyOnArchProtocolInstallation (
VOID
)
/*++
Routine Description:
Creates an event that is fired everytime a Protocol of a specific type is installed
Arguments:
NONE
Returns:
NONE
--*/
;
EFI_STATUS
CoreAllEfiServicesAvailable (
VOID
)
/*++
Routine Description:
Return TRUE if all AP services are availible.
Arguments:
NONE
Returns:
EFI_SUCCESS - All AP services are available
EFI_NOT_FOUND - At least one AP service is not available
--*/
;
VOID
CalculateEfiHdrCrc (
IN OUT EFI_TABLE_HEADER *Hdr
)
/*++
Routine Description:
Calcualte the 32-bit CRC in a EFI table using the service provided by the
gRuntime service.
Arguments:
Hdr - Pointer to an EFI standard header
Returns:
None
--*/
;
VOID
EFIAPI
CoreTimerTick (
IN UINT64 Duration
)
/*++
Routine Description:
Called by the platform code to process a tick.
Arguments:
Duration - The number of 100ns elasped since the last call to TimerTick
Returns:
None
--*/
;
VOID
CoreInitializeDispatcher (
VOID
)
/*++
Routine Description:
Initialize the dispatcher. Initialize the notification function that runs when
a FV protocol is added to the system.
Arguments:
NONE
Returns:
NONE
--*/
;
BOOLEAN
CoreIsSchedulable (
IN EFI_CORE_DRIVER_ENTRY *DriverEntry
)
/*++
Routine Description:
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.
Arguments:
DriverEntry - DriverEntry element to update
Returns:
TRUE - If driver is ready to run.
FALSE - If driver is not ready to run or some fatal error was found.
--*/
;
EFI_STATUS
CorePreProcessDepex (
IN EFI_CORE_DRIVER_ENTRY *DriverEntry
)
/*++
Routine Description:
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.
Arguments:
DriverEntry - DriverEntry element to update
Returns:
EFI_SUCCESS - It always works.
--*/
;
EFI_BOOTSERVICE
EFI_STATUS
EFIAPI
CoreExitBootServices (
IN EFI_HANDLE ImageHandle,
IN UINTN MapKey
)
/*++
Routine Description:
EFI 1.0 API to terminate Boot Services
Arguments:
ImageHandle - Handle that represents the identity of the calling image
MapKey -Key to the latest memory map.
Returns:
EFI_SUCCESS - Boot Services terminated
EFI_INVALID_PARAMETER - MapKey is incorrect.
--*/
;
EFI_STATUS
CoreTerminateMemoryMap (
IN UINTN MapKey
)
/*++
Routine Description:
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.
Arguments:
MapKey - Memory map key
Returns:
EFI_INVALID_PARAMETER - Memory map not consistent with construction rules.
EFI_SUCCESS - Valid memory map.
--*/
;
VOID
CoreNotifySignalList (
IN EFI_GUID *EventGroup
)
/*++
Routine Description:
Signals all events on the requested list
Arguments:
SignalType - The list to signal
Returns:
None
--*/
;
EFI_BOOTSERVICE
EFI_STATUS
EFIAPI
CoreInstallConfigurationTable (
IN EFI_GUID *Guid,
IN VOID *Table
)
/*++
Routine Description:
Boot Service called to add, modify, or remove a system configuration table from
the EFI System Table.
Arguments:
Guid: Pointer to the GUID for the entry to add, update, or remove
Table: Pointer to the configuration table for the entry to add, update, or
remove, may be NULL.
Returns:
EFI_SUCCESS Guid, Table pair added, updated, or removed.
EFI_INVALID_PARAMETER Input GUID not valid.
EFI_NOT_FOUND Attempted to delete non-existant entry
EFI_OUT_OF_RESOURCES Not enough memory available
--*/
;
EFI_BOOTSERVICE
EFI_TPL
EFIAPI
CoreRaiseTpl (
IN EFI_TPL NewTpl
)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?