1007 lines
23 KiB
C
1007 lines
23 KiB
C
/*++
|
|
|
|
Copyright (c) 2024-2025, Quinn Stephens.
|
|
Provided under the BSD 3-Clause license.
|
|
|
|
Module Name:
|
|
|
|
efiapi.h
|
|
|
|
Abstract:
|
|
|
|
Provides EFI service definitions.
|
|
|
|
--*/
|
|
|
|
#pragma once
|
|
|
|
#ifndef _EFIAPI_H
|
|
#define _EFIAPI_H
|
|
|
|
#pragma pack(1)
|
|
|
|
typedef struct _EFI_SYSTEM_TABLE EFI_SYSTEM_TABLE;
|
|
|
|
//
|
|
// Memory services.
|
|
//
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_ALLOCATE_PAGES) (
|
|
IN EFI_ALLOCATE_TYPE Type,
|
|
IN EFI_MEMORY_TYPE MemoryType,
|
|
IN UINTN Pages,
|
|
IN OUT EFI_PHYSICAL_ADDRESS *Memory
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_FREE_PAGES) (
|
|
IN EFI_PHYSICAL_ADDRESS Memory,
|
|
IN UINTN Pages
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_MEMORY_MAP) (
|
|
IN OUT UINTN *MemoryMapSize,
|
|
IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
|
|
IN OUT UINTN *MapKey,
|
|
IN OUT UINTN *DescriptorSize,
|
|
IN OUT UINT32 *DescriptorVersion
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_ALLOCATE_POOL) (
|
|
IN EFI_MEMORY_TYPE PoolType,
|
|
IN UINTN Size,
|
|
OUT VOID **Buffer
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_FREE_POOL) (
|
|
IN VOID *Buffer
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
|
|
IN UINTN MemoryMapSize,
|
|
IN UINTN DescriptorSize,
|
|
IN UINT32 DescriptorVersion,
|
|
IN EFI_MEMORY_DESCRIPTOR *VirtualMap
|
|
);
|
|
|
|
#define EFI_OPTIONAL_PTR 0x00000001
|
|
#define EFI_INTERNAL_FNC 0x00000002
|
|
#define EFI_INTERNAL_PTR 0x00000004
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CONVERT_POINTER) (
|
|
IN UINTN DebugDisposition,
|
|
IN VOID **Address
|
|
);
|
|
|
|
//
|
|
// Driver controller services.
|
|
//
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CONNECT_CONTROLLER) (
|
|
IN EFI_HANDLE ControllerHandle,
|
|
IN EFI_HANDLE *DriverImageHandle OPTIONAL,
|
|
IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL,
|
|
IN BOOLEAN Recursive
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_DISCONNECT_CONTROLLER) (
|
|
IN EFI_HANDLE ControllerHandle,
|
|
IN EFI_HANDLE DriverImageHandle OPTIONAL,
|
|
IN EFI_HANDLE ChildHandle OPTIONAL
|
|
);
|
|
|
|
//
|
|
// Event services.
|
|
//
|
|
|
|
#define EVT_NOTIFY_WAIT 0x00000100
|
|
#define EVT_NOTIFY_SIGNAL 0x00000200
|
|
#define EVT_RUNTIME_CONTEXT 0x20000000 // Deprecated in UEFI 2.0+
|
|
#define EVT_RUNTIME 0x40000000
|
|
#define EVT_TIMER 0x80000000
|
|
|
|
#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
|
|
#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
|
|
|
|
#define EVT_EFI_SIGNAL_MASK 0x000000FF
|
|
#define EVT_EFI_SIGNAL_MAX 4
|
|
|
|
#define EFI_EVENT_TIMER EVT_TIMER
|
|
#define EFI_EVENT_RUNTIME EVT_RUNTIME
|
|
#define EFI_EVENT_RUNTIME_CONTEXT EVT_RUNTIME_CONTEXT
|
|
#define EFI_EVENT_NOTIFY_WAIT EVT_NOTIFY_WAIT
|
|
#define EFI_EVENT_NOTIFY_SIGNAL EVT_NOTIFY_SIGNAL
|
|
#define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES EVT_SIGNAL_EXIT_BOOT_SERVICES
|
|
#define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE
|
|
#define EFI_EVENT_EFI_SIGNAL_MASK EVT_EFI_SIGNAL_MASK
|
|
#define EFI_EVENT_EFI_SIGNAL_MAX EVT_EFI_SIGNAL_MAX
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *EFI_EVENT_NOTIFY) (
|
|
IN EFI_EVENT Event,
|
|
IN VOID *Context
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CREATE_EVENT) (
|
|
IN UINT32 Type,
|
|
IN EFI_TPL NotifyTpl,
|
|
IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,
|
|
IN VOID *NotifyContext OPTIONAL,
|
|
OUT EFI_EVENT *Event
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CREATE_EVENT_EX) (
|
|
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
|
|
);
|
|
|
|
typedef enum {
|
|
//
|
|
// Cancel timer.
|
|
//
|
|
TimerCancel,
|
|
|
|
//
|
|
// Signal periodically at a regular interval.
|
|
//
|
|
TimerPeriodic,
|
|
|
|
//
|
|
// Signal at certain interval after the current time.
|
|
//
|
|
TimerRelative,
|
|
|
|
//
|
|
// For bounds checking.
|
|
//
|
|
TimerDelayMax
|
|
} EFI_TIMER_DELAY;
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SET_TIMER) (
|
|
IN EFI_EVENT Event,
|
|
IN EFI_TIMER_DELAY Type,
|
|
IN UINT64 TriggerTime
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SIGNAL_EVENT) (
|
|
IN EFI_EVENT Event
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_WAIT_FOR_EVENT) (
|
|
IN UINTN NumberOfEvents,
|
|
IN EFI_EVENT *Event,
|
|
OUT UINTN *Index
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CLOSE_EVENT) (
|
|
IN EFI_EVENT Event
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CHECK_EVENT) (
|
|
IN EFI_EVENT Event
|
|
);
|
|
|
|
//
|
|
// Task priority services.
|
|
//
|
|
|
|
#define TPL_APPLICATION 4
|
|
#define TPL_CALLBACK 8
|
|
#define TPL_NOTIFY 16
|
|
#define TPL_HIGH_LEVEL 31
|
|
#define EFI_TPL_APPLICATION TPL_APPLICATION
|
|
#define EFI_TPL_CALLBACK TPL_CALLBACK
|
|
#define EFI_TPL_NOTIFY TPL_NOTIFY
|
|
#define EFI_TPL_HIGH_LEVEL TPL_HIGH_LEVEL
|
|
|
|
typedef
|
|
EFI_TPL
|
|
(EFIAPI *EFI_RAISE_TPL) (
|
|
IN EFI_TPL NewTpl
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *EFI_RESTORE_TPL) (
|
|
IN EFI_TPL OldTpl
|
|
);
|
|
|
|
//
|
|
// Variable services.
|
|
//
|
|
|
|
#define EFI_GLOBAL_VARIABLE \
|
|
{ 0x8BE4DF61, 0x93CA, 0x11D2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} }
|
|
|
|
//
|
|
// Variable attributes.
|
|
//
|
|
#define EFI_VARIABLE_NON_VOLATILE 0x00000001
|
|
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
|
|
#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
|
|
#define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008
|
|
#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010
|
|
#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020
|
|
#define EFI_VARIABLE_APPEND_WRITE 0x00000040
|
|
#define EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS 0x00000080
|
|
|
|
#define EFI_MAXIMUM_VARIABLE_SIZE 1024
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_VARIABLE) (
|
|
IN CHAR16 *VariableName,
|
|
IN EFI_GUID *VendorGuid,
|
|
OUT UINT32 *Attributes OPTIONAL,
|
|
IN OUT UINTN *DataSize,
|
|
OUT VOID *Data OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
|
|
IN OUT UINTN *VariableNameSize,
|
|
IN OUT CHAR16 *VariableName,
|
|
IN OUT EFI_GUID *VendorGuid
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SET_VARIABLE) (
|
|
IN CHAR16 *VariableName,
|
|
IN EFI_GUID *VendorGuid,
|
|
IN UINT32 Attributes,
|
|
IN UINTN DataSize,
|
|
IN VOID *Data
|
|
);
|
|
|
|
//
|
|
// Time services.
|
|
//
|
|
|
|
typedef struct {
|
|
//
|
|
// Resolution in hertz.
|
|
// Ex. 1Hz means 1 second resolution.
|
|
//
|
|
UINT32 Resolution;
|
|
|
|
//
|
|
// Accuracy in 1e-6 parts per million.
|
|
// Ex. 50,000,000 means 50 parts per million accuracy.
|
|
//
|
|
UINT32 Accuracy;
|
|
|
|
//
|
|
// If TRUE, SetTime() clears sub-resolution data.
|
|
//
|
|
BOOLEAN SetsToZero;
|
|
} EFI_TIME_CAPABILITIES;
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_TIME) (
|
|
OUT EFI_TIME *Time,
|
|
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SET_TIME) (
|
|
IN EFI_TIME *Time
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_WAKEUP_TIME) (
|
|
OUT BOOLEAN *Enabled,
|
|
OUT BOOLEAN *Pending,
|
|
OUT EFI_TIME *Time
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SET_WAKEUP_TIME) (
|
|
IN BOOLEAN Enable,
|
|
IN EFI_TIME *Time OPTIONAL
|
|
);
|
|
|
|
//
|
|
// Image services.
|
|
//
|
|
|
|
//
|
|
// Image machine types.
|
|
//
|
|
#define EFI_IMAGE_MACHINE_IA32 0x014C
|
|
#define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2
|
|
#define EFI_IMAGE_MACHINE_IA64 0x0200
|
|
#define EFI_IMAGE_MACHINE_EBC 0x0EBC
|
|
#define EFI_IMAGE_MACHINE_RISCV32 0x5032
|
|
#define EFI_IMAGE_MACHINE_RISCV64 0x5064
|
|
#define EFI_IMAGE_MACHINE_RISCV128 0x5128
|
|
#define EFI_IMAGE_MACHINE_LOONGARCH32 0x6232
|
|
#define EFI_IMAGE_MACHINE_LOONGARCH64 0x6264
|
|
#define EFI_IMAGE_MACHINE_X64 0x8664
|
|
#define EFI_IMAGE_MACHINE_AARCH64 0xAA64
|
|
|
|
//
|
|
// Image subsystem types.
|
|
//
|
|
#if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION)
|
|
#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
|
|
#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
|
|
#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
|
|
#endif
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_IMAGE_LOAD) (
|
|
IN BOOLEAN BootPolicy,
|
|
IN EFI_HANDLE ParentImageHandle,
|
|
IN EFI_DEVICE_PATH *DevicePath OPTIONAL,
|
|
IN VOID *SourceBuffer OPTIONAL,
|
|
IN UINTN SourceSize,
|
|
OUT EFI_HANDLE *ImageHandle
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_IMAGE_START) (
|
|
IN EFI_HANDLE ImageHandle,
|
|
OUT UINTN *ExitDataSize,
|
|
OUT CHAR16 **ExitData OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_EXIT) (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_STATUS ExitStatus,
|
|
IN UINTN ExitDataSize,
|
|
IN CHAR16 *ExitData OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_EXIT_BOOT_SERVICES) (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN UINTN MapKey
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_STALL) (
|
|
IN UINTN Microseconds
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SET_WATCHDOG_TIMER) (
|
|
IN UINTN Timeout,
|
|
IN UINT64 WatchdogCode,
|
|
IN UINTN DataSize,
|
|
IN CHAR16 *WatchdogData OPTIONAL
|
|
);
|
|
|
|
typedef enum {
|
|
//
|
|
// Reset everything to its initial state.
|
|
//
|
|
EfiResetCold,
|
|
|
|
//
|
|
// Reset processors to their initial state.
|
|
//
|
|
EfiResetWarm,
|
|
|
|
//
|
|
// Shut down.
|
|
//
|
|
EfiResetShutdown,
|
|
|
|
//
|
|
// Platform-specific reset.
|
|
//
|
|
EfiResetPlatformSpecific
|
|
} EFI_RESET_TYPE;
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *EFI_RESET_SYSTEM) (
|
|
IN EFI_RESET_TYPE ResetType,
|
|
IN EFI_STATUS ResetStatus,
|
|
IN UINTN DataSize,
|
|
IN VOID *ResetData OPTIONAL
|
|
);
|
|
|
|
//
|
|
// Monotonic counter services.
|
|
//
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
|
|
OUT UINT64 *Count
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
|
|
OUT UINT32 *HighCount
|
|
);
|
|
|
|
//
|
|
// 32-bit CRC services.
|
|
//
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CALCULATE_CRC32) (
|
|
IN VOID *Data,
|
|
IN UINTN DataSize,
|
|
OUT UINT32 *Crc32
|
|
);
|
|
|
|
//
|
|
// Memory/string operation services.
|
|
//
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *EFI_COPY_MEM) (
|
|
IN VOID *Destination,
|
|
IN VOID *Source,
|
|
IN UINTN Length
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *EFI_SET_MEM) (
|
|
IN VOID *Buffer,
|
|
IN UINTN Size,
|
|
IN UINT8 Value
|
|
);
|
|
|
|
//
|
|
// Protocol services.
|
|
//
|
|
|
|
#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001
|
|
#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002
|
|
#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004
|
|
#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
|
|
#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010
|
|
#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020
|
|
|
|
typedef enum {
|
|
//
|
|
// Interface supplied in native form.
|
|
//
|
|
EFI_NATIVE_INTERFACE,
|
|
|
|
EFI_PCODE_INTERFACE
|
|
} EFI_INTERFACE_TYPE;
|
|
|
|
typedef enum {
|
|
//
|
|
// Get all handles.
|
|
//
|
|
AllHandles,
|
|
|
|
//
|
|
// Get next handle from a RegisterProtocolNotify() event.
|
|
//
|
|
ByRegisterNotify,
|
|
|
|
//
|
|
// Get handles supporting a specific protocol.
|
|
//
|
|
ByProtocol
|
|
} EFI_LOCATE_SEARCH_TYPE;
|
|
|
|
typedef struct {
|
|
EFI_HANDLE AgentHandle;
|
|
EFI_HANDLE ControllerHandle;
|
|
UINT32 Attributes;
|
|
UINT32 OpenCount;
|
|
} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) (
|
|
IN OUT EFI_HANDLE *Handle,
|
|
IN EFI_GUID *Protocol,
|
|
IN EFI_INTERFACE_TYPE InterfaceType,
|
|
IN VOID *Interface
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
|
|
IN OUT EFI_HANDLE *Handle,
|
|
...
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) (
|
|
IN EFI_HANDLE Handle,
|
|
IN EFI_GUID *Protocol,
|
|
IN VOID *OldInterface,
|
|
IN VOID *NewInterface
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
|
|
IN EFI_HANDLE Handle,
|
|
IN EFI_GUID *Protocol,
|
|
IN VOID *Interface
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
|
|
IN EFI_HANDLE Handle,
|
|
...
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_HANDLE_PROTOCOL) (
|
|
IN EFI_HANDLE Handle,
|
|
IN EFI_GUID *Protocol,
|
|
OUT VOID **Interface
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_OPEN_PROTOCOL) (
|
|
IN EFI_HANDLE Handle,
|
|
IN EFI_GUID *Protocol,
|
|
OUT VOID **Interface OPTIONAL,
|
|
IN EFI_HANDLE AgentHandle,
|
|
IN EFI_HANDLE ControllerHandle,
|
|
IN UINT32 Attributes
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CLOSE_PROTOCOL) (
|
|
IN EFI_HANDLE Handle,
|
|
IN EFI_GUID *Protocol,
|
|
IN EFI_HANDLE AgentHandle,
|
|
IN EFI_HANDLE ControllerHandle
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) (
|
|
IN EFI_HANDLE Handle,
|
|
IN EFI_GUID *Protocol,
|
|
OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
|
|
OUT UINTN *EntryCount
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_PROTOCOLS_PER_HANDLE) (
|
|
IN EFI_HANDLE Handle,
|
|
OUT EFI_GUID ***ProtocolBuffer,
|
|
OUT UINTN *ProtocolBufferCount
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
|
|
IN EFI_GUID *Protocol,
|
|
IN EFI_EVENT Event,
|
|
OUT VOID **Registration
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_LOCATE_HANDLE) (
|
|
IN EFI_LOCATE_SEARCH_TYPE SearchType,
|
|
IN EFI_GUID *Protocol OPTIONAL,
|
|
IN VOID *SearchKey OPTIONAL,
|
|
IN OUT UINTN *BufferSize,
|
|
OUT EFI_HANDLE *Buffer
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_LOCATE_DEVICE_PATH) (
|
|
IN EFI_GUID *Protocol,
|
|
IN OUT EFI_DEVICE_PATH **DevicePath,
|
|
OUT EFI_HANDLE *Device
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_LOCATE_HANDLE_BUFFER) (
|
|
IN EFI_LOCATE_SEARCH_TYPE SearchType,
|
|
IN EFI_GUID *Protocol OPTIONAL,
|
|
IN VOID *SearchKey OPTIONAL,
|
|
OUT UINTN *NoHandles,
|
|
OUT EFI_HANDLE **Buffer
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_LOCATE_PROTOCOL) (
|
|
IN EFI_GUID *Protocol,
|
|
IN VOID *Registration OPTIONAL,
|
|
OUT VOID **Interface
|
|
);
|
|
|
|
//
|
|
// Configuration table services.
|
|
//
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
|
|
IN EFI_GUID *Guid,
|
|
IN VOID *Table
|
|
);
|
|
|
|
//
|
|
// Capsule services.
|
|
//
|
|
|
|
typedef struct {
|
|
UINT64 Length;
|
|
|
|
union {
|
|
EFI_PHYSICAL_ADDRESS DataBlock;
|
|
EFI_PHYSICAL_ADDRESS ContinuationPointer;
|
|
} Union;
|
|
} EFI_CAPSULE_BLOCK_DESCRIPTOR;
|
|
|
|
typedef struct {
|
|
EFI_GUID CapsuleGuid;
|
|
UINT32 HeaderSize;
|
|
UINT32 Flags;
|
|
UINT32 CapsuleImageSize;
|
|
} EFI_CAPSULE_HEADER;
|
|
|
|
typedef struct {
|
|
UINT32 CapsuleArrayNumber;
|
|
VOID *CapsulePtr[1];
|
|
} EFI_CAPSULE_TABLE;
|
|
|
|
#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000
|
|
#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000
|
|
#define CAPSULE_FLAGS_INITIATE_RESET 0x00040000
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_UPDATE_CAPSULE) (
|
|
IN EFI_CAPSULE_HEADER **CapsuleHeaderArray,
|
|
IN UINTN CapsuleCount,
|
|
IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) (
|
|
IN EFI_CAPSULE_HEADER **CapsuleHeaderArray,
|
|
IN UINTN CapsuleCount,
|
|
OUT UINT64 *MaximumCapsuleSize,
|
|
OUT EFI_RESET_TYPE *ResetType
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_QUERY_VARIABLE_INFO) (
|
|
IN UINT32 Attributes,
|
|
OUT UINT64 *MaximumVariableStorageSize,
|
|
OUT UINT64 *RemainingVariableStorageSize,
|
|
OUT UINT64 *MaximumVariableSize
|
|
);
|
|
|
|
//
|
|
// EFI table header.
|
|
//
|
|
typedef struct {
|
|
UINT64 Signature;
|
|
UINT32 Revision;
|
|
UINT32 HeaderSize;
|
|
UINT32 CRC32;
|
|
UINT32 Reserved;
|
|
} EFI_TABLE_HEADER;
|
|
|
|
//
|
|
// EFI Runtime Services Table.
|
|
// Signature: "RUNTSERV".
|
|
//
|
|
|
|
#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544E5552
|
|
#define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION
|
|
|
|
typedef struct {
|
|
EFI_TABLE_HEADER Hdr;
|
|
|
|
//
|
|
// Time services.
|
|
//
|
|
EFI_GET_TIME GetTime;
|
|
EFI_SET_TIME SetTime;
|
|
EFI_GET_WAKEUP_TIME GetWakeupTime;
|
|
EFI_SET_WAKEUP_TIME SetWakeupTime;
|
|
|
|
//
|
|
// Virtual memory services.
|
|
//
|
|
EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap;
|
|
EFI_CONVERT_POINTER ConvertPointer;
|
|
|
|
//
|
|
// Variable services.
|
|
//
|
|
EFI_GET_VARIABLE GetVariable;
|
|
EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName;
|
|
EFI_SET_VARIABLE SetVariable;
|
|
|
|
//
|
|
// Miscellaneous services.
|
|
//
|
|
EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount;
|
|
EFI_RESET_SYSTEM ResetSystem;
|
|
|
|
//
|
|
// Services below are available in UEFI 2.0+ only.
|
|
//
|
|
|
|
//
|
|
// Capsule services.
|
|
//
|
|
EFI_UPDATE_CAPSULE UpdateCapsule;
|
|
EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities;
|
|
|
|
//
|
|
// Miscellaneous services.
|
|
//
|
|
EFI_QUERY_VARIABLE_INFO QueryVariableInfo;
|
|
} EFI_RUNTIME_SERVICES;
|
|
|
|
//
|
|
// EFI Boot Services Table.
|
|
// Signature: "BOOTSERV".
|
|
//
|
|
|
|
#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544F4F42
|
|
#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION
|
|
|
|
typedef struct {
|
|
EFI_TABLE_HEADER Hdr;
|
|
|
|
//
|
|
// Task priority services.
|
|
//
|
|
EFI_RAISE_TPL RaiseTPL;
|
|
EFI_RESTORE_TPL RestoreTPL;
|
|
|
|
//
|
|
// Memory services.
|
|
//
|
|
EFI_ALLOCATE_PAGES AllocatePages;
|
|
EFI_FREE_PAGES FreePages;
|
|
EFI_GET_MEMORY_MAP GetMemoryMap;
|
|
EFI_ALLOCATE_POOL AllocatePool;
|
|
EFI_FREE_POOL FreePool;
|
|
|
|
//
|
|
// Event & timer services.
|
|
//
|
|
EFI_CREATE_EVENT CreateEvent;
|
|
EFI_SET_TIMER SetTimer;
|
|
EFI_WAIT_FOR_EVENT WaitForEvent;
|
|
EFI_SIGNAL_EVENT SignalEvent;
|
|
EFI_CLOSE_EVENT CloseEvent;
|
|
EFI_CHECK_EVENT CheckEvent;
|
|
|
|
//
|
|
// Protocol handler services.
|
|
//
|
|
EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
|
|
EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
|
|
EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
|
|
EFI_HANDLE_PROTOCOL HandleProtocol;
|
|
EFI_HANDLE_PROTOCOL PCHandleProtocol;
|
|
EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify;
|
|
EFI_LOCATE_HANDLE LocateHandle;
|
|
EFI_LOCATE_DEVICE_PATH LocateDevicePath;
|
|
EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
|
|
|
|
//
|
|
// Image services.
|
|
//
|
|
EFI_IMAGE_LOAD LoadImage;
|
|
EFI_IMAGE_START StartImage;
|
|
EFI_EXIT Exit;
|
|
EFI_IMAGE_UNLOAD UnloadImage;
|
|
EFI_EXIT_BOOT_SERVICES ExitBootServices;
|
|
|
|
//
|
|
// Miscellaneous services.
|
|
//
|
|
EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount;
|
|
EFI_STALL Stall;
|
|
EFI_SET_WATCHDOG_TIMER SetWatchdogTimer;
|
|
|
|
//
|
|
// Services below are available in EFI 1.1+ only.
|
|
//
|
|
|
|
//
|
|
// Driver controller services.
|
|
//
|
|
EFI_CONNECT_CONTROLLER ConnectController;
|
|
EFI_DISCONNECT_CONTROLLER DisconnectController;
|
|
|
|
//
|
|
// Open and close protocol services.
|
|
//
|
|
EFI_OPEN_PROTOCOL OpenProtocol;
|
|
EFI_CLOSE_PROTOCOL CloseProtocol;
|
|
EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation;
|
|
|
|
//
|
|
// Library services.
|
|
//
|
|
EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle;
|
|
EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer;
|
|
EFI_LOCATE_PROTOCOL LocateProtocol;
|
|
EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces;
|
|
EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces;
|
|
|
|
//
|
|
// 32-bit CRC services.
|
|
//
|
|
EFI_CALCULATE_CRC32 CalculateCrc32;
|
|
|
|
//
|
|
// Miscellaneous services.
|
|
//
|
|
EFI_COPY_MEM CopyMem;
|
|
EFI_SET_MEM SetMem;
|
|
EFI_CREATE_EVENT_EX CreateEventEx; // UEFI 2.0+ only.
|
|
} EFI_BOOT_SERVICES;
|
|
|
|
//
|
|
// EFI Configuration Table and GUID definitions.
|
|
//
|
|
|
|
#define EFI_ACPI_20_TABLE_GUID \
|
|
{ 0x8868E871, 0xE4F1, 0x11D3, {0xBC, 0x22, 0x00, 0x80, 0xC7, 0x3C, 0x88, 0x81} }
|
|
#define EFI_ACPI_TABLE_GUID EFI_ACPI_20_TABLE_GUID
|
|
|
|
#define EFI_DTB_TABLE_GUID \
|
|
{ 0xB1B621D5, 0xF19C, 0x41A5, {0x83, 0x0B, 0xD9, 0x15, 0x2C, 0x69, 0xAA, 0xE0} }
|
|
|
|
#define MPS_TABLE_GUID \
|
|
{ 0xEB9D2D2F, 0x2D88, 0x11D3, {0x9A, 0x16, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
|
|
|
#define ACPI_TABLE_GUID \
|
|
{ 0xEB9D2D30, 0x2D88, 0x11D3, {0x9A, 0x16, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
|
#define ACPI_10_TABLE_GUID ACPI_TABLE_GUID
|
|
|
|
#define SMBIOS_TABLE_GUID \
|
|
{ 0xEB9D2D31, 0x2D88, 0x11D3, {0x9A, 0x16, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
|
|
|
#define SAL_SYSTEM_TABLE_GUID \
|
|
{ 0xEB9D2D32, 0x2D88, 0x11D3, {0x9A, 0x16, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
|
|
|
#define SMBIOS3_TABLE_GUID \
|
|
{ 0xF2FD1544, 0x9794, 0x4A2C, {0x99, 0x2E, 0xE5, 0xBB, 0xCF, 0x20, 0xE3, 0x94} }
|
|
|
|
typedef struct {
|
|
EFI_GUID VendorGuid;
|
|
VOID *VendorTable;
|
|
} EFI_CONFIGURATION_TABLE;
|
|
|
|
//
|
|
// EFI System Table.
|
|
// Signature: "IBI SYST".
|
|
//
|
|
|
|
#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
|
|
|
|
//
|
|
// EFI System Table revision numbers.
|
|
//
|
|
#define EFI_MAKE_REVISION(Major, Minor) (((Major) << 16) | (Minor))
|
|
#define EFI_1_02_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(1, 02)
|
|
#define EFI_1_10_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(1, 10)
|
|
#define EFI_2_00_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 00)
|
|
#define EFI_2_10_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 10)
|
|
#define EFI_2_20_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 20)
|
|
#define EFI_2_30_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 30)
|
|
#define EFI_2_31_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 31)
|
|
#define EFI_2_40_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 40)
|
|
#define EFI_2_50_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 50)
|
|
#define EFI_2_60_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 60)
|
|
#define EFI_2_70_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 70)
|
|
#define EFI_2_80_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 80)
|
|
#define EFI_2_90_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 90)
|
|
#define EFI_2_100_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 100)
|
|
#define EFI_2_110_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 110)
|
|
|
|
#define EFI_SYSTEM_TABLE_REVISION EFI_2_70_SYSTEM_TABLE_REVISION
|
|
#define EFI_SPECIFICATION_VERSION EFI_SYSTEM_TABLE_REVISION
|
|
|
|
struct _EFI_SYSTEM_TABLE {
|
|
EFI_TABLE_HEADER Hdr;
|
|
|
|
CHAR16 *FirmwareVendor;
|
|
UINT32 FirmwareRevision;
|
|
|
|
EFI_HANDLE ConsoleInHandle;
|
|
EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn;
|
|
|
|
EFI_HANDLE ConsoleOutHandle;
|
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
|
|
|
|
EFI_HANDLE StandardErrorHandle;
|
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *StdErr;
|
|
|
|
EFI_RUNTIME_SERVICES *RuntimeServices;
|
|
EFI_BOOT_SERVICES *BootServices;
|
|
|
|
UINTN NumberOfTableEntries;
|
|
EFI_CONFIGURATION_TABLE *ConfigurationTable;
|
|
};
|
|
|
|
//
|
|
// Image entry point prototype.
|
|
//
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_IMAGE_ENTRY_POINT) (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
);
|
|
|
|
#pragma pack()
|
|
|
|
#endif /* !_EFIAPI_H */
|