Implemented Boot Services
This commit is contained in:
parent
828603e9dc
commit
45c4280241
3 changed files with 639 additions and 2 deletions
548
efi.h
548
efi.h
|
@ -2,7 +2,56 @@
|
||||||
#define EFI_H
|
#define EFI_H
|
||||||
|
|
||||||
#include "guid.h"
|
#include "guid.h"
|
||||||
#include "_types.h"
|
#include "efi_types.h"
|
||||||
|
|
||||||
|
// Event types
|
||||||
|
#define EVT_TIMER 0x80000000
|
||||||
|
#define EVT_RUNTIME 0x40000000
|
||||||
|
|
||||||
|
#define EVT_NOTIFY_WAIT 0x00000100
|
||||||
|
#define EVT_NOTIFY_SIGNAL 0x00000200
|
||||||
|
|
||||||
|
#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
|
||||||
|
#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
|
||||||
|
//
|
||||||
|
|
||||||
|
// Task Priority Levels
|
||||||
|
#define TPL_APPLICATION 4
|
||||||
|
#define TPL_CALLBACK 8
|
||||||
|
#define TPL_NOTIFY 16
|
||||||
|
#define TPL_HIGH_LEVEL 31
|
||||||
|
//
|
||||||
|
|
||||||
|
// Memory Attributes
|
||||||
|
#define EFI_MEMORY_UC 0x0000000000000001
|
||||||
|
#define EFI_MEMORY_WC 0x0000000000000002
|
||||||
|
#define EFI_MEMORY_WT 0x0000000000000004
|
||||||
|
#define EFI_MEMORY_WB 0x0000000000000008
|
||||||
|
#define EFI_MEMORY_UCE 0x0000000000000010
|
||||||
|
#define EFI_MEMORY_WP 0x0000000000001000
|
||||||
|
#define EFI_MEMORY_RP 0x0000000000002000
|
||||||
|
#define EFI_MEMORY_XP 0x0000000000004000
|
||||||
|
#define EFI_MEMORY_NV 0x0000000000008000
|
||||||
|
#define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000
|
||||||
|
#define EFI_MEMORY_RO 0x0000000000020000
|
||||||
|
#define EFI_MEMORY_SP 0x0000000000040000
|
||||||
|
#define EFI_MEMORY_CPU_CRYPTO 0x0000000000080000
|
||||||
|
#define EFI_MEMORY_RUNTIME 0x8000000000000000
|
||||||
|
#define EFI_MEMORY_ISA_VALID 0x4000000000000000
|
||||||
|
#define EFI_MEMORY_ISA_MASK 0x0FFFF00000000000
|
||||||
|
//
|
||||||
|
|
||||||
|
// EFI Open Protocol Attributes
|
||||||
|
#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
|
||||||
|
//
|
||||||
|
|
||||||
|
// Memory Descriptor Version Number
|
||||||
|
#define EFI_MEMORY_DESCRIPTOR_VERSION 1
|
||||||
|
|
||||||
// EFI Simple Text Input Protocol
|
// EFI Simple Text Input Protocol
|
||||||
typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
|
typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
|
||||||
|
@ -10,12 +59,26 @@ typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
|
||||||
// EFI Simple Text Output Protocol
|
// EFI Simple Text Output Protocol
|
||||||
typedef struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
typedef struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
||||||
|
|
||||||
|
// EFI Device Path Protocol;
|
||||||
|
typedef struct EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL;
|
||||||
|
|
||||||
// EFI Runtime Services
|
// EFI Runtime Services
|
||||||
typedef struct EFI_RUNTIME_SERVICES EFI_RUNTIME_SERVICES;
|
typedef struct EFI_RUNTIME_SERVICES EFI_RUNTIME_SERVICES;
|
||||||
|
|
||||||
|
// EFI Boot Services
|
||||||
|
typedef struct EFI_BOOT_SERVICES EFI_BOOT_SERVICES;
|
||||||
|
|
||||||
// EFI System Table
|
// EFI System Table
|
||||||
typedef struct EFI_SYSTEM_TABLE EFI_SYSTEM_TABLE;
|
typedef struct EFI_SYSTEM_TABLE EFI_SYSTEM_TABLE;
|
||||||
|
|
||||||
|
// EFI GUID
|
||||||
|
typedef struct EFI_GUID {
|
||||||
|
UINT32 Data1;
|
||||||
|
UINT16 Data2;
|
||||||
|
UINT16 Data3;
|
||||||
|
UINT8 Data4[8];
|
||||||
|
} EFI_GUID;
|
||||||
|
|
||||||
// EFI Simple Text Output Mode
|
// EFI Simple Text Output Mode
|
||||||
typedef struct {
|
typedef struct {
|
||||||
INT32 MaxNode;
|
INT32 MaxNode;
|
||||||
|
@ -34,6 +97,12 @@ typedef struct {
|
||||||
CHAR16 UnicodeChar;
|
CHAR16 UnicodeChar;
|
||||||
} EFI_INPUT_KEY;
|
} EFI_INPUT_KEY;
|
||||||
|
|
||||||
|
// EFI HII Package List Header
|
||||||
|
typedef struct {
|
||||||
|
EFI_GUID PackageListGuid;
|
||||||
|
UINT32 PackagLength;
|
||||||
|
} EFI_HII_PACKAGE_LIST_HEADER;
|
||||||
|
|
||||||
// EFI Table Header
|
// EFI Table Header
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT64 Signature;
|
UINT64 Signature;
|
||||||
|
@ -43,6 +112,71 @@ typedef struct {
|
||||||
UINT32 Reserved;
|
UINT32 Reserved;
|
||||||
} EFI_TABLE_HEADER;
|
} EFI_TABLE_HEADER;
|
||||||
|
|
||||||
|
// EFI Memory Descriptor
|
||||||
|
typedef struct {
|
||||||
|
UINT32 Type;
|
||||||
|
EFI_PHYSICAL_ADDRESS PhysicalStart;
|
||||||
|
EFI_VIRTUAL_ADDRESS VirtualStart;
|
||||||
|
UINT64 NumberOfPages;
|
||||||
|
UINT64 Attribute;
|
||||||
|
} EFI_MEMORY_DESCRIPTOR;
|
||||||
|
|
||||||
|
// Open Protocol Information Entry
|
||||||
|
typedef struct {
|
||||||
|
EFI_HANDLE AgentHandle;
|
||||||
|
EFI_HANDLE ControllerHandle;
|
||||||
|
UINT32 Attributes;
|
||||||
|
UINT32 OpenCount;
|
||||||
|
} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
|
||||||
|
|
||||||
|
// EFI Timer Delay
|
||||||
|
typedef enum {
|
||||||
|
TimerCancel,
|
||||||
|
TimerPeriodic,
|
||||||
|
TimerRelative
|
||||||
|
} EFI_TIMER_DELAY;
|
||||||
|
|
||||||
|
// EFI Allocation Type
|
||||||
|
typedef enum {
|
||||||
|
AllocateAnyPages,
|
||||||
|
AllocateMaxAddress,
|
||||||
|
AllocateAddress,
|
||||||
|
MaxAllocateType
|
||||||
|
} EFI_ALLOCATE_TYPE;
|
||||||
|
|
||||||
|
// EFI Memory Type
|
||||||
|
typedef enum {
|
||||||
|
EfiReservedMemoryType,
|
||||||
|
EfiLoaderCode,
|
||||||
|
EfiLoaderData,
|
||||||
|
EfiBootServicesCode,
|
||||||
|
EfiBootServicesData,
|
||||||
|
EfiRuntimeServicesCode,
|
||||||
|
EfiRuntimeServicesData,
|
||||||
|
EfiConventionalMemory,
|
||||||
|
EfiUnusableMemory,
|
||||||
|
EfiACPIReclaimMemory,
|
||||||
|
EfiACPIMemoryNVS,
|
||||||
|
EfiMemoryMappedIO,
|
||||||
|
EfiMemoryMappedIOPortSpace,
|
||||||
|
EfiPalCode,
|
||||||
|
EfiPersistentMemory,
|
||||||
|
EfiUnacceptedMemoryType,
|
||||||
|
EfiMaxMemoryType
|
||||||
|
} EFI_MEMORY_TYPE;
|
||||||
|
|
||||||
|
// EFI Locate Search Type
|
||||||
|
typedef enum {
|
||||||
|
AllHandles,
|
||||||
|
ByRegisterNotify,
|
||||||
|
ByProtocol
|
||||||
|
} EFI_LOCATE_SEARCH_TYPE;
|
||||||
|
|
||||||
|
// EFI Interface Type
|
||||||
|
typedef enum {
|
||||||
|
EFI_NATIVE_INTERFACE
|
||||||
|
} EFI_INTERFACE_TYPE;
|
||||||
|
|
||||||
// EFI Reset Type
|
// EFI Reset Type
|
||||||
typedef enum {
|
typedef enum {
|
||||||
EfiResetCold,
|
EfiResetCold,
|
||||||
|
@ -148,10 +282,372 @@ VOID
|
||||||
IN VOID *ResetData OPTIONAL
|
IN VOID *ResetData OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// EFI Boot Services
|
||||||
|
|
||||||
|
typedef
|
||||||
|
VOID
|
||||||
|
(EFIAPI *EFI_EVENT_NOTIFY)(
|
||||||
|
IN EFI_EVENT Event,
|
||||||
|
IN VOID *Context
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
VOID
|
||||||
|
(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
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_CLOSE_EVENT)(
|
||||||
|
IN EFI_EVENT Event
|
||||||
|
);
|
||||||
|
|
||||||
|
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_CHECK_EVENT)(
|
||||||
|
IN EFI_EVENT Event
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_SET_TIMER)(
|
||||||
|
IN EFI_EVENT Event,
|
||||||
|
IN EFI_TIMER_DELAY Type,
|
||||||
|
IN UINT64 TriggerTime
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_TPL
|
||||||
|
(EFIAPI *EFI_RAISE_TPL)(
|
||||||
|
IN EFI_TPL NewTpl
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_TPL
|
||||||
|
(EFIAPI *EFI_RESTORE_TPL)(
|
||||||
|
IN EFI_TPL OldTpl
|
||||||
|
);
|
||||||
|
|
||||||
|
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,
|
||||||
|
OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
|
||||||
|
OUT UINTN *MapKey,
|
||||||
|
OUT UINTN *DescriptorSize,
|
||||||
|
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_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_UNINSTALL_PROTOCOL_INTERFACE)(
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
IN EFI_GUID *Protocol,
|
||||||
|
IN VOID *Interface
|
||||||
|
);
|
||||||
|
|
||||||
|
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_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_HANDLE_PROTOCOL)(
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
IN EFI_GUID *Protocol,
|
||||||
|
OUT VOID **Interface
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_LOCATE_DEVICE_PATH)(
|
||||||
|
IN EFI_GUID *Protocol,
|
||||||
|
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath,
|
||||||
|
OUT EFI_HANDLE *Device
|
||||||
|
);
|
||||||
|
|
||||||
|
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_CONNECT_CONTROLLER)(
|
||||||
|
IN EFI_HANDLE ControllerHandle,
|
||||||
|
IN EFI_HANDLE *DriverImageHandle OPTIONAL,
|
||||||
|
IN EFI_DEVICE_PATH_PROTOCOL *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
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef EFI_STATUS
|
||||||
|
(EFIAPI *EFI_PROTOCOLS_PER_HANDLE)(
|
||||||
|
IN EFI_HANDLE Handle,
|
||||||
|
OUT EFI_GUID ***ProtocolBuffer,
|
||||||
|
OUT UINTN *ProtocolBufferCount
|
||||||
|
);
|
||||||
|
|
||||||
|
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
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES)(
|
||||||
|
IN OUT EFI_HANDLE *Handle,
|
||||||
|
...
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES)(
|
||||||
|
IN OUT EFI_HANDLE *Handle,
|
||||||
|
...
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_IMAGE_LOAD)(
|
||||||
|
IN BOOLEAN BootPolicy,
|
||||||
|
IN EFI_HANDLE ParentImageHandle,
|
||||||
|
IN EFI_DEVICE_PATH_PROTOCOL *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_IMAGE_UNLOAD)(
|
||||||
|
IN EFI_HANDLE ImageHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
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_SET_WATCHDOG_TIMER)(
|
||||||
|
IN UINTN Timeout,
|
||||||
|
IN UINT64 WatchDogCode,
|
||||||
|
IN UINTN DataSize,
|
||||||
|
IN CHAR16 *WatchdogData OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_STALL)(
|
||||||
|
IN UINTN Microseconds
|
||||||
|
);
|
||||||
|
|
||||||
|
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
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT)(
|
||||||
|
OUT UINT64 *Count
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE)(
|
||||||
|
IN EFI_GUID *Guid,
|
||||||
|
IN VOID *Table
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef
|
||||||
|
EFI_STATUS
|
||||||
|
(EFIAPI *EFI_CALCULATE_CRC32)(
|
||||||
|
IN VOID *Data,
|
||||||
|
IN UINTN DataSize,
|
||||||
|
OUT UINT32 *Crc32
|
||||||
|
);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* Protocols & Tables *
|
* Protocols & Tables *
|
||||||
**********************/
|
**********************/
|
||||||
|
|
||||||
|
// EFI HII Package List Protocol
|
||||||
|
typedef EFI_HII_PACKAGE_LIST_HEADER *EFI_HII_PACKAGE_LIST_PROTOCOL;
|
||||||
|
|
||||||
|
// EFI Device Path Protocol
|
||||||
|
typedef struct EFI_DEVICE_PATH_PROTOCOL {
|
||||||
|
UINT8 Type;
|
||||||
|
UINT8 SubType;
|
||||||
|
UINT8 Length[2];
|
||||||
|
} EFI_DEVICE_PATH_PROTOCOL;
|
||||||
|
|
||||||
// EFI Simple Text Input Protocol
|
// EFI Simple Text Input Protocol
|
||||||
typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL {
|
typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL {
|
||||||
void *Reset;
|
void *Reset;
|
||||||
|
@ -204,6 +700,54 @@ typedef struct EFI_RUNTIME_SERVICES {
|
||||||
void *QueryVariableInfo;
|
void *QueryVariableInfo;
|
||||||
} EFI_RUNTIME_SERVICES;
|
} EFI_RUNTIME_SERVICES;
|
||||||
|
|
||||||
|
// EFI Boot Services
|
||||||
|
|
||||||
|
typedef struct EFI_BOOT_SERVICES {
|
||||||
|
EFI_CREATE_EVENT CreateEvent;
|
||||||
|
EFI_CREATE_EVENT_EX CreateEventEx;
|
||||||
|
EFI_CLOSE_EVENT CloseEvent;
|
||||||
|
EFI_SIGNAL_EVENT SignalEvent;
|
||||||
|
EFI_WAIT_FOR_EVENT WaitForEvent;
|
||||||
|
EFI_CHECK_EVENT CheckEvent;
|
||||||
|
EFI_SET_TIMER SetTimer;
|
||||||
|
EFI_RAISE_TPL RaiseTPL;
|
||||||
|
EFI_RESTORE_TPL RestoreTPL;
|
||||||
|
EFI_ALLOCATE_PAGES AllocatePages;
|
||||||
|
EFI_FREE_PAGES FreePages;
|
||||||
|
EFI_GET_MEMORY_MAP GetMemoryMap;
|
||||||
|
EFI_ALLOCATE_POOL AllocatePool;
|
||||||
|
EFI_FREE_POOL FreePool;
|
||||||
|
EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
|
||||||
|
EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
|
||||||
|
EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
|
||||||
|
EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify;
|
||||||
|
EFI_LOCATE_HANDLE LocateHandle;
|
||||||
|
EFI_HANDLE_PROTOCOL HandleProtocol;
|
||||||
|
EFI_LOCATE_DEVICE_PATH LocateDevicePath;
|
||||||
|
EFI_OPEN_PROTOCOL OpenProtocol;
|
||||||
|
EFI_CLOSE_PROTOCOL CloseProtocol;
|
||||||
|
EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation;
|
||||||
|
EFI_CONNECT_CONTROLLER ConnectController;
|
||||||
|
EFI_DISCONNECT_CONTROLLER DisconnectController;
|
||||||
|
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;
|
||||||
|
EFI_IMAGE_LOAD LoadImage;
|
||||||
|
EFI_IMAGE_START StartImage;
|
||||||
|
EFI_IMAGE_UNLOAD UnloadImage;
|
||||||
|
EFI_EXIT Exit;
|
||||||
|
EFI_EXIT_BOOT_SERVICES ExitBootServices;
|
||||||
|
EFI_SET_WATCHDOG_TIMER SetWatchdogTimer;
|
||||||
|
EFI_STALL Stall;
|
||||||
|
EFI_COPY_MEM CopyMem;
|
||||||
|
EFI_SET_MEM SetMem;
|
||||||
|
EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount;
|
||||||
|
EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
|
||||||
|
EFI_CALCULATE_CRC32 CalculateCrc32;
|
||||||
|
} EFI_BOOT_SERVICES;
|
||||||
|
|
||||||
// EFI System Table
|
// EFI System Table
|
||||||
typedef struct EFI_SYSTEM_TABLE {
|
typedef struct EFI_SYSTEM_TABLE {
|
||||||
EFI_TABLE_HEADER Hdr;
|
EFI_TABLE_HEADER Hdr;
|
||||||
|
@ -217,7 +761,7 @@ typedef struct EFI_SYSTEM_TABLE {
|
||||||
void *StandardErrorHandle;
|
void *StandardErrorHandle;
|
||||||
void *StdErr;
|
void *StdErr;
|
||||||
EFI_RUNTIME_SERVICES *RuntimeServices;
|
EFI_RUNTIME_SERVICES *RuntimeServices;
|
||||||
void *BootServices;
|
EFI_BOOT_SERVICES *BootServices;
|
||||||
UINTN NumberOfTableEntries;
|
UINTN NumberOfTableEntries;
|
||||||
void *ConfigurationTable;
|
void *ConfigurationTable;
|
||||||
} EFI_SYSTEM_TABLE;
|
} EFI_SYSTEM_TABLE;
|
||||||
|
|
88
efi_types.h
Normal file
88
efi_types.h
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
#ifndef EFI_TYPES_H
|
||||||
|
#define EFI_TYPES_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
// Wide character
|
||||||
|
typedef uint_least16_t char16_t;
|
||||||
|
|
||||||
|
// Common UEFI Data types
|
||||||
|
typedef uint8_t BOOLEAN;
|
||||||
|
typedef int8_t INT8;
|
||||||
|
typedef uint8_t UINT8;
|
||||||
|
typedef int16_t INT16;
|
||||||
|
typedef uint16_t UINT16;
|
||||||
|
typedef int32_t INT32;
|
||||||
|
typedef uint32_t UINT32;
|
||||||
|
typedef int64_t INT64;
|
||||||
|
typedef uint64_t UINT64;
|
||||||
|
typedef int64_t INTN;
|
||||||
|
typedef uint64_t UINTN;
|
||||||
|
typedef char CHAR8;
|
||||||
|
typedef char16_t CHAR16;
|
||||||
|
typedef void VOID;
|
||||||
|
|
||||||
|
typedef UINTN EFI_STATUS;
|
||||||
|
typedef VOID *EFI_HANDLE;
|
||||||
|
typedef VOID *EFI_EVENT;
|
||||||
|
typedef UINT64 EFI_LBA;
|
||||||
|
typedef UINTN EFI_TPL;
|
||||||
|
|
||||||
|
// https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Base.h
|
||||||
|
#define IN
|
||||||
|
#define OUT
|
||||||
|
#define OPTIONAL
|
||||||
|
#define CONST const
|
||||||
|
|
||||||
|
// x86_64 Microsoft calling convention
|
||||||
|
// https://github.com/vathpela/gnu-efi/blob/master/inc/x86_64/efibind.h
|
||||||
|
#define EFIAPI __attribute__((ms_abi))
|
||||||
|
|
||||||
|
// EFI Physical Address
|
||||||
|
typedef UINT64 EFI_PHYSICAL_ADDRESS;
|
||||||
|
|
||||||
|
// EFI Virtual Address
|
||||||
|
typedef UINT64 EFI_VIRTUAL_ADDRESS;
|
||||||
|
|
||||||
|
// Task Priority Level
|
||||||
|
typedef UINTN EFI_TPL;
|
||||||
|
|
||||||
|
// EFI Status Codes
|
||||||
|
#define EFI_SUCCESS 0
|
||||||
|
|
||||||
|
// Text color attributes
|
||||||
|
#define EFI_BLACK 0x00
|
||||||
|
#define EFI_BLUE 0x01
|
||||||
|
#define EFI_GREEN 0x02
|
||||||
|
#define EFI_CYAN 0x03
|
||||||
|
#define EFI_RED 0x04
|
||||||
|
#define EFI_MAGENTA 0x05
|
||||||
|
#define EFI_BROWN 0x06
|
||||||
|
#define EFI_LIGHTGRAY 0x07
|
||||||
|
#define EFI_BRIGHT 0x08
|
||||||
|
#define EFI_DARKGRAY (EFI_BLACK | EFI_BRIGHT) 0x08
|
||||||
|
#define EFI_LIGHTBLUE 0x09
|
||||||
|
#define EFI_LIGHTGREEN 0x0A
|
||||||
|
#define EFI_LIGHTCYAN 0x0B
|
||||||
|
#define EFI_LIGHTRED 0x0C
|
||||||
|
#define EFI_LIGHTMAGENTA 0x0D
|
||||||
|
#define EFI_YELLOW 0x0E
|
||||||
|
#define EFI_WHITE 0x0F
|
||||||
|
|
||||||
|
// Text background colors
|
||||||
|
#define EFI_BACKGROUND_BLACK 0x00
|
||||||
|
#define EFI_BACKGROUND_BLUE 0x10
|
||||||
|
#define EFI_BACKGROUND_GREEN 0x20
|
||||||
|
#define EFI_BACKGROUND_CYAN 0x30
|
||||||
|
#define EFI_BACKGROUND_RED 0x40
|
||||||
|
#define EFI_BACKGROUND_MAGENTA 0x50
|
||||||
|
#define EFI_BACKGROUND_BROWN 0x60
|
||||||
|
#define EFI_BACKGROUND_LIGHTGRAY 0x70
|
||||||
|
|
||||||
|
// Converts Foreground and Background colors into a single value
|
||||||
|
#define EFI_TEXT_ATTR(Foreground,Background) \
|
||||||
|
((Foreground) | ((Background) << 4))
|
||||||
|
|
||||||
|
#endif /* EFI_TYPES_H */
|
5
guid.h
5
guid.h
|
@ -1,7 +1,12 @@
|
||||||
#ifndef GUID_H
|
#ifndef GUID_H
|
||||||
#define GUID_H
|
#define GUID_H
|
||||||
|
|
||||||
|
// Simple Text I/O Protocols
|
||||||
#define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID {0x387477c1,0x69c7,0x11d2, {0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}}
|
#define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID {0x387477c1,0x69c7,0x11d2, {0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}}
|
||||||
#define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID {0x387477c2,0x69c7,0x11d2, {0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}}
|
#define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID {0x387477c2,0x69c7,0x11d2, {0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}}
|
||||||
|
|
||||||
|
// Boot Services
|
||||||
|
#define EFI_HII_PACKAGE_LIST_PROTOCOL_GUID {0x6a1ee763,0xd47a,0x43b4, {0xaa,0xbe,0xef,0x1d,0xe2,0xab,0x56,0xfc}}
|
||||||
|
#define EFI_DEVICE_PATH_PROTOCOL_GUID {0x09576e91,0x6d3f,0x11d2, {0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}}
|
||||||
|
|
||||||
#endif /* GUID_H */
|
#endif /* GUID_H */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue