From 937e50d0ee92e63e65d08a7b68b7522726534f9b Mon Sep 17 00:00:00 2001 From: Jozef Nagy Date: Fri, 29 Mar 2024 22:39:42 +0100 Subject: [PATCH] Rewrite and reorganize the entire codebase --- efi.h | 1211 +--------------------- efi_bs.h | 546 ++++++++++ efi_rs.h | 240 +++++ efi_st.h | 123 +++ efi_types.h | 8 + efilib.c | 77 -- efilib.h | 10 - guid.h | 55 - protocols/boot_manager_policy.h | 32 + protocols/bus_specific_driver_override.h | 19 + protocols/device_path.h | 12 + protocols/driver_binding.h | 40 + protocols/file.h | 156 +++ protocols/loaded_image.h | 34 + protocols/loaded_image_device_path.h | 12 + protocols/platform_driver_override.h | 39 + protocols/simple_file_system.h | 18 + protocols/simple_text_input.h | 34 + protocols/simple_text_output.h | 95 ++ 19 files changed, 1422 insertions(+), 1339 deletions(-) create mode 100644 efi_bs.h create mode 100644 efi_rs.h create mode 100644 efi_st.h delete mode 100644 efilib.c delete mode 100644 efilib.h delete mode 100644 guid.h create mode 100644 protocols/boot_manager_policy.h create mode 100644 protocols/bus_specific_driver_override.h create mode 100644 protocols/device_path.h create mode 100644 protocols/driver_binding.h create mode 100644 protocols/file.h create mode 100644 protocols/loaded_image.h create mode 100644 protocols/loaded_image_device_path.h create mode 100644 protocols/platform_driver_override.h create mode 100644 protocols/simple_file_system.h create mode 100644 protocols/simple_text_input.h create mode 100644 protocols/simple_text_output.h diff --git a/efi.h b/efi.h index 56ce08c..5962d18 100644 --- a/efi.h +++ b/efi.h @@ -1,21 +1,23 @@ #ifndef EFI_H #define EFI_H -#include "guid.h" #include "efi_types.h" +typedef struct { + UINT64 Signature; + UINT32 Revision; + UINT32 HeaderSize; + UINT32 CRC32; + UINT32 Reserved; +} EFI_TABLE_HEADER; + +#define EFI_GLOBAL_VARIABLE {0x8be4df61,0x93ca,0x11d2, {0xaa,0x0d,0x00,0xe0,0x98,0x03,0x2b,0x8c}} + // Variable-size array #define ANYSIZE_ARRAY 1 // 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 @@ -25,26 +27,6 @@ #define TPL_HIGH_LEVEL 31 // -// EFI System Table Revisions -#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 -#define EFI_2_100_SYSTEM_TABLE_REVISION ((2<<16) | (100)) -#define EFI_2_90_SYSTEM_TABLE_REVISION ((2<<16) | (90)) -#define EFI_2_80_SYSTEM_TABLE_REVISION ((2<<16) | (80)) -#define EFI_2_70_SYSTEM_TABLE_REVISION ((2<<16) | (70)) -#define EFI_2_60_SYSTEM_TABLE_REVISION ((2<<16) | (60)) -#define EFI_2_50_SYSTEM_TABLE_REVISION ((2<<16) | (50)) -#define EFI_2_40_SYSTEM_TABLE_REVISION ((2<<16) | (40)) -#define EFI_2_31_SYSTEM_TABLE_REVISION ((2<<16) | (31)) -#define EFI_2_30_SYSTEM_TABLE_REVISION ((2<<16) | (30)) -#define EFI_2_20_SYSTEM_TABLE_REVISION ((2<<16) | (20)) -#define EFI_2_10_SYSTEM_TABLE_REVISION ((2<<16) | (10)) -#define EFI_2_00_SYSTEM_TABLE_REVISION ((2<<16) | (00)) -#define EFI_1_10_SYSTEM_TABLE_REVISION ((1<<16) | (10)) -#define EFI_1_02_SYSTEM_TABLE_REVISION ((1<<16) | (02)) -#define EFI_SPECIFICATION_VERSION EFI_SYSTEM_TABLE_REVISION -#define EFI_SYSTEM_TABLE_REVISION EFI_2_100_SYSTEM_TABLE_REVISION -// - // OS Indications #define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001 #define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002 @@ -56,55 +38,6 @@ #define EFI_OS_INDICATIONS_JSON_CONFIG_DATA_REFRESH 0x0000000000000080 // -// Simple File System Protocol revisions -#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000 -// - -// File Protocol revisions -#define EFI_FILE_PROTOCOL_REVISION 0x00010000 -#define EFI_FILE_PROTOCOL_REVISION2 0x00020000 -#define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2 -// - -// File Protocol modes and attributes -#define EFI_FILE_MODE_READ 0x0000000000000001 -#define EFI_FILE_MODE_WRITE 0x0000000000000002 -#define EFI_FILE_MODE_CREATE 0x8000000000000000 - -#define EFI_FILE_READ_ONLY 0x0000000000000001 -#define EFI_FILE_HIDDEN 0x0000000000000002 -#define EFI_FILE_SYSTEM 0x0000000000000004 -#define EFI_FILE_RESERVED 0x0000000000000008 -#define EFI_FILE_DIRECTORY 0x0000000000000010 -#define EFI_FILE_ARCHIVE 0x0000000000000020 -#define EFI_FILE_VALID_ATTR 0x0000000000000037 -// - -// 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 -// - -// Capsule Flags -#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 -#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 -#define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 -// - // Time #define EFI_TIME_ADJUST_DAYLIGHT 0x01 #define EFI_TIME_IN_DAYLIGHT 0x02 @@ -140,1126 +73,10 @@ // Memory Descriptor Version Number #define EFI_MEMORY_DESCRIPTOR_VERSION 1 -// EFI Simple Text Input Protocol -typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL; +#include "efi_st.h" +#include "efi_rs.h" +#include "efi_bs.h" -// 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 Simple File System Protocol -typedef struct EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; - -// EFI File Protocol -typedef struct EFI_FILE_PROTOCOL EFI_FILE_PROTOCOL; - -// 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 -typedef struct EFI_SYSTEM_TABLE EFI_SYSTEM_TABLE; - -// EFI Certificate RSA2048 SHA256 Block -typedef struct _EFI_CERT_BLOCK_RSA_2048_SHA256 { - EFI_GUID HashType; - UINT8 PublicKey[256]; - UINT8 Signature[256]; -} EFI_CERT_BLOCK_RSA_2048_SHA256; - -// EFI WinCertificate -typedef struct _WIN_CERTIFICATE { - UINT32 dwLength; - UINT16 wRevision; - UINT16 wCertificateType; - UINT8 bCertificate[ANYSIZE_ARRAY]; -} WIN_CERTIFICATE; - -typedef struct _WIN_CERTIFICATE_UEFI_GUID { - WIN_CERTIFICATE Hdr; - EFI_GUID CertType; - UINT8 CertData[ANYSIZE_ARRAY]; -} WIN_CERTIFICATE_UEFI_GUID; - -// EFI Simple Text Output Mode -typedef struct { - INT32 MaxNode; - - // Current settings - INT32 Mode; - INT32 Attribute; - INT32 CursorColumn; - INT32 CursorRow; - BOOLEAN CursorVisible; -} SIMPLE_TEXT_OUTPUT_MODE; - -// Input Key -typedef struct { - UINT16 ScanCode; - CHAR16 UnicodeChar; -} EFI_INPUT_KEY; - -// EFI File I/O Token -typedef struct { - EFI_EVENT Event; - EFI_STATUS Status; - UINTN BufferSize; - VOID *Buffer; -} EFI_FILE_IO_TOKEN; - -// EFI Time -typedef struct { - UINT16 Year; - UINT8 Month; - UINT8 Day; - UINT8 Hour; - UINT8 Minute; - UINT8 Second; - UINT8 Pad1; - UINT32 Nanosecond; - INT16 TimeZone; - UINT8 Daylight; - UINT8 Pad2; -} EFI_TIME; - -// EFI Time Capabilities -typedef struct { - UINT32 Resolution; - UINT32 Accuracy; - BOOLEAN SetsToZero; -} EFI_TIME_CAPABILITIES; - -// EFI HII Package List Header -typedef struct { - EFI_GUID PackageListGuid; - UINT32 PackagLength; -} EFI_HII_PACKAGE_LIST_HEADER; - -// EFI Table Header -typedef struct { - UINT64 Signature; - UINT32 Revision; - UINT32 HeaderSize; - UINT32 CRC32; - UINT32 Reserved; -} EFI_TABLE_HEADER; - -// EFI Variable Authentication -typedef struct { - UINT64 MonotonicCount; - WIN_CERTIFICATE_UEFI_GUID AuthInfo; -} EFI_VARIABLE_AUTHENTICATION; - -// EFI Memory Descriptor -typedef struct { - UINT32 Type; - EFI_PHYSICAL_ADDRESS PhysicalStart; - EFI_VIRTUAL_ADDRESS VirtualStart; - UINT64 NumberOfPages; - UINT64 Attribute; -} EFI_MEMORY_DESCRIPTOR; - -typedef struct { - EFI_PHYSICAL_ADDRESS Address; - UINT64 Length; -} EFI_MEMORY_RANGE; - -// EFI Capsule Header -typedef struct { - EFI_GUID CapsuleGuid; - UINT32 HeaderSize; - UINT32 Flags; - UINT32 CapsuleImageSize; -} EFI_CAPSULE_HEADER; - -// EFI Capsule Block -typedef struct { - UINT64 Length; - union { - EFI_PHYSICAL_ADDRESS DataBlock; - EFI_PHYSICAL_ADDRESS ContinuationPointer; - } Union; -} EFI_CAPSULE_BLOCK_DESCRIPTOR; - -// EFI Memory Range Capsule -typedef struct { - EFI_CAPSULE_HEADER Header; - UINT32 OsRequestedMemoryType; - UINT64 NumberOfMemoryRanges; - EFI_MEMORY_RANGE MemoryRanges[]; -} EFI_MEMORY_RANGE_CAPSULE; - -typedef struct { - UINT64 FirmwareMemoryRequirement; - UINT64 NumberOfMemoryRanges; -} EFI_MEMORY_RANGE_CAPSULE_RESULT; - -typedef struct { - UINT32 VariableTotalSize; - UINT32 Reserved; - EFI_GUID CapsuleGuid; - EFI_TIME CapsuleProcessed; - EFI_STATUS CapsuleStatus; -} EFI_CAPSULE_RESULT_VARIABLE_HEADER; - -typedef struct { - UINT16 Version; - UINT8 PayloadIndex; - UINT8 UpdateImageIndex; - EFI_GUID UpdateImageTypeId; - //CHAR16 CapsuleFileName[]; - //CHAR16 CapsuleTarget[]; -} EFI_CAPSULE_RESULT_VARIABLE_FMP; - -typedef struct { - UINT32 Version; - UINT32 CapsuleId; - UINT32 RespLength; - UINT8 Resp[]; -} EFI_CAPSULE_RESULT_VARIABLE_JSON; - -// 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 -typedef enum { - EfiResetCold, - EfiResetWarm, - EfiResetShutdown, - EfiResetPlatformSpecific -} EFI_RESET_TYPE; - -/********************** - * FUNCTIONS * - **********************/ - -typedef EFI_STATUS -(EFIAPI *EFI_IMAGE_ENTRY_POINT)( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable -); - -// EFI Simple Text Input Protocol - -typedef -EFI_STATUS -(EFIAPI *EFI_INPUT_READ_KEY)( - IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, - OUT EFI_INPUT_KEY *Key -); - -typedef -EFI_STATUS -(EFIAPI *EFI_INPUT_RESET)( - IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, - IN BOOLEAN ExtendedVerification -); - -// EFI Simple Text Output Protocol - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_RESET)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, - IN BOOLEAN ExtendedVerification -); - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_STRING)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, - IN CHAR16 *String -); - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_TEST_STRING)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, - IN CHAR16 *String -); - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_QUERY_MODE)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, - IN UINTN ModeNumber, - OUT UINTN *Columns, - OUT UINTN *Rows -); - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_SET_MODE)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, - IN UINTN ModeNumber -); - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_SET_ATTRIBUTE)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, - IN UINTN Attribute -); - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_CLEAR_SCREEN)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This -); - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_SET_CURSOR_POSITION)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, - IN UINTN Column, - IN UINTN Row -); - -typedef -EFI_STATUS -(EFIAPI *EFI_TEXT_ENABLE_CURSOR)( - IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, - IN BOOLEAN Visible -); - -// EFI Simple File System Protocol -typedef -EFI_STATUS -(EFIAPI *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME)( - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **Root -); - -// EFI File Protocol - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_OPEN)( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_CLOSE)( - IN EFI_FILE_PROTOCOL *This -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_DELETE)( - IN EFI_FILE_PROTOCOL *This -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_READ)( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_WRITE)( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - IN VOID *Buffer -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_OPEN_EX)( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes, - IN OUT EFI_FILE_IO_TOKEN *Token -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_READ_EX)( - IN EFI_FILE_PROTOCOL *This, - IN OUT EFI_FILE_IO_TOKEN *Token -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_WRITE_EX)( - IN EFI_FILE_PROTOCOL *This, - IN OUT EFI_FILE_IO_TOKEN *Token -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_FLUSH_EX)( - IN EFI_FILE_PROTOCOL *This, - IN OUT EFI_FILE_IO_TOKEN *Token -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_SET_POSITION)( - IN EFI_FILE_PROTOCOL *This, - IN UINT64 Position -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_GET_POSITION)( - IN EFI_FILE_PROTOCOL *This, - OUT UINT64 Position -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_GET_INFO)( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_SET_INFO)( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer -); - -typedef -EFI_STATUS -(EFIAPI *EFI_FILE_FLUSH)( - IN EFI_FILE_PROTOCOL *This -); - -// EFI Runtime Services - -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 -); - -typedef -EFI_STATUS -(EFIAPI *EFI_QUERY_VARIABLE_INFO)( - IN UINT32 Attributes, - OUT UINT64 *MaximumVariableStorageSize, - OUT UINT64 *RemainingVariableStorageSize, - OUT UINT64 *MaximumVariableSize -); - -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 *Enable, - OUT BOOLEAN *Pending, - OUT EFI_TIME *Time -); - -typedef -EFI_STATUS -(EFIAPI *EFI_SET_WAKEUP_TIME)( - IN BOOLEAN Enable, - IN EFI_TIME *Time -); - -typedef -EFI_STATUS -(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP)( - IN UINTN MemoryMapSize, - IN UINTN DescriptorSize, - IN UINT32 DescriptorVersion, - IN EFI_MEMORY_DESCRIPTOR *VirtualMap -); - -typedef -EFI_STATUS -(EFIAPI *EFI_CONVERT_POINTER)( - IN UINTN DebugDisposition, - IN VOID **Address -); - -typedef -EFI_STATUS -(EFIAPI *EFI_RESET_SYSTEM)( - IN EFI_RESET_TYPE ResetType, - IN EFI_STATUS ResetStatus, - IN UINTN DataSize, - IN VOID *ResetData OPTIONAL -); - -typedef -EFI_STATUS -(EFIAPI *EFI_GET_NEXT_HIGH_MONOTONIC_COUNT)( - OUT UINT32 *HighCount -); - -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 -); - - - -// 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 * - **********************/ - -// 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 -typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL { - EFI_INPUT_RESET Reset; - EFI_INPUT_READ_KEY ReadKeyStroke; - EFI_EVENT WaitForKey; -} EFI_SIMPLE_TEXT_INPUT_PROTOCOL; - -// EFI Simple Text Output Protocol -typedef struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL { - EFI_TEXT_RESET Reset; - EFI_TEXT_STRING OutputString; - EFI_TEXT_TEST_STRING TestString; - EFI_TEXT_QUERY_MODE QueryMode; - EFI_TEXT_SET_MODE SetMode; - EFI_TEXT_SET_ATTRIBUTE SetAttribute; - EFI_TEXT_CLEAR_SCREEN ClearScreen; - EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition; - EFI_TEXT_ENABLE_CURSOR EnableCursor; - SIMPLE_TEXT_OUTPUT_MODE *Mode; -} EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL; - -// EFI Simple File System Protocol -typedef struct EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { - UINT64 Revision; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME OpenVolume; -} EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; - -// EFI File Protocol -typedef struct EFI_FILE_PROTOCOL { - UINT64 Revision; - - EFI_FILE_OPEN Open; - EFI_FILE_CLOSE Close; - EFI_FILE_DELETE Delete; - EFI_FILE_READ Read; - EFI_FILE_WRITE Write; - EFI_FILE_GET_POSITION GetPosition; - EFI_FILE_SET_POSITION SetPosition; - EFI_FILE_GET_INFO GetInfo; - EFI_FILE_SET_INFO SetInfo; - EFI_FILE_FLUSH Flush; - - // Added for revision 2 - EFI_FILE_OPEN_EX OpenEx; - EFI_FILE_READ_EX ReadEx; - EFI_FILE_WRITE_EX WriteEx; - EFI_FILE_FLUSH_EX FlushEx; -} EFI_FILE_PROTOCOL; - -// EFI Runtime Services -typedef struct EFI_RUNTIME_SERVICES { - 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_MONOTONIC_COUNT GetNextHighMonotonicCount; - EFI_RESET_SYSTEM ResetSystem; - - // UEFI 2.0 Capsule Services - EFI_UPDATE_CAPSULE UpdateCapsule; - EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; - - // Miscellaneous UEFI 2.0 Service - EFI_QUERY_VARIABLE_INFO QueryVariableInfo; -} EFI_RUNTIME_SERVICES; - -// EFI Boot Services - -typedef struct EFI_BOOT_SERVICES { - 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; - VOID *Reserved; - 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; - - // DriverSupport 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; -} EFI_BOOT_SERVICES; - -// EFI Capsule Table -typedef struct { - UINT32 CapsuleArrayNumber; - VOID *CapsulePtr[ANYSIZE_ARRAY]; -} EFI_CAPSULE_TABLE; - -// EFI Configuration Table -typedef struct { - EFI_GUID VendorGuid; - VOID *VendorTable; -} EFI_CONFIGURATION_TABLE; - -// EFI System Table -typedef 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; -} EFI_SYSTEM_TABLE; +#define EFI_ERROR(Status) (((INTN)(EFI_STATUS)(Status)) < 0) #endif /* EFI_H */ diff --git a/efi_bs.h b/efi_bs.h new file mode 100644 index 0000000..519613e --- /dev/null +++ b/efi_bs.h @@ -0,0 +1,546 @@ +#ifndef EFI_BOOT_SERVICES_H +#define EFI_BOOT_SERVICES_H + +#include "efi_types.h" + +#include "protocols/device_path.h" + +#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 +#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION + +#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 + +#define EFI_EVENT_GROUP_EXIT_BOOT_SERVICES {0x27abf055,0xb1b8,0x4c26, {0x80,0x48,0x74,0x8f,0x37,0xba,0xa2,0xdf}} +#define EFI_EVENT_GROUP_BEFORE_EXIT_BOOT_SERVICES {0x8be0e274,0x3970,0x4b44, {0x80,0xc5,0x1a,0xb9,0x50,0x2f,0x3b,0xfc}} +#define EFI_EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE {0x13fa7698,0xc831,0x49c7, {0x87,0xea,0x8f,0x43,0xfc,0xc2,0x51,0x96}} +#define EFI_EVENT_GROUP_MEMORY_MAP_CHANGE {0x78bee926,0x692f,0x48fd, {0x9e,0xdb,0x1,0x42,0x2e, 0xf0,0xd7,0xab}} +#define EFI_EVENT_GROUP_READY_TO_BOOT {0x7ce88fb3,0x4bd7,0x4679, {0x87,0xa8,0xa8,0xd8,0xde,0xe5,0xd,0x2b}} +#define EFI_EVENT_GROUP_AFTER_READY_TO_BOOT {0x3a2a00ad,0x98b9,0x4cdf, {0xa4,0x78,0x70,0x27,0x77,0xf1,0xc1,0xb}} +#define EFI_EVENT_GROUP_RESET_SYSTEM {0x62da6a56,0x13fb,0x485a, {0xa8,0xda,0xa3,0xdd,0x79,0x12,0xcb,0x6b}} + +#define TPL_APPLICATION 4 +#define TPL_CALLBACK 8 +#define TPL_NOTIFY 16 +#define TPL_HIGH_LEVEL 31 + +#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 + +#define EFI_MEMORY_DESCRIPTOR_VERSION 1 + +#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 struct _EFI_BOOT_SERVICES EFI_BOOT_SERVICES; + +typedef enum { + TimerCancel, + TimerPeriodic, + TimerRelative +} EFI_TIMER_DELAY; + +typedef enum { + AllocateAnyPages, + AllocateMaxAddress, + AllocateAddress, + MaxAllocateType +} EFI_ALLOCATE_TYPE; + +typedef enum { + EfiReservedMemoryType, + EfiLoaderCode, + EfiLoaderData, + EfiBootServicesCode, + EfiBootServicesData, + EfiRuntimeServicesCode, + EfiRuntimeServicesData, + EfiConventionalMemory, + EfiUnusableMemory, + EfiACPIReclaimMemory, + EfiACPIMemoryNVS, + EfiMemoryMappedIO, + EfiMemoryMappedIOPortSpace, + EfiPalCode, + EfiPersistentMemory, + EfiUnacceptedMemoryType, + EfiMaxMemoryType +} EFI_MEMORY_TYPE; + +typedef enum { + EFI_NATIVE_INTERFACE +} EFI_INTERFACE_TYPE; + +typedef enum { + AllHandles, + ByRegisterNotify, + ByProtocol +} EFI_LOCATE_SEARCH_TYPE; + +typedef struct { + UINT32 Type; + EFI_PHYSICAL_ADDRESS PhysicalStart; + EFI_VIRTUAL_ADDRESS VirtualStart; + UINT64 NumberOfPages; + UINT64 Attribute; +} EFI_MEMORY_DESCRIPTOR; + +typedef struct { + UINT32 Data1; + UINT16 Data2; + UINT16 Data3; + UINT8 Data4[8]; +} EFI_GUID; + +typedef struct { + EFI_HANDLE AgentHandle; + EFI_HANDLE ControllerHandle; + UINT32 Attributes; + UINT32 OpenCount; +} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; + +typedef +VOID +(EFIAPI *EFI_EVENT_NOTIFY)( + IN EFI_EVENT Event, + IN VOID *Context +); + +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 +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_SET_TIMER)( + IN EFI_EVENT Event, + IN EFI_TIMER_DELAY Type, + IN UINT64 TriggerTime +); + +typedef +EFI_STATUS +(EFIAPI *EFI_WAIT_FOR_EVENT)( + IN UINTN NumberOfEvents, + IN EFI_EVENT *Event, + OUT UINTN *Index +); + +typedef +EFI_STATUS +(EFIAPI *EFI_SIGNAL_EVENT)( + IN EFI_EVENT Event +); + +typedef +EFI_STATUS +(EFIAPI *EFI_CLOSE_EVENT)( + IN EFI_EVENT Event +); + +typedef +EFI_STATUS +(EFIAPI *EFI_CHECK_EVENT)( + IN EFI_EVENT Event +); + +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_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_HANDLE_PROTOCOL)( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + OUT VOID **Interface +); + +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_PROTOCOL **DevicePath, + OUT EFI_HANDLE *Device +); + +typedef +EFI_STATUS +(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE)( + IN EFI_GUID *Guid, + IN VOID *Table +); + +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_EXIT)( + IN EFI_HANDLE ImageHandle, + IN EFI_STATUS ExitStatus, + IN UINTN ExitDataSize, + IN CHAR16 *ExitData OPTIONAL +); + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_UNLOAD)( + IN EFI_HANDLE ImageHandle +); + +typedef +EFI_STATUS +(EFIAPI *EFI_EXIT_BOOT_SERVICES)( + IN EFI_HANDLE ImageHandle, + IN UINTN MapKey +); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT)( + OUT UINT64 *Count +); + +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 +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_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_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_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_CALCULATE_CRC32)( + IN VOID *Data, + IN UINTN DataSize, + OUT UINT32 *Crc32 +); + +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_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 struct _EFI_BOOT_SERVICES { + 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; + VOID *Reserved; + 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; + + // DriverSupport 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; +} EFI_BOOT_SERVICES; + +#endif /* EFI_BOOT_SERVICES_H */ diff --git a/efi_rs.h b/efi_rs.h new file mode 100644 index 0000000..8485e30 --- /dev/null +++ b/efi_rs.h @@ -0,0 +1,240 @@ +#ifndef EFI_RUNTIME_SERVICES_H +#define EFI_RUNTIME_SERVICES_H + +#include "efi_types.h" + +#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 +#define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION + +#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 +#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 +#define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 + +typedef struct _EFI_RUNTIME_SERVICES EFI_RUNTIME_SERVICES; + +typedef struct { + UINT16 Year; + UINT8 Month; + UINT8 Day; + UINT8 Hour; + UINT8 Minute; + UINT8 Second; + UINT8 Pad1; + UINT32 Nanosecond; + INT16 TimeZone; + UINT8 Daylight; + UINT8 Pad2; +} EFI_TIME; + +typedef struct { + UINT32 Resolution; + UINT32 Accuracy; + BOOLEAN SetsToZero; +} EFI_TIME_CAPABILITIES; + +typedef struct { + EFI_GUID CapsuleGuid; + UINT32 HeaderSize; + UINT32 Flags; + UINT32 CapsuleImageSize; +} EFI_CAPSULE_HEADER; + +typedef struct { + UINT32 CapsuleArrayNumber; + VOID *CapsulePtr[1]; +} EFI_CAPSULE_TABLE; + +typedef struct { + UINT64 Length; + union { + EFI_PHYSICAL_ADDRESS DataBlock; + EFI_PHYSICAL_ADDRESS ContinuationPointer; + } Union; +} EFI_CAPSULE_BLOCK_DESCRIPTOR; + +typedef struct { + EFI_PHYSICAL_ADDRESS Address; + UINT64 Length; +} EFI_MEMORY_RANGE; + +typedef struct { + EFI_CAPSULE_HEADER Header; + UINT32 OsRequestedMemoryType; + UINT64 NumberOfMemoryRanges; + EFI_MEMORY_RANGE MemoryRanges[]; +} EFI_MEMORY_RANGE_CAPSULE; + +typedef struct { + UINT64 FirmwareMemoryRequirement; + UINT64 NumberOfMemoryRanges; +} EFI_MEMORY_RANGE_CAPSULE_RESULT; + +typedef struct { + UINT32 VariableTotalSize; + UINT32 Reserved; + EFI_GUID CapsuleGuid; + EFI_TIME CapsuleProcessed; + EFI_STATUS CapsuleStatus; +} EFI_CAPSULE_RESULT_VARIABLE_HEADER; + +typedef struct { + UINT16 Version; + UINT8 PayloadIndex; + UINT8 UpdateImageIndex; + EFI_GUID UpdateImageTypeId; + //CHAR16 CapsuleFileName[]; + //CHAR16 CapsuleTarget[]; +} EFI_CAPSULE_RESULT_VARIABLE_FMP; + +typedef struct { + UINT32 Version; + UINT32 CapsuleId; + UINT32 RespLength; + UINT8 Resp[]; +} EFI_CAPSULE_RESULT_VARIABLE_JSON; + +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 *Enable, + OUT BOOLEAN *Pending, + OUT EFI_TIME *Time +); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_WAKEUP_TIME)( + IN BOOLEAN Enable, + IN EFI_TIME *Time +); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP)( + IN UINTN MemoryMapSize, + IN UINTN DescriptorSize, + IN UINT32 DescriptorVersion, + IN EFI_MEMORY_DESCRIPTOR *VirtualMap +); + +typedef +EFI_STATUS +(EFIAPI *EFI_CONVERT_POINTER)( + IN UINTN DebugDisposition, + IN VOID **Address +); + +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 +); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_NEXT_HIGH_MONOTONIC_COUNT)( + OUT UINT32 *HighCount +); + +typedef +EFI_STATUS +(EFIAPI *EFI_RESET_SYSTEM)( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL +); + +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 Runtime Services +typedef struct _EFI_RUNTIME_SERVICES { + 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_MONOTONIC_COUNT GetNextHighMonotonicCount; + EFI_RESET_SYSTEM ResetSystem; + + // UEFI 2.0 Capsule Services + EFI_UPDATE_CAPSULE UpdateCapsule; + EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; + + // Miscellaneous UEFI 2.0 Service + EFI_QUERY_VARIABLE_INFO QueryVariableInfo; +} EFI_RUNTIME_SERVICES; + +#endif /* EFI_RUNTIME_SERVICES_H */ diff --git a/efi_st.h b/efi_st.h new file mode 100644 index 0000000..ff514e3 --- /dev/null +++ b/efi_st.h @@ -0,0 +1,123 @@ +#ifndef EFI_SYSTEM_TABLE_H +#define EFI_SYSTEM_TABLE_H + +#include "efi_types.h" + +#include "efi_bs.h" +#include "protocols/simple_text_input.h" +#include "protocols/simple_text_output.h" +#include "efi_rs.h" + +#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 +#define EFI_2_100_SYSTEM_TABLE_REVISION ((2<<16) | (100)) +#define EFI_2_90_SYSTEM_TABLE_REVISION ((2<<16) | (90)) +#define EFI_2_80_SYSTEM_TABLE_REVISION ((2<<16) | (80)) +#define EFI_2_70_SYSTEM_TABLE_REVISION ((2<<16) | (70)) +#define EFI_2_60_SYSTEM_TABLE_REVISION ((2<<16) | (60)) +#define EFI_2_50_SYSTEM_TABLE_REVISION ((2<<16) | (50)) +#define EFI_2_40_SYSTEM_TABLE_REVISION ((2<<16) | (40)) +#define EFI_2_31_SYSTEM_TABLE_REVISION ((2<<16) | (31)) +#define EFI_2_30_SYSTEM_TABLE_REVISION ((2<<16) | (30)) +#define EFI_2_20_SYSTEM_TABLE_REVISION ((2<<16) | (20)) +#define EFI_2_10_SYSTEM_TABLE_REVISION ((2<<16) | (10)) +#define EFI_2_00_SYSTEM_TABLE_REVISION ((2<<16) | (00)) +#define EFI_1_10_SYSTEM_TABLE_REVISION ((1<<16) | (10)) +#define EFI_1_02_SYSTEM_TABLE_REVISION ((1<<16) | (02)) +#define EFI_SPECIFICATION_VERSION EFI_SYSTEM_TABLE_REVISION +#define EFI_SYSTEM_TABLE_REVISION EFI_2_100_SYSTEM_TABLE_REVISION + +#define ACPI_TABLE_GUID {0xeb9d2d30,0x2d88,0x11d3, {0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d}} +#define EFI_ACPI_20_TABLE_GUID {0x8868e871,0xe4f1,0x11d3, {0xbc,0x22,0x00,0x80,0xc7,0x3c,0x88,0x81}} +#define ACPI_10_TABLE_GUID ACPI_TABLE_GUID* +#define EFI_ACPI_TABLE_GUID {0x8868e871,0xe4f1,0x11d3, {0xbc,0x22,0x00,0x80,0xc7,0x3c,0x88,0x81}} +#define SAL_SYSTEM_TABLE_GUID {0xeb9d2d32,0x2d88,0x11d3, {0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d}} +#define SMBIOS_TABLE_GUID {0xeb9d2d31,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}} +#define MPS_TABLE_GUID {0xeb9d2d2f,0x2d88,0x11d3, {0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d}} + + +#define EFI_JSON_CONFIG_DATA_TABLE_GUID {0x87367f87,0x1119,0x41ce, {0xaa,0xec,0x8b,0xe0,0x11,0x1f,0x55,0x8a}} +#define EFI_JSON_CAPSULE_DATA_TABLE_GUID {0x35e7a725,0x8dd2,0x4cac, {0x80,0x11,0x33,0xcd,0xa8,0x10,0x90,0x56}} +#define EFI_JSON_CAPSULE_RESULT_TABLE_GUID {0xdbc461c3,0xb3de,0x422a, {0xb9,0xb4,0x98,0x86,0xfd,0x49,0xa1,0xe5}} + +#define EFI_DTB_TABLE_GUID {0xb1b621d5,0xf19c,0x41a5, {0x83,0x0b,0xd9,0x15,0x2c,0x69,0xaa,0xe0}} + +#define EFI_RT_PROPERTIES_TABLE_GUID {0xeb66918a,0x7eef,0x402a, {0x84,0x2e,0x93,0x1d,0x21,0xc3,0x8a,0xe9}} + +#define EFI_RT_PROPERTIES_TABLE_VERSION 0x1 + +#define EFI_RT_SUPPORTED_GET_TIME 0x0001 +#define EFI_RT_SUPPORTED_SET_TIME 0x0002 +#define EFI_RT_SUPPORTED_GET_WAKEUP_TIME 0x0004 +#define EFI_RT_SUPPORTED_SET_WAKEUP_TIME 0x0008 +#define EFI_RT_SUPPORTED_GET_VARIABLE 0x0010 +#define EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME 0x0020 +#define EFI_RT_SUPPORTED_SET_VARIABLE 0x0040 +#define EFI_RT_SUPPORTED_SET_VIRTUAL_ADDRESS_MAP 0x0080 +#define EFI_RT_SUPPORTED_CONVERT_POINTER 0x0100 +#define EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT 0x0200 +#define EFI_RT_SUPPORTED_RESET_SYSTEM 0x0400 +#define EFI_RT_SUPPORTED_UPDATE_CAPSULE 0x0800 +#define EFI_RT_SUPPORTED_QUERY_CAPSULE_CAPABILITIES 0x1000 +#define EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO 0x2000 + +#define EFI_MEMORY_ATTRIBUTES_TABLE_GUID {0xdcfa911d,0x26eb,0x469f, {0xa2,0x20,0x38,0xb7,0xdc,0x46,0x12,0x20}} + +#define EFI_MEMORY_ATTRIBUTES_FLAGS_RT_FORWARD_CONTROL_FLOW_GUARD 0x1 + +#define EFI_CONFORMANCE_PROFILES_TABLE_GUID {0x36122546,0xf7e7,0x4c8f, {0xbd,0x9b,0xeb,0x85,0x25,0xb5,0x0c,0x0b}} +#define EFI_CONFORMANCE_PROFILES_UEFI_SPEC_GUID {0x523c91af,0xa195,0x4382, {0x81,0x8d,0x29,0x5f,0xe4,0x00,0x64,0x65}} + +#define EFI_CONFORMANCE_PROFILES_TABLE_VERSION 0x1 + +typedef struct _EFI_SYSTEM_TABLE EFI_SYSTEM_TABLE; + +typedef EFI_STATUS +(EFIAPI *EFI_IMAGE_ENTRY_POINT)( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable +); + +typedef struct _EFI_CONFIGURATION_TABLE { + EFI_GUID VendorGuid; + VOID *VendorTable; +} EFI_CONFIGURATION_TABLE; + +typedef struct _EFI_RT_PROPERTIES_TABLE { + UINT16 Version; + UINT16 Length; + UINT32 RuntimeServicesSupported; +} EFI_RT_PROPERTIES_TABLE; + +typedef struct _EFI_MEMORY_ATTRIBUTES_TABLE { + UINT32 Version; + UINT32 NumberOfEntries; + UINT32 DescriptorSize; + UINT32 Flags; + //EFI_MEMORY_DESCRIPTOR Entry[1]; +} EFI_MEMORY_ATTRIBUTES_TABLE; + +typedef struct _EFI_CONFORMANCE_PROFILES_TABLE { + UINT16 Version; + UINT16 NumberOfProfiles; + //EFI_GUID ConformanceProfiles[]; +} EFI_CONFORMANCE_PROFILES_TABLE; + +typedef 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; +} EFI_SYSTEM_TABLE; + +#endif /* EFI_SYSTEM_TABLE_H */ diff --git a/efi_types.h b/efi_types.h index c05676f..8833e0a 100644 --- a/efi_types.h +++ b/efi_types.h @@ -118,4 +118,12 @@ typedef UINTN EFI_TPL; #define EFI_TEXT_ATTR(Foreground,Background) \ ((Foreground) | ((Background) << 4)) +// EFI Reset Type +typedef enum { + EfiResetCold, + EfiResetWarm, + EfiResetShutdown, + EfiResetPlatformSpecific +} EFI_RESET_TYPE; + #endif /* EFI_TYPES_H */ diff --git a/efilib.c b/efilib.c deleted file mode 100644 index 17b84e2..0000000 --- a/efilib.c +++ /dev/null @@ -1,77 +0,0 @@ -#include - -const CHAR16 *EfiErrToStr(EFI_STATUS Status) -{ - switch (Status) { - case EFI_SUCCESS: - return L"EFI_SUCCESS"; - case EFI_LOAD_ERROR: - return L"EFI_LOAD_ERROR"; - case EFI_INVALID_PARAMETER: - return L"EFI_INVALID_PARAMETER"; - case EFI_UNSUPPORTED: - return L"EFI_UNSUPPORTED"; - case EFI_BAD_BUFFER_SIZE: - return L"EFI_BAD_BUFFER_SIZE"; - case EFI_BUFFER_TOO_SMALL: - return L"EFI_BUFFER_TOO_SMALL"; - case EFI_NOT_READY: - return L"EFI_NOT_READY"; - case EFI_DEVICE_ERROR: - return L"EFI_DEVICE_ERROR"; - case EFI_WRITE_PROTECTED: - return L"EFI_WRITE_PROTECTED"; - case EFI_OUT_OF_RESOURCES: - return L"EFI_OUT_OF_RESOURCES"; - case EFI_VOLUME_CORRUPTED: - return L"EFI_VOLUME_CORRUPTED"; - case EFI_VOLUME_FULL: - return L"EFI_VOLUME_FULL"; - case EFI_NO_MEDIA: - return L"EFI_NO_MEDIA"; - case EFI_MEDIA_CHANGED: - return L"EFI_MEDIA_CHANGED"; - case EFI_NOT_FOUND: - return L"EFI_NOT_FOUND"; - case EFI_ACCESS_DENIED: - return L"EFI_ACCESS_DENIED"; - case EFI_NO_RESPONSE: - return L"EFI_NO_RESPONSE"; - case EFI_NO_MAPPING: - return L"EFI_NO_MAPPING"; - case EFI_TIMEOUT: - return L"EFI_TIMEOUT"; - case EFI_NOT_STARTED: - return L"EFI_NOT_STARTED"; - case EFI_ALREADY_STARTED: - return L"EFI_ALREADY_STARTED"; - case EFI_ABORTED: - return L"EFI_ABORTED"; - case EFI_ICMP_ERROR: - return L"EFI_ICMP_ERROR"; - case EFI_TFTP_ERROR: - return L"EFI_TFTP_ERROR"; - case EFI_PROTOCOL_ERROR: - return L"EFI_PROTOCOL_ERROR"; - case EFI_INCOMPATIBLE_VERSION: - return L"EFI_INCOMPATIBLE_VERSION"; - case EFI_SECURITY_VIOLATION: - return L"EFI_SECURITY_VIOLATION"; - case EFI_CRC_ERROR: - return L"EFI_CRC_ERROR"; - case EFI_END_OF_MEDIA: - return L"EFI_END_OF_MEDIA"; - case EFI_END_OF_FILE: - return L"EFI_END_OF_FILE"; - case EFI_INVALID_LANGUAGE: - return L"EFI_INVALID_LANGUAGE"; - case EFI_COMPROMISED_DATA: - return L"EFI_COMPROMISED_DATA"; - case EFI_IP_ADDRESS_CONFLICT: - return L"EFI_IP_ADDRESS_CONFLICT"; - case EFI_HTTP_ERROR: - return L"EFI_HTTP_ERROR"; - default: - return L"Unknown"; - } -} diff --git a/efilib.h b/efilib.h deleted file mode 100644 index 82cdae4..0000000 --- a/efilib.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef EFILIB_H -#define EFILIB_H - -#include "efi.h" - -#define EFI_ERROR(Status) (((INTN)(EFI_STATUS)(Status)) < 0) - -const CHAR16 *EfiErrToStr(EFI_STATUS Status); - -#endif /* EFILIB_H */ diff --git a/guid.h b/guid.h deleted file mode 100644 index df34e52..0000000 --- a/guid.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef GUID_H -#define GUID_H - -#include "efi_types.h" - -// EFI GUID Definition -typedef struct EFI_GUID { - UINT32 Data1; - UINT16 Data2; - UINT16 Data3; - UINT8 Data4[8]; -} EFI_GUID; - -// Driver Signing -#define EFI_CERT_TYPE_RSA2048_SHA256_GUID {0xa7717414,0xc616,0x4977, {0x94,0x20,0x84,0x47,0x12,0xa7,0x35,0xbf}} -#define EFI_CERT_TYPE_PKCS7_GUID {0x4aafd29d,0x68df,0x49ee, {0x8a,0xa9,0x34,0x7d,0x37,0x56,0x65,0xa7}} - -// 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_OUTPUT_PROTOCOL_GUID {0x387477c2,0x69c7,0x11d2, {0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}} - -// Simple File System Protocol -#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID {0x0964e5b22,0x6459,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}} - -// Capsules -#define EFI_MEMORY_RANGE_CAPSULE_GUID {0xde9f0ec,0x88b6,0x428f, {0x97,0x7a,0x25,0x8f,0x1d,0xe,0x5e,0x72}} -#define EFI_CAPSULE_REPORT_GUID {0x39b68c46,0xf7fb,0x441b, {0xb6,0xec,0x16,0xb0,0xf6,0x98,0x21,0xf3}} - -/********************** - * Global GUIDs * - **********************/ -// EXTERN EFI_GUID gEfiCertTypeRsa2048Sha256Guid; -// EXTERN EFI_GUID gEfiCertTypePkcs7Guid; -// EXTERN EFI_GUID gSimpleTextInputProtocolGuid; -// EXTERN EFI_GUID gSimpleTextOutputProtocolGuid; -// EXTERN EFI_GUID gEfiSimpleFileSystemProtocolGuid; -// EXTERN EFI_GUID gEfiHiiPackageListProtocolGuid; -// EXTERN EFI_GUID gEfiDevicePathProtocolGuid; -// EXTERN EFI_GUID gEfiMemoryRangeCapsuleGuid; -// EXTERN EFI_GUID gEfiCapsuleReportGuid; -static EFI_GUID gEfiCertTypeRsa2048Sha256Guid = EFI_CERT_TYPE_RSA2048_SHA256_GUID; -static EFI_GUID gEfiCertTypePkcs7Guid = EFI_CERT_TYPE_PKCS7_GUID; -static EFI_GUID gSimpleTextInputProtocolGuid = EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID; -static EFI_GUID gSimpleTextOutputProtocolGuid = EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID; -static EFI_GUID gEfiSimpleFileSystemProtocolGuid = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID; -static EFI_GUID gEfiHiiPackageListProtocolGuid = EFI_HII_PACKAGE_LIST_PROTOCOL_GUID; -static EFI_GUID gEfiDevicePathProtocolGuid = EFI_DEVICE_PATH_PROTOCOL_GUID; -static EFI_GUID gEfiMemoryRangeCapsuleGuid = EFI_MEMORY_RANGE_CAPSULE_GUID; -static EFI_GUID gEfiCapsuleReportGuid = EFI_CAPSULE_REPORT_GUID; - -#endif /* GUID_H */ diff --git a/protocols/boot_manager_policy.h b/protocols/boot_manager_policy.h new file mode 100644 index 0000000..74fcd14 --- /dev/null +++ b/protocols/boot_manager_policy.h @@ -0,0 +1,32 @@ +#ifndef EFI_PROTOCOLS_BOOT_MANAGER_POLICY_H +#define EFI_PROTOCOLS_BOOT_MANAGER_POLICY_H + +#define EFI_BOOT_MANAGER_POLICY_PROTOCOL_GUID {0xfedf8e0c,0xe147,0x11e3, {0x99,0x03,0xb8,0xe8,0x56,0x2c,0xba,0xfa}} +#define EFI_BOOT_MANAGER_POLICY_CONSOLE_GUID {0xcab0e94c,0xe15f,0x11e3, {0x91,0x8d,0xb8,0xe8,0x56,0x2c,0xba,0xfa}} +#define EFI_BOOT_MANAGER_POLICY_NETWORK_GUID {0xd04159dc,0xe15f,0x11e3, {0xb2,0x61,0xb8,0xe8,0x56,0x2c,0xba,0xfa}} +#define EFI_BOOT_MANAGER_POLICY_CONNECT_ALL_GUID {0x113b2126, 0xfc8a, 0x11e3, {0xbd,0x6c,0xb8,0xe8,0x56,0x2c,0xba,0xfa}} + +#define EFI_BOOT_MANAGER_POLICY_PROTOCOL_REVISION 0x00010000 + +typedef +EFI_STATUS +(EFIAPI *EFI_BOOT_MANAGER_POLICY_CONNECT_DEVICE_PATH)( + IN EFI_BOOT_MANAGER_POLICY_PROTOCOL *This, + IN EFI_DEVICE_PATH *DevicePath, + IN BOOLEAN Recursive +); + +typedef +EFI_STATUS +(EFIAPI *EFI_BOOT_MANAGER_POLICY_CONNECT_DEVICE_CLASS)( + IN EFI_BOOT_MANAGER_POLICY_PROTOCOL *This, + IN EFI_GUID *Class +); + +typedef struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL { + UINT64 Revision; + EFI_BOOT_MANAGER_POLICY_CONNECT_DEVICE_PATH ConnectDevicePath; + EFI_BOOT_MANAGER_POLICY_CONNECT_DEVICE_CLASS ConnectDeviceClass; +} EFI_BOOT_MANAGER_POLICY_PROTOCOL; + +#endif /* EFI_PROTOCOLS_BOOT_MANAGER_POLICY_H */ diff --git a/protocols/bus_specific_driver_override.h b/protocols/bus_specific_driver_override.h new file mode 100644 index 0000000..eda8370 --- /dev/null +++ b/protocols/bus_specific_driver_override.h @@ -0,0 +1,19 @@ +#ifndef EFI_PROTOCOLS_BUS_SPECIFIC_DRIVER_OVERRIDE_H +#define EFI_PROTOCOLS_BUS_SPECIFIC_DRIVER_OVERRIDE_H + +#define EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL_GUID {0x3bc1b285,0x8a15,0x4a82, {0xaa,0xbf,0x4d,0x7d,0x13,0xfb,0x32,0x65}} + +typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL; + +typedef +EFI_STATUS +(EFIAPI *EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER)( + IN EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This, + IN OUT EFI_HANDLE *DriverImageHandle +); + +typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL { + EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER GetDriver; +} EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL; + +#endif /* EFI_PROTOCOLS_BUS_SPECIFIC_DRIVER_OVERRIDE_H */ diff --git a/protocols/device_path.h b/protocols/device_path.h new file mode 100644 index 0000000..422a3fd --- /dev/null +++ b/protocols/device_path.h @@ -0,0 +1,12 @@ +#ifndef EFI_PROTOCOLS_DEVICE_PATH_H +#define EFI_PROTOCOLS_DEVICE_PATH_H + +#define EFI_DEVICE_PATH_PROTOCOL_GUID {0x09576e91,0x6d3f,0x11d2,{0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}} + +typedef struct _EFI_DEVICE_PATH_PROTOCOL { + UINT8 Type; + UINT8 SubType; + UINT8 Length[2]; +} EFI_DEVICE_PATH_PROTOCOL; + +#endif /* EFI_PROTOCOLS_DEVICE_PATH_H */ diff --git a/protocols/driver_binding.h b/protocols/driver_binding.h new file mode 100644 index 0000000..95b5c20 --- /dev/null +++ b/protocols/driver_binding.h @@ -0,0 +1,40 @@ +#ifndef EFI_PROTOCOLS_DRIVER_BINDING_H +#define EFI_PROTOCOLS_DRIVER_BINDING_H + +#define EFI_DRIVER_BINDING_PROTOCOL_GUID {0x18a031ab,0xb443,0x4d1a, {0xa5,0xc0,0x0c,0x09,0x26,0x1e,0x9f,0x71}} + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED)( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL +); + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_START)( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL +); + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_STOP)( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_DEVICE_PATH_PROTOCOL *ChildHandleBuffer OPTIONAL +); + +typedef struct _EFI_DRIVER_BINDING_PROTOCOL { + EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED Supported; + EFI_DRIVER_BINDING_PROTOCOL_START Start; + EFI_DRIVER_BINDING_PROTOCOL_STOP Stop; + UINT32 Version; + EFI_HANDLE ImageHandle; + EFI_HANDLE DriverBindingHandle; +} EFI_DRIVER_BINDING_PROTOCOL; + +#endif /* EFI_PROTOCOLS_DRIVER_BINDING_H */ diff --git a/protocols/file.h b/protocols/file.h new file mode 100644 index 0000000..85a4cc1 --- /dev/null +++ b/protocols/file.h @@ -0,0 +1,156 @@ +#ifndef EFI_PROTOCOLS_FILE_H +#define EFI_PROTOCOLS_FILE_H + +#define EFI_FILE_PROTOCOL_REVISION 0x00010000 +#define EFI_FILE_PROTOCOL_REVISION2 0x00020000 +#define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2 + +#define EFI_FILE_MODE_READ 0x0000000000000001 +#define EFI_FILE_MODE_WRITE 0x0000000000000002 +#define EFI_FILE_MODE_CREATE 0x8000000000000000 + +#define EFI_FILE_READ_ONLY 0x0000000000000001 +#define EFI_FILE_HIDDEN 0x0000000000000002 +#define EFI_FILE_SYSTEM 0x0000000000000004 +#define EFI_FILE_RESERVED 0x0000000000000008 +#define EFI_FILE_DIRECTORY 0x0000000000000010 +#define EFI_FILE_ARCHIVE 0x0000000000000020 +#define EFI_FILE_VALID_ATTR 0x0000000000000037 + +typedef struct { + EFI_EVENT Event; + EFI_STATUS Status; + UINTN BufferSize; + VOID *Buffer; +} EFI_FILE_IO_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_OPEN)( + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_CLOSE)( + IN EFI_FILE_PROTOCOL *This +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_DELETE)( + IN EFI_FILE_PROTOCOL *This +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_READ)( + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_WRITE)( + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_GET_POSITION)( + IN EFI_FILE_PROTOCOL *This, + OUT UINT64 Position +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_SET_POSITION)( + IN EFI_FILE_PROTOCOL *This, + IN UINT64 Position +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_GET_INFO)( + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_SET_INFO)( + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_FLUSH)( + IN EFI_FILE_PROTOCOL *This +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_OPEN_EX)( + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes, + IN OUT EFI_FILE_IO_TOKEN *Token +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_READ_EX)( + IN EFI_FILE_PROTOCOL *This, + IN OUT EFI_FILE_IO_TOKEN *Token +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_WRITE_EX)( + IN EFI_FILE_PROTOCOL *This, + IN OUT EFI_FILE_IO_TOKEN *Token +); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_FLUSH_EX)( + IN EFI_FILE_PROTOCOL *This, + IN OUT EFI_FILE_IO_TOKEN *Token +); + +typedef struct _EFI_FILE_PROTOCOL { + UINT64 Revision; + + EFI_FILE_OPEN Open; + EFI_FILE_CLOSE Close; + EFI_FILE_DELETE Delete; + EFI_FILE_READ Read; + EFI_FILE_WRITE Write; + EFI_FILE_GET_POSITION GetPosition; + EFI_FILE_SET_POSITION SetPosition; + EFI_FILE_GET_INFO GetInfo; + EFI_FILE_SET_INFO SetInfo; + EFI_FILE_FLUSH Flush; + + // Added for revision 2 + EFI_FILE_OPEN_EX OpenEx; + EFI_FILE_READ_EX ReadEx; + EFI_FILE_WRITE_EX WriteEx; + EFI_FILE_FLUSH_EX FlushEx; +} EFI_FILE_PROTOCOL; + +#endif /* EFI_PROTOCOLS_FILE_H */ diff --git a/protocols/loaded_image.h b/protocols/loaded_image.h new file mode 100644 index 0000000..b979d37 --- /dev/null +++ b/protocols/loaded_image.h @@ -0,0 +1,34 @@ +#ifndef EFI_PROTOCOLS_LOADED_IMAGE_H +#define EFI_PROTOCOLS_LOADED_IMAGE_H + +#define EFI_LOADED_IMAGE_PROTOCOL_GUID {0x5b1b31a1,0x9562,0x11d2, {0x8e,0x3f,0x00,0xa0,0xc9,0x69,0x72,0x3b}} + +#define EFI_LOADED_IMAGE_PROTOCOL_VERSION 0x1000 + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_UNLOAD)( + IN EFI_HANDLE ImageHandle +); + +typedef struct _EFI_LOADED_IMAGE_PROTOCOL { + UINT32 Revision; + EFI_HANDLE ParentHandle; + EFI_SYSTEM_TABLE *SystemTable; + + // Source location of the image + EFI_HANDLE DeviceHandle; + EFI_DEVICE_PATH_PROTOCOL *FilePath; + VOID *Reserved; + + UINT32 LoadOptionsSize; + VOID *LoadOptions; + + VOID *ImageBase; + UINT64 ImageSize; + EFI_MEMORY_TYPE ImageCodeType; + EFI_MEMORY_TYPE ImageDataType; + EFI_IMAGE_UNLOAD Unload; +} EFI_LOADED_IMAGE_PROTOCOL; + +#endif /* EFI_PROTOCOLS_LOADED_IMAGE_H */ diff --git a/protocols/loaded_image_device_path.h b/protocols/loaded_image_device_path.h new file mode 100644 index 0000000..76d56f8 --- /dev/null +++ b/protocols/loaded_image_device_path.h @@ -0,0 +1,12 @@ +#ifndef EFI_PROTOCOLS_LOADED_IMAGE_DEVICE_PATH_H +#define EFI_PROTOCOLS_LOADED_IMAGE_DEVICE_PATH_H + +#define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID {0xbc62157e,0x3e33,0x4fec, {0x99,0x20,0x2d,0x3b,0x36,0xd7,0x50,0xdf}} + +// UEFI Spec 2.10, 9.2.1: +// The Loaded Image Device Path Protocol uses the same protocol interface structure as the Device Path Protocol defined +// in Chapter 9. The only difference between the Device Path Protocol and the Loaded Image Device Path Protocol is +// the protocol GUID value. +typedef EFI_DEVICE_PATH_PROTOCOL EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL; + +#endif /* EFI_PROTOCOLS_LOADED_IMAGE_DEVICE_PATH_H */ diff --git a/protocols/platform_driver_override.h b/protocols/platform_driver_override.h new file mode 100644 index 0000000..c345372 --- /dev/null +++ b/protocols/platform_driver_override.h @@ -0,0 +1,39 @@ +#ifndef EFI_PLATFORMS_PLATFORM_DRIVER_OVERRIDE_H +#define EFI_PLATFORMS_PLATFORM_DRIVER_OVERRIDE_H + +#define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID {0x6b30c738,0xa391,0x11d4, {0x9a,0x3b,0x00,0x90,0x27,0x3f,0xc1,0x4d}} + +typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL; + +typedef +EFI_STATUS +(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER)( + IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN OUT EFI_HANDLE *DriverImageHandle +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH)( + IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN OUT EFI_DEVICE_PATH_PROTOCOL **DriverImagePath +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED)( + IN EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *DriverImagePath, + IN EFI_HANDLE DriverImageHandle +); + +typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL { + EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER GetDriver; + EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH GetDriverPath; + EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED DriverLoaded; +} EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL; + +#endif /* EFI_PLATFORMS_PLATFORM_DRIVER_OVERRIDE_H */ diff --git a/protocols/simple_file_system.h b/protocols/simple_file_system.h new file mode 100644 index 0000000..1ad0b2d --- /dev/null +++ b/protocols/simple_file_system.h @@ -0,0 +1,18 @@ +#ifndef EFI_PROTOCOLS_SIMPLE_FILE_SYSTEM_H +#define EFI_PROTOCOLS_SIMPLE_FILE_SYSTEM_H + +#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000 + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME)( + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **Root +); + +typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { + UINT64 Revision; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME OpenVolume; +} EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; + +#endif /* EFI_PROTOCOLS_SIMPLE_FILE_SYSTEM_H */ diff --git a/protocols/simple_text_input.h b/protocols/simple_text_input.h new file mode 100644 index 0000000..7007f1a --- /dev/null +++ b/protocols/simple_text_input.h @@ -0,0 +1,34 @@ +#ifndef EFI_PROTOCOLS_SIMPLE_TEXT_INPUT_H +#define EFI_PROTOCOLS_SIMPLE_TEXT_INPUT_H + +#include "efi_types.h" + +typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL; + +// Input Key +typedef struct { + UINT16 ScanCode; + CHAR16 UnicodeChar; +} EFI_INPUT_KEY; + +typedef +EFI_STATUS +(EFIAPI *EFI_INPUT_READ_KEY)( + IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, + OUT EFI_INPUT_KEY *Key +); + +typedef +EFI_STATUS +(EFIAPI *EFI_INPUT_RESET)( + IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, + IN BOOLEAN ExtendedVerification +); + +typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL { + EFI_INPUT_RESET Reset; + EFI_INPUT_READ_KEY ReadKeyStroke; + EFI_EVENT WaitForKey; +} EFI_SIMPLE_TEXT_INPUT_PROTOCOL; + +#endif /* EFI_PROTOCOLS_SIMPLE_TEXT_INPUT_H */ diff --git a/protocols/simple_text_output.h b/protocols/simple_text_output.h new file mode 100644 index 0000000..fac086b --- /dev/null +++ b/protocols/simple_text_output.h @@ -0,0 +1,95 @@ +#ifndef EFI_PROTOCOLS_SIMPLE_TEXT_OUTPUT_H +#define EFI_PROTOCOLS_SIMPLE_TEXT_OUTPUT_H + +typedef struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL; + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_RESET)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN BOOLEAN ExtendedVerification +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_STRING)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN CHAR16 *String +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_TEST_STRING)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN CHAR16 *String +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_QUERY_MODE)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN UINTN ModeNumber, + OUT UINTN *Columns, + OUT UINTN *Rows +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_SET_MODE)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN UINTN ModeNumber +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_SET_ATTRIBUTE)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN UINTN Attribute +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_CLEAR_SCREEN)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_SET_CURSOR_POSITION)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN UINTN Column, + IN UINTN Row +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_ENABLE_CURSOR)( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN BOOLEAN Visible +); + +typedef struct { + INT32 MaxNode; + + // Current settings + INT32 Mode; + INT32 Attribute; + INT32 CursorColumn; + INT32 CursorRow; + BOOLEAN CursorVisible; +} SIMPLE_TEXT_OUTPUT_MODE; + +typedef struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL { + EFI_TEXT_RESET Reset; + EFI_TEXT_STRING OutputString; + EFI_TEXT_TEST_STRING TestString; + EFI_TEXT_QUERY_MODE QueryMode; + EFI_TEXT_SET_MODE SetMode; + EFI_TEXT_SET_ATTRIBUTE SetAttribute; + EFI_TEXT_CLEAR_SCREEN ClearScreen; + EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition; + EFI_TEXT_ENABLE_CURSOR EnableCursor; + SIMPLE_TEXT_OUTPUT_MODE *Mode; +} EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL; + +#endif /* EFI_PROTOCOLS_SIMPLE_TEXT_OUTPUT_H */