diff --git a/SDK/CRT/STDIO/wprintf.c b/SDK/CRT/STDIO/wprintf.c index 174dad9..6a6ca5c 100644 --- a/SDK/CRT/STDIO/wprintf.c +++ b/SDK/CRT/STDIO/wprintf.c @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -33,7 +33,7 @@ print_hex ( n = 0; shift = 28; while (n < maxlen && shift >= 0) { - x = (num >> shift) & 0xf; + x = (num >> shift) & 0xF; if (x >= 0xa) { *dest = 'a' + (x - 0xa); } else { diff --git a/SDK/CRT/STRING/mem.c b/SDK/CRT/STRING/mem.c index f756caf..68f317c 100644 --- a/SDK/CRT/STRING/mem.c +++ b/SDK/CRT/STRING/mem.c @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -64,7 +64,7 @@ memmove ( /* Check for overlap */ if (src > dest || ((char *)src + count) < (char *)dest) { - /* Low-to-high copy, use memcpy() */ + /* Low-to-high copy */ return memcpy(dest, src, count); } diff --git a/SDK/CRT/STRING/str.c b/SDK/CRT/STRING/str.c index 2d4c5cd..65aac69 100644 --- a/SDK/CRT/STRING/str.c +++ b/SDK/CRT/STRING/str.c @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -50,8 +50,8 @@ strnlen ( int strcmp ( - const char* s1, - const char* s2 + const char *s1, + const char *s2 ) { @@ -69,8 +69,8 @@ strcmp ( int strncmp ( - const char* s1, - const char* s2, + const char *s1, + const char *s2, size_t n ) diff --git a/SDK/CRT/STRING/wmem.c b/SDK/CRT/STRING/wmem.c index 6cb49a5..f7d55a7 100644 --- a/SDK/CRT/STRING/wmem.c +++ b/SDK/CRT/STRING/wmem.c @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -61,7 +61,7 @@ wmemmove ( /* Check for overlap */ if (src > dest || ((wchar_t *)src + count) < (wchar_t *)dest) { - /* Low-to-high copy, use wmemcpy() */ + /* Low-to-high copy */ return wmemcpy(dest, src, count); } diff --git a/SDK/CRT/STRING/wstr.c b/SDK/CRT/STRING/wstr.c index c6f67d2..654b5f1 100644 --- a/SDK/CRT/STRING/wstr.c +++ b/SDK/CRT/STRING/wstr.c @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -50,8 +50,8 @@ wcsnlen ( int wcscmp ( - const wchar_t* s1, - const wchar_t* s2 + const wchar_t *s1, + const wchar_t *s2 ) { @@ -69,8 +69,8 @@ wcscmp ( int wcsncmp ( - const wchar_t* s1, - const wchar_t* s2, + const wchar_t *s1, + const wchar_t *s2, size_t n ) diff --git a/SDK/INC/CRT/stdarg.h b/SDK/INC/CRT/stdarg.h index bfa13eb..777dbb7 100644 --- a/SDK/INC/CRT/stdarg.h +++ b/SDK/INC/CRT/stdarg.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -9,14 +9,14 @@ Module Name: Abstract: - Provides variable arguments definitions. + Provides variable argument list definitions. --*/ #pragma once #ifndef _STDARG_H -#define _STDARG_H +#define _STDARG_H 1 #ifdef __cplusplus extern "C" { diff --git a/SDK/INC/CRT/stddef.h b/SDK/INC/CRT/stddef.h index 37df529..a4257bc 100644 --- a/SDK/INC/CRT/stddef.h +++ b/SDK/INC/CRT/stddef.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -16,14 +16,16 @@ Abstract: #pragma once #ifndef _STDDEF_H -#define _STDDEF_H +#define _STDDEF_H 1 #ifdef __cplusplus extern "C" { #endif #ifndef NULL -#ifdef __cplusplus +#if defined(__cplusplus) && __cplusplus >= 201103L +#define NULL nullptr +#elif defined(__cplusplus) #define NULL 0 #else #define NULL ((void*)0) diff --git a/SDK/INC/CRT/string.h b/SDK/INC/CRT/string.h index cd71851..e521160 100644 --- a/SDK/INC/CRT/string.h +++ b/SDK/INC/CRT/string.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -16,7 +16,7 @@ Abstract: #pragma once #ifndef _STRING_H -#define _STRING_H +#define _STRING_H 1 #include @@ -30,8 +30,8 @@ void *memmove(void *dest, const void *src, size_t count); size_t strlen(const char *str); size_t strnlen(const char *str, size_t maxlen); -int strcmp(const char* s1, const char* s2); -int strncmp(const char* s1, const char* s2, size_t n); +int strcmp(const char *s1, const char *s2); +int strncmp(const char *s1, const char *s2, size_t n); char *strchr(const char *s, int c); char *strstr(const char *haystack, const char *needle); diff --git a/SDK/INC/CRT/wchar.h b/SDK/INC/CRT/wchar.h index c5b4e31..7752427 100644 --- a/SDK/INC/CRT/wchar.h +++ b/SDK/INC/CRT/wchar.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -16,7 +16,7 @@ Abstract: #pragma once #ifndef _WCHAR_H -#define _WCHAR_H +#define _WCHAR_H 1 #include #include @@ -31,8 +31,8 @@ wchar_t *wmemmove(wchar_t *dest, const wchar_t *src, size_t count); size_t wcslen(const wchar_t *str); size_t wcsnlen(const wchar_t *str, size_t maxlen); -int wcscmp(const wchar_t* s1, const wchar_t* s2); -int wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t n); +int wcscmp(const wchar_t *s1, const wchar_t *s2); +int wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n); wchar_t *wcschr(const wchar_t *wcs, wchar_t wc); wchar_t *wcsstr(const wchar_t *haystack, const wchar_t *needle); wchar_t *wcscpy_s(wchar_t *dest, size_t maxlen, const wchar_t *src); diff --git a/SDK/INC/EFI/X64/efibind.h b/SDK/INC/EFI/X64/efibind.h new file mode 100644 index 0000000..e33c42b --- /dev/null +++ b/SDK/INC/EFI/X64/efibind.h @@ -0,0 +1,76 @@ +/*++ + +Copyright (c) 2024-2025, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efibind.h + +Abstract: + + Provides processor/compiler-specific EFI definitions for x64 systems. + +--*/ + +#ifndef _EFIBIND_H +#define _EFIBIND_H + +// +// Calling conventions. +// +#ifndef EFIAPI + #if defined(_MSC_EXTENSIONS) + #define EFIAPI __cdecl + #elif defined(__clang__) || defined(__GNUC__) + #define EFIAPI __attribute__((ms_abi)) + #else + #define EFIAPI + #endif +#endif + +// +// Error masks. +// +#define EFI_ERROR_MASK 0x8000000000000000 +#define EFI_ERROR_MASK_OEM 0xC000000000000000 + +// +// Integer types. +// +#if defined(_MSC_EXTENSIONS) + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; +#elif defined(UNIX_LP64) + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + typedef unsigned long uint64_t; + typedef char int8_t; + typedef short int16_t; + typedef int int32_t; + typedef long int64_t; +#else + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + typedef unsigned long long uint64_t; + typedef char int8_t; + typedef short int16_t; + typedef int int32_t; + typedef long long int64_t; +#endif + +// +// Word-sized integers. +// +typedef uint64_t UINTN; +typedef int64_t INTN; + +#endif /* !_EFIBIND_H */ diff --git a/SDK/INC/EFI/efi.h b/SDK/INC/EFI/efi.h new file mode 100644 index 0000000..19943ea --- /dev/null +++ b/SDK/INC/EFI/efi.h @@ -0,0 +1,32 @@ +/*++ + +Copyright (c) 2024-2025, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efi.h + +Abstract: + + Provides EFI header files. + +--*/ + +#ifndef _EFI_H +#define _EFI_H + +#if defined(__x86_64__) + #include "X64/efibind.h" +#else + #error Unsupported architecture +#endif + +#include "efidef.h" +#include "efidevp.h" +#include "eficon.h" +#include "efiprot.h" +#include "efiapi.h" +#include "efierr.h" + +#endif /* !_EFI_H */ diff --git a/SDK/INC/EFI/efiapi.h b/SDK/INC/EFI/efiapi.h new file mode 100644 index 0000000..0325c7e --- /dev/null +++ b/SDK/INC/EFI/efiapi.h @@ -0,0 +1,1004 @@ +/*++ + +Copyright (c) 2024-2025, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efiapi.h + +Abstract: + + Provides EFI service definitions. + +--*/ + +#ifndef _EFIAPI_H +#define _EFIAPI_H + +#pragma pack(1) + +typedef struct _EFI_SYSTEM_TABLE EFI_SYSTEM_TABLE; + +// +// Memory services. +// + +typedef +EFI_STATUS +(EFIAPI *EFI_ALLOCATE_PAGES) ( + IN EFI_ALLOCATE_TYPE Type, + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN Pages, + IN OUT EFI_PHYSICAL_ADDRESS *Memory + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FREE_PAGES) ( + IN EFI_PHYSICAL_ADDRESS Memory, + IN UINTN Pages + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_MEMORY_MAP) ( + IN OUT UINTN *MemoryMapSize, + IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, + IN OUT UINTN *MapKey, + IN OUT UINTN *DescriptorSize, + IN OUT UINT32 *DescriptorVersion + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_ALLOCATE_POOL) ( + IN EFI_MEMORY_TYPE PoolType, + IN UINTN Size, + OUT VOID **Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FREE_POOL) ( + IN VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) ( + IN UINTN MemoryMapSize, + IN UINTN DescriptorSize, + IN UINT32 DescriptorVersion, + IN EFI_MEMORY_DESCRIPTOR *VirtualMap + ); + +#define EFI_OPTIONAL_PTR 0x00000001 +#define EFI_INTERNAL_FNC 0x00000002 +#define EFI_INTERNAL_PTR 0x00000004 + +typedef +EFI_STATUS +(EFIAPI *EFI_CONVERT_POINTER) ( + IN UINTN DebugDisposition, + IN VOID **Address + ); + +// +// Driver controller services. +// + +typedef +EFI_STATUS +(EFIAPI *EFI_CONNECT_CONTROLLER) ( + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE *DriverImageHandle OPTIONAL, + IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL, + IN BOOLEAN Recursive + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_DISCONNECT_CONTROLLER) ( + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE DriverImageHandle OPTIONAL, + IN EFI_HANDLE ChildHandle OPTIONAL + ); + +// +// Event services. +// + +#define EVT_NOTIFY_WAIT 0x00000100 +#define EVT_NOTIFY_SIGNAL 0x00000200 +#define EVT_RUNTIME_CONTEXT 0x20000000 // Deprecated in UEFI 2.0+ +#define EVT_RUNTIME 0x40000000 +#define EVT_TIMER 0x80000000 + +#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 +#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 + +#define EVT_EFI_SIGNAL_MASK 0x000000FF +#define EVT_EFI_SIGNAL_MAX 4 + +#define EFI_EVENT_TIMER EVT_TIMER +#define EFI_EVENT_RUNTIME EVT_RUNTIME +#define EFI_EVENT_RUNTIME_CONTEXT EVT_RUNTIME_CONTEXT +#define EFI_EVENT_NOTIFY_WAIT EVT_NOTIFY_WAIT +#define EFI_EVENT_NOTIFY_SIGNAL EVT_NOTIFY_SIGNAL +#define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES EVT_SIGNAL_EXIT_BOOT_SERVICES +#define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE +#define EFI_EVENT_EFI_SIGNAL_MASK EVT_EFI_SIGNAL_MASK +#define EFI_EVENT_EFI_SIGNAL_MAX EVT_EFI_SIGNAL_MAX + +typedef +VOID +(EFIAPI *EFI_EVENT_NOTIFY) ( + IN EFI_EVENT Event, + IN VOID *Context + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CREATE_EVENT) ( + IN UINT32 Type, + IN EFI_TPL NotifyTpl, + IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, + IN VOID *NotifyContext OPTIONAL, + OUT EFI_EVENT *Event + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CREATE_EVENT_EX) ( + IN UINT32 Type, + IN EFI_TPL NotifyTpl, + IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, + IN CONST VOID *NotifyContext OPTIONAL, + IN CONST EFI_GUID *EventGroup OPTIONAL, + OUT EFI_EVENT *Event + ); + +typedef enum { + // + // Cancel timer. + // + TimerCancel, + + // + // Signal periodically at a regular interval. + // + TimerPeriodic, + + // + // Signal at certain interval after the current time. + // + TimerRelative, + + // + // For bounds checking. + // + TimerDelayMax +} EFI_TIMER_DELAY; + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_TIMER) ( + IN EFI_EVENT Event, + IN EFI_TIMER_DELAY Type, + IN UINT64 TriggerTime + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SIGNAL_EVENT) ( + IN EFI_EVENT Event + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_WAIT_FOR_EVENT) ( + IN UINTN NumberOfEvents, + IN EFI_EVENT *Event, + OUT UINTN *Index + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CLOSE_EVENT) ( + IN EFI_EVENT Event + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CHECK_EVENT) ( + IN EFI_EVENT Event + ); + +// +// Task priority services. +// + +#define TPL_APPLICATION 4 +#define TPL_CALLBACK 8 +#define TPL_NOTIFY 16 +#define TPL_HIGH_LEVEL 31 +#define EFI_TPL_APPLICATION TPL_APPLICATION +#define EFI_TPL_CALLBACK TPL_CALLBACK +#define EFI_TPL_NOTIFY TPL_NOTIFY +#define EFI_TPL_HIGH_LEVEL TPL_HIGH_LEVEL + +typedef +EFI_TPL +(EFIAPI *EFI_RAISE_TPL) ( + IN EFI_TPL NewTpl + ); + +typedef +VOID +(EFIAPI *EFI_RESTORE_TPL) ( + IN EFI_TPL OldTpl + ); + +// +// Variable services. +// + +#define EFI_GLOBAL_VARIABLE \ + { 0x8BE4DF61, 0x93CA, 0x11D2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} } + +// +// Variable attributes. +// +#define EFI_VARIABLE_NON_VOLATILE 0x00000001 +#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 +#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 +#define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008 +#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 +#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020 +#define EFI_VARIABLE_APPEND_WRITE 0x00000040 +#define EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS 0x00000080 + +#define EFI_MAXIMUM_VARIABLE_SIZE 1024 + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_VARIABLE) ( + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + OUT UINT32 *Attributes OPTIONAL, + IN OUT UINTN *DataSize, + OUT VOID *Data OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) ( + IN OUT UINTN *VariableNameSize, + IN OUT CHAR16 *VariableName, + IN OUT EFI_GUID *VendorGuid + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_VARIABLE) ( + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data + ); + +// +// Time services. +// + +typedef struct { + // + // Resolution in hertz. + // Ex. 1Hz means 1 second resolution. + // + UINT32 Resolution; + + // + // Accuracy in 1e-6 parts per million. + // Ex. 50,000,000 means 50 parts per million accuracy. + // + UINT32 Accuracy; + + // + // If TRUE, SetTime() clears sub-resolution data. + // + BOOLEAN SetsToZero; +} EFI_TIME_CAPABILITIES; + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_TIME) ( + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_TIME) ( + IN EFI_TIME *Time + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_WAKEUP_TIME) ( + OUT BOOLEAN *Enabled, + OUT BOOLEAN *Pending, + OUT EFI_TIME *Time + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_WAKEUP_TIME) ( + IN BOOLEAN Enable, + IN EFI_TIME *Time OPTIONAL + ); + +// +// Image services. +// + +// +// Image machine types. +// +#define EFI_IMAGE_MACHINE_IA32 0x014C +#define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2 +#define EFI_IMAGE_MACHINE_IA64 0x0200 +#define EFI_IMAGE_MACHINE_EBC 0x0EBC +#define EFI_IMAGE_MACHINE_RISCV32 0x5032 +#define EFI_IMAGE_MACHINE_RISCV64 0x5064 +#define EFI_IMAGE_MACHINE_RISCV128 0x5128 +#define EFI_IMAGE_MACHINE_LOONGARCH32 0x6232 +#define EFI_IMAGE_MACHINE_LOONGARCH64 0x6264 +#define EFI_IMAGE_MACHINE_X64 0x8664 +#define EFI_IMAGE_MACHINE_AARCH64 0xAA64 + +// +// Image subsystem types. +// +#if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION) +#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 +#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 +#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 +#endif + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_LOAD) ( + IN BOOLEAN BootPolicy, + IN EFI_HANDLE ParentImageHandle, + IN EFI_DEVICE_PATH *DevicePath OPTIONAL, + IN VOID *SourceBuffer OPTIONAL, + IN UINTN SourceSize, + OUT EFI_HANDLE *ImageHandle + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_START) ( + IN EFI_HANDLE ImageHandle, + OUT UINTN *ExitDataSize, + OUT CHAR16 **ExitData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_EXIT) ( + IN EFI_HANDLE ImageHandle, + IN EFI_STATUS ExitStatus, + IN UINTN ExitDataSize, + IN CHAR16 *ExitData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_EXIT_BOOT_SERVICES) ( + IN EFI_HANDLE ImageHandle, + IN UINTN MapKey + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_STALL) ( + IN UINTN Microseconds + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_WATCHDOG_TIMER) ( + IN UINTN Timeout, + IN UINT64 WatchdogCode, + IN UINTN DataSize, + IN CHAR16 *WatchdogData OPTIONAL + ); + +typedef enum { + // + // Reset everything to its initial state. + // + EfiResetCold, + + // + // Reset processors to their initial state. + // + EfiResetWarm, + + // + // Shut down. + // + EfiResetShutdown, + + // + // Platform-specific reset. + // + EfiResetPlatformSpecific +} EFI_RESET_TYPE; + +typedef +VOID +(EFIAPI *EFI_RESET_SYSTEM) ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL + ); + +// +// Monotonic counter services. +// + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) ( + OUT UINT64 *Count + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) ( + OUT UINT32 *HighCount + ); + +// +// 32-bit CRC services. +// + +typedef +EFI_STATUS +(EFIAPI *EFI_CALCULATE_CRC32) ( + IN VOID *Data, + IN UINTN DataSize, + OUT UINT32 *Crc32 + ); + +// +// Memory/string operation services. +// + +typedef +VOID +(EFIAPI *EFI_COPY_MEM) ( + IN VOID *Destination, + IN VOID *Source, + IN UINTN Length + ); + +typedef +VOID +(EFIAPI *EFI_SET_MEM) ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ); + +// +// Protocol services. +// + +#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 +#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 +#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 +#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 +#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 +#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 + +typedef enum { + // + // Interface supplied in native form. + // + EFI_NATIVE_INTERFACE, + + EFI_PCODE_INTERFACE +} EFI_INTERFACE_TYPE; + +typedef enum { + // + // Get all handles. + // + AllHandles, + + // + // Get next handle from a RegisterProtocolNotify() event. + // + ByRegisterNotify, + + // + // Get handles supporting a specific protocol. + // + ByProtocol +} EFI_LOCATE_SEARCH_TYPE; + +typedef struct { + EFI_HANDLE AgentHandle; + EFI_HANDLE ControllerHandle; + UINT32 Attributes; + UINT32 OpenCount; +} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; + +typedef +EFI_STATUS +(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( + IN OUT EFI_HANDLE *Handle, + IN EFI_GUID *Protocol, + IN EFI_INTERFACE_TYPE InterfaceType, + IN VOID *Interface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( + IN OUT EFI_HANDLE *Handle, + ... + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + IN VOID *OldInterface, + IN VOID *NewInterface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + IN VOID *Interface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( + IN EFI_HANDLE Handle, + ... + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_HANDLE_PROTOCOL) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + OUT VOID **Interface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_OPEN_PROTOCOL) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + OUT VOID **Interface OPTIONAL, + IN EFI_HANDLE AgentHandle, + IN EFI_HANDLE ControllerHandle, + IN UINT32 Attributes + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CLOSE_PROTOCOL) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + IN EFI_HANDLE AgentHandle, + IN EFI_HANDLE ControllerHandle + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, + OUT UINTN *EntryCount + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PROTOCOLS_PER_HANDLE) ( + IN EFI_HANDLE Handle, + OUT EFI_GUID ***ProtocolBuffer, + OUT UINTN *ProtocolBufferCount + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( + IN EFI_GUID *Protocol, + IN EFI_EVENT Event, + OUT VOID **Registration + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_LOCATE_HANDLE) ( + IN EFI_LOCATE_SEARCH_TYPE SearchType, + IN EFI_GUID *Protocol OPTIONAL, + IN VOID *SearchKey OPTIONAL, + IN OUT UINTN *BufferSize, + OUT EFI_HANDLE *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_LOCATE_DEVICE_PATH) ( + IN EFI_GUID *Protocol, + IN OUT EFI_DEVICE_PATH **DevicePath, + OUT EFI_HANDLE *Device + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_LOCATE_HANDLE_BUFFER) ( + IN EFI_LOCATE_SEARCH_TYPE SearchType, + IN EFI_GUID *Protocol OPTIONAL, + IN VOID *SearchKey OPTIONAL, + OUT UINTN *NoHandles, + OUT EFI_HANDLE **Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_LOCATE_PROTOCOL) ( + IN EFI_GUID *Protocol, + IN VOID *Registration OPTIONAL, + OUT VOID **Interface + ); + +// +// Configuration table services. +// + +typedef +EFI_STATUS +(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( + IN EFI_GUID *Guid, + IN VOID *Table + ); + +// +// Capsule services. +// + +typedef struct { + UINT64 Length; + + union { + EFI_PHYSICAL_ADDRESS DataBlock; + EFI_PHYSICAL_ADDRESS ContinuationPointer; + } Union; +} EFI_CAPSULE_BLOCK_DESCRIPTOR; + +typedef struct { + EFI_GUID CapsuleGuid; + UINT32 HeaderSize; + UINT32 Flags; + UINT32 CapsuleImageSize; +} EFI_CAPSULE_HEADER; + +typedef struct { + UINT32 CapsuleArrayNumber; + VOID *CapsulePtr[1]; +} EFI_CAPSULE_TABLE; + +#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 +#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 +#define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 + +typedef +EFI_STATUS +(EFIAPI *EFI_UPDATE_CAPSULE) ( + IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, + IN UINTN CapsuleCount, + IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) ( + IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, + IN UINTN CapsuleCount, + OUT UINT64 *MaximumCapsuleSize, + OUT EFI_RESET_TYPE *ResetType + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_QUERY_VARIABLE_INFO) ( + IN UINT32 Attributes, + OUT UINT64 *MaximumVariableStorageSize, + OUT UINT64 *RemainingVariableStorageSize, + OUT UINT64 *MaximumVariableSize + ); + +// +// EFI table header. +// +typedef struct { + UINT64 Signature; + UINT32 Revision; + UINT32 HeaderSize; + UINT32 CRC32; + UINT32 Reserved; +} EFI_TABLE_HEADER; + +// +// EFI Runtime Services Table. +// Signature: "RUNTSERV". +// + +#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544E5552 +#define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION + +typedef struct { + EFI_TABLE_HEADER Hdr; + + // + // Time services. + // + EFI_GET_TIME GetTime; + EFI_SET_TIME SetTime; + EFI_GET_WAKEUP_TIME GetWakeupTime; + EFI_SET_WAKEUP_TIME SetWakeupTime; + + // + // Virtual memory services. + // + EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; + EFI_CONVERT_POINTER ConvertPointer; + + // + // Variable services. + // + EFI_GET_VARIABLE GetVariable; + EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; + EFI_SET_VARIABLE SetVariable; + + // + // Miscellaneous services. + // + EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; + EFI_RESET_SYSTEM ResetSystem; + + // + // Services below are available in UEFI 2.0+ only. + // + + // + // Capsule services. + // + EFI_UPDATE_CAPSULE UpdateCapsule; + EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; + + // + // Miscellaneous services. + // + EFI_QUERY_VARIABLE_INFO QueryVariableInfo; +} EFI_RUNTIME_SERVICES; + +// +// EFI Boot Services Table. +// Signature: "BOOTSERV". +// + +#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544F4F42 +#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION + +typedef struct { + EFI_TABLE_HEADER Hdr; + + // + // Task priority services. + // + EFI_RAISE_TPL RaiseTPL; + EFI_RESTORE_TPL RestoreTPL; + + // + // Memory services. + // + EFI_ALLOCATE_PAGES AllocatePages; + EFI_FREE_PAGES FreePages; + EFI_GET_MEMORY_MAP GetMemoryMap; + EFI_ALLOCATE_POOL AllocatePool; + EFI_FREE_POOL FreePool; + + // + // Event & timer services. + // + EFI_CREATE_EVENT CreateEvent; + EFI_SET_TIMER SetTimer; + EFI_WAIT_FOR_EVENT WaitForEvent; + EFI_SIGNAL_EVENT SignalEvent; + EFI_CLOSE_EVENT CloseEvent; + EFI_CHECK_EVENT CheckEvent; + + // + // Protocol handler services. + // + EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; + EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; + EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; + EFI_HANDLE_PROTOCOL HandleProtocol; + EFI_HANDLE_PROTOCOL PCHandleProtocol; + EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; + EFI_LOCATE_HANDLE LocateHandle; + EFI_LOCATE_DEVICE_PATH LocateDevicePath; + EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; + + // + // Image services. + // + EFI_IMAGE_LOAD LoadImage; + EFI_IMAGE_START StartImage; + EFI_EXIT Exit; + EFI_IMAGE_UNLOAD UnloadImage; + EFI_EXIT_BOOT_SERVICES ExitBootServices; + + // + // Miscellaneous services. + // + EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; + EFI_STALL Stall; + EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; + + // + // Services below are available in EFI 1.1+ only. + // + + // + // Driver controller services. + // + EFI_CONNECT_CONTROLLER ConnectController; + EFI_DISCONNECT_CONTROLLER DisconnectController; + + // + // Open and close protocol services. + // + EFI_OPEN_PROTOCOL OpenProtocol; + EFI_CLOSE_PROTOCOL CloseProtocol; + EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; + + // + // Library services. + // + EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; + EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; + EFI_LOCATE_PROTOCOL LocateProtocol; + EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; + EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; + + // + // 32-bit CRC services. + // + EFI_CALCULATE_CRC32 CalculateCrc32; + + // + // Miscellaneous services. + // + EFI_COPY_MEM CopyMem; + EFI_SET_MEM SetMem; + EFI_CREATE_EVENT_EX CreateEventEx; // UEFI 2.0+ only. +} EFI_BOOT_SERVICES; + +// +// EFI Configuration Table and GUID definitions. +// + +#define EFI_ACPI_20_TABLE_GUID \ + { 0x8868E871, 0xE4F1, 0x11D3, {0xBC, 0x22, 0x00, 0x80, 0xC7, 0x3C, 0x88, 0x81} } +#define EFI_ACPI_TABLE_GUID EFI_ACPI_20_TABLE_GUID + +#define EFI_DTB_TABLE_GUID \ + { 0xB1B621D5, 0xF19C, 0x41A5, {0x83, 0x0B, 0xD9, 0x15, 0x2C, 0x69, 0xAA, 0xE0} } + +#define MPS_TABLE_GUID \ + { 0xEB9D2D2F, 0x2D88, 0x11D3, {0x9A, 0x16, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } + +#define ACPI_TABLE_GUID \ + { 0xEB9D2D30, 0x2D88, 0x11D3, {0x9A, 0x16, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } +#define ACPI_10_TABLE_GUID ACPI_TABLE_GUID + +#define SMBIOS_TABLE_GUID \ + { 0xEB9D2D31, 0x2D88, 0x11D3, {0x9A, 0x16, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } + +#define SAL_SYSTEM_TABLE_GUID \ + { 0xEB9D2D32, 0x2D88, 0x11D3, {0x9A, 0x16, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } + +#define SMBIOS3_TABLE_GUID \ + { 0xF2FD1544, 0x9794, 0x4A2C, {0x99, 0x2E, 0xE5, 0xBB, 0xCF, 0x20, 0xE3, 0x94} } + +typedef struct { + EFI_GUID VendorGuid; + VOID *VendorTable; +} EFI_CONFIGURATION_TABLE; + +// +// EFI System Table. +// Signature: "IBI SYST". +// + +#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 + +// +// EFI System Table revision numbers. +// +#define EFI_MAKE_REVISION(Major, Minor) (((Major) << 16) | (Minor)) +#define EFI_1_02_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(1, 02) +#define EFI_1_10_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(1, 10) +#define EFI_2_00_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 00) +#define EFI_2_10_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 10) +#define EFI_2_20_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 20) +#define EFI_2_30_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 30) +#define EFI_2_31_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 31) +#define EFI_2_40_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 40) +#define EFI_2_50_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 50) +#define EFI_2_60_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 60) +#define EFI_2_70_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 70) +#define EFI_2_80_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 80) +#define EFI_2_90_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 90) +#define EFI_2_100_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 100) +#define EFI_2_110_SYSTEM_TABLE_REVISION EFI_MAKE_REVISION(2, 110) + +#define EFI_SYSTEM_TABLE_REVISION EFI_2_70_SYSTEM_TABLE_REVISION +#define EFI_SPECIFICATION_VERSION EFI_SYSTEM_TABLE_REVISION + +struct _EFI_SYSTEM_TABLE { + EFI_TABLE_HEADER Hdr; + + CHAR16 *FirmwareVendor; + UINT32 FirmwareRevision; + + EFI_HANDLE ConsoleInHandle; + EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn; + + EFI_HANDLE ConsoleOutHandle; + EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut; + + EFI_HANDLE StandardErrorHandle; + EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *StdErr; + + EFI_RUNTIME_SERVICES *RuntimeServices; + EFI_BOOT_SERVICES *BootServices; + + UINTN NumberOfTableEntries; + EFI_CONFIGURATION_TABLE *ConfigurationTable; +}; + +// +// Image entry point prototype. +// +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_ENTRY_POINT) ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ); + +#pragma pack() + +#endif /* !_EFIAPI_H */ diff --git a/SDK/INC/EFI/eficon.h b/SDK/INC/EFI/eficon.h new file mode 100644 index 0000000..dcd799b --- /dev/null +++ b/SDK/INC/EFI/eficon.h @@ -0,0 +1,434 @@ +/*++ + +Copyright (c) 2024-2025, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + eficon.h + +Abstract: + + Provides EFI console protocol definitions. + +--*/ + +#ifndef _EFICON_H +#define _EFICON_H + +#pragma pack(1) + +// +// EFI Simple Text Output Protocol. +// + +#define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \ + { 0x387477C2, 0x69C7, 0x11D2, {0x8E, 0x39, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } +#define SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID + +typedef struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL; +typedef EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SIMPLE_TEXT_OUTPUT_INTERFACE; + +// +// Text attributes. +// + +#define EFI_TEXT_ATTR(Foreground, Background) ((Foreground) | ((Background) << 4)) + +#define EFI_BLACK 0x00 +#define EFI_BLUE 0x01 +#define EFI_GREEN 0x02 +#define EFI_RED 0x04 +#define EFI_BRIGHT 0x08 +#define EFI_CYAN (EFI_BLUE | EFI_GREEN) +#define EFI_MAGENTA (EFI_BLUE | EFI_RED) +#define EFI_BROWN (EFI_GREEN | EFI_RED) +#define EFI_LIGHTGRAY (EFI_BLUE | EFI_GREEN | EFI_RED) +#define EFI_DARKGRAY (EFI_BRIGHT) +#define EFI_LIGHTBLUE (EFI_BLUE | EFI_BRIGHT) +#define EFI_LIGHTGREEN (EFI_GREEN | EFI_BRIGHT) +#define EFI_LIGHTCYAN (EFI_CYAN | EFI_BRIGHT) +#define EFI_LIGHTRED (EFI_RED | EFI_BRIGHT) +#define EFI_LIGHTMAGENTA (EFI_MAGENTA | EFI_BRIGHT) +#define EFI_YELLOW (EFI_BROWN | EFI_BRIGHT) +#define EFI_WHITE (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT) + +#define EFI_BACKGROUND_BLACK 0x00 +#define EFI_BACKGROUND_BLUE 0x10 +#define EFI_BACKGROUND_GREEN 0x20 +#define EFI_BACKGROUND_RED 0x40 +#define EFI_BACKGROUND_CYAN (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN) +#define EFI_BACKGROUND_MAGENTA (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED) +#define EFI_BACKGROUND_BROWN (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED) +#define EFI_BACKGROUND_LIGHTGRAY (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED) + +// +// Unicode Box Draw characters. +// + +#define BOXDRAW_HORIZONTAL 0x2500 +#define BOXDRAW_VERTICAL 0x2502 +#define BOXDRAW_DOWN_RIGHT 0x250C +#define BOXDRAW_DOWN_LEFT 0x2510 +#define BOXDRAW_UP_RIGHT 0x2514 +#define BOXDRAW_UP_LEFT 0x2518 +#define BOXDRAW_VERTICAL_RIGHT 0x251C +#define BOXDRAW_VERTICAL_LEFT 0x2524 +#define BOXDRAW_DOWN_HORIZONTAL 0x252C +#define BOXDRAW_UP_HORIZONTAL 0x2534 +#define BOXDRAW_VERTICAL_HORIZONTAL 0x253C + +#define BOXDRAW_DOUBLE_HORIZONTAL 0x2550 +#define BOXDRAW_DOUBLE_VERTICAL 0x2551 +#define BOXDRAW_DOWN_RIGHT_DOUBLE 0x2552 +#define BOXDRAW_DOWN_DOUBLE_RIGHT 0x2553 +#define BOXDRAW_DOUBLE_DOWN_RIGHT 0x2554 + +#define BOXDRAW_DOWN_LEFT_DOUBLE 0x2555 +#define BOXDRAW_DOWN_DOUBLE_LEFT 0x2556 +#define BOXDRAW_DOUBLE_DOWN_LEFT 0x2557 + +#define BOXDRAW_UP_RIGHT_DOUBLE 0x2558 +#define BOXDRAW_UP_DOUBLE_RIGHT 0x2559 +#define BOXDRAW_DOUBLE_UP_RIGHT 0x255A + +#define BOXDRAW_UP_LEFT_DOUBLE 0x255B +#define BOXDRAW_UP_DOUBLE_LEFT 0x255C +#define BOXDRAW_DOUBLE_UP_LEFT 0x255D + +#define BOXDRAW_VERTICAL_RIGHT_DOUBLE 0x255E +#define BOXDRAW_VERTICAL_DOUBLE_RIGHT 0x255F +#define BOXDRAW_DOUBLE_VERTICAL_RIGHT 0x2560 + +#define BOXDRAW_VERTICAL_LEFT_DOUBLE 0x2561 +#define BOXDRAW_VERTICAL_DOUBLE_LEFT 0x2562 +#define BOXDRAW_DOUBLE_VERTICAL_LEFT 0x2563 + +#define BOXDRAW_DOWN_HORIZONTAL_DOUBLE 0x2564 +#define BOXDRAW_DOWN_DOUBLE_HORIZONTAL 0x2565 +#define BOXDRAW_DOUBLE_DOWN_HORIZONTAL 0x2566 + +#define BOXDRAW_UP_HORIZONTAL_DOUBLE 0x2567 +#define BOXDRAW_UP_DOUBLE_HORIZONTAL 0x2568 +#define BOXDRAW_DOUBLE_UP_HORIZONTAL 0x2569 + +#define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE 0x256A +#define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL 0x256B +#define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL 0x256C + +// +// Required Block Elements. +// +#define BLOCKELEMENT_FULL_BLOCK 0x2588 +#define BLOCKELEMENT_LIGHT_SHADE 0x2591 + +// +// Required Geometric Shapes. +// +#define GEOMETRICSHAPE_UP_TRIANGLE 0x25B2 +#define GEOMETRICSHAPE_RIGHT_TRIANGLE 0x25BA +#define GEOMETRICSHAPE_DOWN_TRIANGLE 0x25BC +#define GEOMETRICSHAPE_LEFT_TRIANGLE 0x25C4 + +// +// Required Arrow Shapes. +// +#define ARROW_LEFT 0x2190 +#define ARROW_UP 0x2191 +#define ARROW_RIGHT 0x2192 +#define ARROW_DOWN 0x2193 + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_RESET) ( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_OUTPUT_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_SET_ATTRIBUTE) ( + IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, + IN UINTN Attribute + ); + +// +// Mode/cursor. +// + +typedef struct { + INT32 MaxMode; + INT32 Mode; + INT32 Attribute; + INT32 CursorColumn; + INT32 CursorRow; + BOOLEAN CursorVisible; +} SIMPLE_TEXT_OUTPUT_MODE; + +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_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 + ); + +struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL { + EFI_TEXT_RESET Reset; + + EFI_TEXT_OUTPUT_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 Input Protocol. +// + +#define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \ + { 0x387477C1, 0x69C7, 0x11D2, {0x8E, 0x39, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } +#define SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID + +typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL; +typedef EFI_SIMPLE_TEXT_INPUT_PROTOCOL SIMPLE_INPUT_INTERFACE; + +// +// Required Unicode control characters. +// +#define CHAR_NULL 0x0000 +#define CHAR_BACKSPACE 0x0008 +#define CHAR_TAB 0x0009 +#define CHAR_LINEFEED 0x000A +#define CHAR_CARRIAGE_RETURN 0x000D + +// +// Scan codes. +// +#define SCAN_NULL 0x0000 +#define SCAN_UP 0x0001 +#define SCAN_DOWN 0x0002 +#define SCAN_RIGHT 0x0003 +#define SCAN_LEFT 0x0004 +#define SCAN_HOME 0x0005 +#define SCAN_END 0x0006 +#define SCAN_INSERT 0x0007 +#define SCAN_DELETE 0x0008 +#define SCAN_PAGE_UP 0x0009 +#define SCAN_PAGE_DOWN 0x000A +#define SCAN_F1 0x000B +#define SCAN_F2 0x000C +#define SCAN_F3 0x000D +#define SCAN_F4 0x000E +#define SCAN_F5 0x000F +#define SCAN_F6 0x0010 +#define SCAN_F7 0x0011 +#define SCAN_F8 0x0012 +#define SCAN_F9 0x0013 +#define SCAN_F10 0x0014 +#define SCAN_ESC 0x0017 + +typedef struct { + UINT16 ScanCode; + CHAR16 UnicodeChar; +} EFI_INPUT_KEY; + +typedef +EFI_STATUS +(EFIAPI *EFI_INPUT_RESET) ( + IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_INPUT_READ_KEY) ( + IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, + OUT EFI_INPUT_KEY *Key + ); + +struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL { + EFI_INPUT_RESET Reset; + EFI_INPUT_READ_KEY ReadKeyStroke; + EFI_EVENT WaitForKey; +}; + +// +// EFI Extended Simple Text Input Protocol. +// + +#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \ + { 0xDD9E7534, 0x7762, 0x4698, {0x8C, 0x14, 0xF5, 0x85, 0x17, 0xA6, 0x25, 0xAA} } +#define SIMPLE_TEXT_INPUT_EX_PROTOCOL EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID + +typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL; + +// +// Shift state. +// +#define EFI_SHIFT_STATE_VALID 0x80000000 +#define EFI_RIGHT_SHIFT_PRESSED 0x00000001 +#define EFI_LEFT_SHIFT_PRESSED 0x00000002 +#define EFI_RIGHT_CONTROL_PRESSED 0x00000004 +#define EFI_LEFT_CONTROL_PRESSED 0x00000008 +#define EFI_RIGHT_ALT_PRESSED 0x00000010 +#define EFI_LEFT_ALT_PRESSED 0x00000020 +#define EFI_RIGHT_LOGO_PRESSED 0x00000040 +#define EFI_LEFT_LOGO_PRESSED 0x00000080 +#define EFI_MENU_KEY_PRESSED 0x00000100 +#define EFI_SYS_REQ_PRESSED 0x00000200 + +// +// Toggle state. +// +#define EFI_SCROLL_LOCK_ACTIVE 0x01 +#define EFI_NUM_LOCK_ACTIVE 0x02 +#define EFI_CAPS_LOCK_ACTIVE 0x04 +#define EFI_KEY_STATE_EXPOSED 0x40 +#define EFI_TOGGLE_STATE_VALID 0x80 + +// +// Additional scan codes. +// +#define SCAN_PAUSE 0x0048 +#define SCAN_F13 0x0068 +#define SCAN_F14 0x0069 +#define SCAN_F15 0x006A +#define SCAN_F16 0x006B +#define SCAN_F17 0x006C +#define SCAN_F18 0x006D +#define SCAN_F19 0x006E +#define SCAN_F20 0x006F +#define SCAN_F21 0x0070 +#define SCAN_F22 0x0071 +#define SCAN_F23 0x0072 +#define SCAN_F24 0x0073 +#define SCAN_MUTE 0x007F +#define SCAN_VOLUME_UP 0x0080 +#define SCAN_VOLUME_DOWN 0x0081 +#define SCAN_BRIGHTNESS_UP 0x0100 +#define SCAN_BRIGHTNESS_DOWN 0x0101 +#define SCAN_SUSPEND 0x0102 +#define SCAN_HIBERNATE 0x0103 +#define SCAN_TOGGLE_DISPLAY 0x0104 +#define SCAN_RECOVERY 0x0105 +#define SCAN_EJECT 0x0106 + +typedef UINT8 EFI_KEY_TOGGLE_STATE; + +typedef struct { + UINT32 KeyShiftState; + EFI_KEY_TOGGLE_STATE KeyToggleState; +} EFI_KEY_STATE; + +typedef struct { + EFI_INPUT_KEY Key; + EFI_KEY_STATE KeyState; +} EFI_KEY_DATA; + +typedef +EFI_STATUS +(EFIAPI *EFI_INPUT_RESET_EX) ( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_INPUT_READ_KEY_EX) ( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + OUT EFI_KEY_DATA *KeyData + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_STATE) ( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + IN EFI_KEY_TOGGLE_STATE *KeyToggleState + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_KEY_NOTIFY_FUNCTION) ( + IN EFI_KEY_DATA *KeyData + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY) ( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + IN EFI_KEY_DATA *KeyData, + IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, + OUT VOID **NotifyHandle + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY) ( + IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, + IN VOID *NotificationHandle + ); + +struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL { + EFI_INPUT_RESET_EX Reset; + EFI_INPUT_READ_KEY_EX ReadKeyStrokeEx; + EFI_EVENT WaitForKeyEx; + EFI_SET_STATE SetState; + EFI_REGISTER_KEYSTROKE_NOTIFY RegisterKeyNotify; + EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify; +}; + +#pragma pack() + +#endif /* !_EFICON_H */ diff --git a/SDK/INC/EFI/efidef.h b/SDK/INC/EFI/efidef.h new file mode 100644 index 0000000..f5fd443 --- /dev/null +++ b/SDK/INC/EFI/efidef.h @@ -0,0 +1,375 @@ +/*++ + +Copyright (c) 2024-2025, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efidef.h + +Abstract: + + Provides basic EFI type/structure definitions. + +--*/ + +#ifndef _EFIDEF_H +#define _EFIDEF_H + +#pragma pack(1) + +#ifndef VOID + #define VOID void +#endif + +#ifndef CONST + #define CONST const +#endif + +#ifndef VOLATILE + #define VOLATILE volatile +#endif + +// +// Decorators to show parameter usage. +// IN - Argument passed into routine. +// OUT - Pointed-to value set by routine. +// OPTIONAL - Argument is not required. +// +#ifndef IN + #define IN + #define OUT + #define OPTIONAL +#endif + +#ifndef NULL + #if defined(__cplusplus) + #if __cplusplus >= 201103L + #define NULL nullptr + #else + #define NULL 0 + #endif + #else + #define NULL ((VOID *) 0) + #endif +#endif + +#ifndef TRUE + #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || defined(__cplusplus) + #define TRUE true + #define FALSE false + #else + #define TRUE ((BOOLEAN) 1) + #define FALSE ((BOOLEAN) 0) + #endif +#endif + +#ifndef FORCEINLINE + #if defined(_MSC_EXTENSIONS) + #define FORCEINLINE __forceinline + #elif defined(__clang__) || defined(__GNUC__) + #define FORCEINLINE __attribute__((always_inline)) + #else + #define FORCEINLINE static inline + #endif +#endif + +// +// Error code helpers. +// +#define EFIERR(e) (EFI_ERROR_MASK | e) +#define EFIERR_OEM(e) (EFI_ERROR_MASK_OEM | e) + +// +// Unsigned integer types. +// +typedef uint8_t UINT8; +typedef uint16_t UINT16; +typedef uint32_t UINT32; +typedef uint64_t UINT64; + +// +// Signed integer types. +// +typedef int8_t INT8; +typedef int16_t INT16; +typedef int32_t INT32; +typedef int64_t INT64; + +// +// Boolean types. +// +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || defined(__cplusplus) + typedef bool BOOLEAN; +#else + typedef UINT8 BOOLEAN; +#endif + +// +// Character types. +// +typedef UINT8 CHAR8; +typedef UINT16 CHAR16; + +// +// Miscellaneous types. +// +typedef UINTN EFI_STATUS; +typedef UINT64 EFI_LBA; +typedef UINTN EFI_TPL; +typedef VOID *EFI_HANDLE; +typedef VOID *EFI_EVENT; + +// +// Static assertion helper. +// +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || (defined(__cplusplus) && __cplusplus >= 201103L) + #define STATIC_ASSERT static_assert +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define STATIC_ASSERT _Static_assert +#else + #warning Static assertion not available. Compilation problems may not be detected! + #define STATIC_ASSERT(expression, message) +#endif + +// +// Ensure that types are of the correct size. +// +STATIC_ASSERT(sizeof(UINT8) == 1, "sizeof(UINT8) must equal 1"); +STATIC_ASSERT(sizeof(UINT16) == 2, "sizeof(UINT16) must equal 2"); +STATIC_ASSERT(sizeof(UINT32) == 4, "sizeof(UINT32) must equal 4"); +STATIC_ASSERT(sizeof(UINT64) == 8, "sizeof(UINT64) must equal 8"); +STATIC_ASSERT(sizeof(INT8) == 1, "sizeof(INT8) must equal 1"); +STATIC_ASSERT(sizeof(INT16) == 2, "sizeof(INT16) must equal 2"); +STATIC_ASSERT(sizeof(INT32) == 4, "sizeof(INT32) must equal 4"); +STATIC_ASSERT(sizeof(INT64) == 8, "sizeof(INT64) must equal 8"); +STATIC_ASSERT(sizeof(BOOLEAN) == 1, "sizeof(BOOLEAN) must equal 1"); +STATIC_ASSERT(sizeof(CHAR8) == 1, "sizeof(CHAR8) must equal 1"); +STATIC_ASSERT(sizeof(CHAR16) == 2, "sizeof(CHAR16) must equal 2"); + +// +// GUID (Globally Unique IDentifier). +// +typedef struct { + UINT32 Data1; + UINT16 Data2; + UINT16 Data3; + UINT8 Data4[8]; +} EFI_GUID; + +// +// 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; + +// +// For EFI_TIME.Daylight. +// +#define EFI_TIME_ADJUST_DAYLIGHT 0x01 +#define EFI_TIME_IN_DAYLIGHT 0x02 + +// +// For EFI_TIME.TimeZone. +// +#define EFI_UNSPECIFIED_TIMEZONE 0x07FF + +// +// Network addresses. +// + +typedef struct { + UINT8 Addr[4]; +} EFI_IPv4_ADDRESS; + +typedef struct { + UINT8 Addr[16]; +} EFI_IPv6_ADDRESS; + +typedef union { + UINT32 Addr[4]; + EFI_IPv4_ADDRESS v4; + EFI_IPv6_ADDRESS v6; +} EFI_IP_ADDRESS; + +typedef struct { + UINT8 Addr[32]; +} EFI_MAC_ADDRESS; + +typedef struct { + UINT8 Address[6]; +} BLUETOOTH_ADDRESS; + +typedef struct { + UINT8 Address[6]; + UINT8 Type; +} BLUETOOTH_LE_ADDRESS; + +// +// Memory addresses. +// +typedef UINT64 EFI_PHYSICAL_ADDRESS; +typedef UINT64 EFI_VIRTUAL_ADDRESS; + +// +// Memory allocation methods. +// +typedef enum { + // + // Allocate range at any address. + // + AllocateAnyPages, + + // + // Allocate range ending at a specific address. + // + AllocateMaxAddress, + + // + // Allocate range starting at a specific address. + // + AllocateAddress, + + // + // For bounds checking. + // + MaxAllocateType +} EFI_ALLOCATE_TYPE; + +// +// Memory types. +// +typedef enum { + EfiReservedMemoryType, + EfiLoaderCode, + EfiLoaderData, + EfiBootServicesCode, + EfiBootServicesData, + EfiRuntimeServicesCode, + EfiRuntimeServicesData, + EfiConventionalMemory, + EfiUnusableMemory, + EfiACPIReclaimMemory, + EfiACPIMemoryNVS, + EfiMemoryMappedIO, + EfiMemoryMappedIOPortSpace, + EfiPalCode, + EfiPersistentMemory, + EfiUnacceptedMemoryType, + EfiMaxMemoryType, + + MEMORY_TYPE_OEM_RESERVED_MIN = 0x70000000, + MEMORY_TYPE_OEM_RESERVED_MAX = 0x7FFFFFFF, + MEMORY_TYPE_OS_RESERVED_MIN = 0x80000000, + MEMORY_TYPE_OS_RESERVED_MAX = 0xFFFFFFFF +} EFI_MEMORY_TYPE; + +// +// Memory caching 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 + +// +// Memory protection attributes. +// +#define EFI_MEMORY_WP 0x0000000000001000 +#define EFI_MEMORY_RP 0x0000000000002000 +#define EFI_MEMORY_XP 0x0000000000004000 +#define EFI_MEMORY_RO 0x0000000000020000 + +// +// Miscellaneous memory attributes. +// +#define EFI_MEMORY_NV 0x0000000000008000 +#define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000 +#define EFI_MEMORY_SP 0x0000000000040000 +#define EFI_MEMORY_CPU_CRYPTO 0x0000000000080000 +#define EFI_MEMORY_HOT_PLUGGABLE 0x0000000000100000 +#define EFI_MEMORY_ISA_VALID 0x4000000000000000 +#define EFI_MEMORY_RUNTIME 0x8000000000000000 + +// +// Memory type/attribute masks. +// +#define EFI_MEMORY_ISA_MASK 0x0FFFF00000000000 +#define EFI_CACHE_ATTRIBUTE_MASK (EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT | EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_WP) +#define EFI_MEMORY_ACCESS_MASK (EFI_MEMORY_RP | EFI_MEMORY_XP | EFI_MEMORY_RO) +#define EFI_MEMORY_ATTRIBUTE_MASK (EFI_MEMORY_ACCESS_MASK | EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO) + +// +// Memory descriptor. +// + +#define EFI_MEMORY_DESCRIPTOR_VERSION 1 + +typedef struct { + // + // Memory type (EFI_MEMORY_TYPE) of the region. + // + UINT32 Type; + + UINT32 Pad; + + // + // Must be aligned on an EFI_PAGE_SIZE-byte boundary. + // Must not be above 0xFFFFFFFFFFFFF000. + // + EFI_PHYSICAL_ADDRESS PhysicalStart; + EFI_VIRTUAL_ADDRESS VirtualStart; + + // + // Number of EFI_PAGE_SIZE-byte pages. + // Must not be zero. + // + UINT64 NumberOfPages; + + // + // Capabilities of the memory region. + // + UINT64 Attribute; +} EFI_MEMORY_DESCRIPTOR; + +// +// International language. +// +typedef CHAR8 ISO_639_2; +#define ISO_639_2_ENTRY_SIZE 3 + +// +// Memory units & address helpers. +// +#define EFI_PAGE_SIZE 4096 +#define EFI_PAGE_MASK 0xFFF +#define EFI_PAGE_SHIFT 12 +#define EFI_SIZE_TO_PAGES(s) (((s) >> EFI_PAGE_SHIFT) + ((s) & EFI_PAGE_MASK ? 1:0)) + +// +// OS indications. +// +#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001 +#define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002 +#define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 0x0000000000000004 +#define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED 0x0000000000000008 +#define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED 0x0000000000000010 +#define EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY 0x0000000000000040 +#define EFI_OS_INDICATIONS_JSON_CONFIG_DATA_REFRESH 0x0000000000000080 + +#pragma pack() + +#endif /* !_EFIDEF_H */ diff --git a/SDK/INC/EFI/efidevp.h b/SDK/INC/EFI/efidevp.h new file mode 100644 index 0000000..9599a4b --- /dev/null +++ b/SDK/INC/EFI/efidevp.h @@ -0,0 +1,1056 @@ +/*++ + +Copyright (c) 2024-2025, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efidevp.h + +Abstract: + + Provides EFI device path definitions. + +--*/ + +#ifndef _EFIDEVP_H +#define _EFIDEVP_H + +#pragma pack(1) + +// +// Device path node. +// +typedef struct { + UINT8 Type; + UINT8 SubType; + + // + // Usage is determined by type and subtype. + // + UINT8 Length[2]; +} EFI_DEVICE_PATH_PROTOCOL; + +// +// For backwards-compatibility with EFI 1.1. +// +typedef EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH; + +// +// Device path types. +// + +#define HARDWARE_DEVICE_PATH 0x01 +#define ACPI_DEVICE_PATH 0x02 +#define MESSAGING_DEVICE_PATH 0x03 +#define MEDIA_DEVICE_PATH 0x04 +#define BBS_DEVICE_PATH 0x05 +#define END_DEVICE_PATH_TYPE 0x7F + +#define EFI_DP_TYPE_MASK 0x7F +#define EFI_DP_TYPE_UNPACKED 0x80 + +// +// End device path subtypes. +// +#define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01 +#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xFF + +// +// End device path length. +// +#define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH_PROTOCOL)) + +// +// Hardware device path subtypes. +// +#define HW_PCI_DP 0x01 +#define HW_PCCARD_DP 0x02 +#define HW_MEMMAP_DP 0x03 +#define HW_VENDOR_DP 0x04 +#define HW_CONTROLLER_DP 0x05 +#define HW_BMC_DP 0x06 + +// +// PCI (Peripheral Component Interconnect) hardware subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 Function; + UINT8 Device; +} PCI_DEVICE_PATH; + +// +// PCCard hardware subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 FunctionNumber; +} PCCARD_DEVICE_PATH; + +// +// Memory map hardware subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // EFI_MEMORY_TYPE. + // + UINT32 MemoryType; + + EFI_PHYSICAL_ADDRESS StartingAddress; + EFI_PHYSICAL_ADDRESS EndingAddress; +} MEMMAP_DEVICE_PATH; + +// +// Vendor hardware subtype. +// + +#define UNKNOWN_DEVICE_GUID \ + { 0xCF31FAC5, 0xC24E, 0x11D2, {0x85, 0xF3, 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B} } + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // Vendor-assigned GUID. + // + EFI_GUID Guid; + + // + // Vendor-defined variable-size data. + // +} VENDOR_DEVICE_PATH; + +typedef struct { + VENDOR_DEVICE_PATH DevicePath; + UINT8 LegacyDriveLetter; +} UNKNOWN_DEVICE_VENDOR_DEVICE_PATH; + +// +// Controller hardware subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 ControllerNumber; +} CONTROLLER_DEVICE_PATH; + +// +// BMC (Baseboard Management Controller) hardware sutype. +// + +#define BMC_INTERFACE_TYPE_UNKNOWN 0x00 +#define BMC_INTERFACE_TYPE_KCS 0x01 +#define BMC_INTERFACE_TYPE_SMIC 0x02 +#define BMC_INTERFACE_TYPE_BT 0x03 + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 InterfaceType; + UINT64 BaseAddress; +} BMC_DEVICE_PATH; + +// +// ACPI (Advanced Configuration and Power Interface) device path subtypes. +// +#define ACPI_DP 0x01 +#define ACPI_EXTENDED_DP 0x02 +#define ACPI_ADR_DP 0x03 +#define ACPI_NVDIMM_DP 0x04 + +// +// EISA ID constants. +// +#define PNP_EISA_ID_CONST 0x41D0 +#define PNP_EISA_ID_MASK 0xFFFF + +// +// EISA ID helpers. +// +#define EISA_ID(name, num) ((num) << 16) | (UINT32)((name)) +#define EISA_ID_TO_NUM(id) ((id) >> 16) +#define EISA_PNP_ID(pnpId) (EISA_ID(PNP_EISA_ID_CONST, (pnpId))) +#define EFI_PNP_ID EISA_PNP_ID + +// +// ACPI subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // EISA-compressed PnP hardware ID. + // + UINT32 HID; + + // + // Unique ID. + // + UINT32 UID; +} ACPI_HID_DEVICE_PATH; + +// +// Extended ACPI subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // EISA-compressed PnP hardware ID. + // + UINT32 HID; + + // + // Unique ID. + // + UINT32 UID; + + // + // EISA-compressed compatible PnP hardware ID. + // + UINT32 CID; +} ACPI_EXTENDED_HID_DEVICE_PATH; + +// +// ADR ACPI subtype. +// + +#define ACPI_ADR_DISPLAY_TYPE_OTHER 0 +#define ACPI_ADR_DISPLAY_TYPE_VGA 1 +#define ACPI_ADR_DISPLAY_TYPE_TV 2 +#define ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL 3 +#define ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL 4 + +#define ACPI_DISPLAY_ADR(scheme, headId, nonVgaOutput, biosCanDetect, vendorInfo, type, port, index) \ + ((UINT32)( \ + ((UINT32)((scheme) & 0x1) << 31) | \ + (((headId) & 0x7) << 18) | \ + (((nonVgaOutput) & 0x1) << 17) | \ + (((biosCanDetect) & 0x1) << 16) | \ + (((vendorInfo) & 0xF) << 12) | \ + (((type) & 0xF) << 8) | \ + (((port) & 0xF) << 4) | \ + ((index) & 0xF) \ + )) + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // ACPI _ADR value. + // + UINT32 ADR; +} ACPI_ADR_DEVICE_PATH; + +// +// NVDIMM ACPI subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // Unique physical identifier of NFIT device. + // + UINT32 NFITDeviceHandle; +} ACPI_NVDIMM_DEVICE_PATH; + +// +// Messaging device subtypes. +// +#define MSG_ATAPI_DP 0x01 +#define MSG_SCSI_DP 0x02 +#define MSG_FIBRECHANNEL_DP 0x03 +#define MSG_1394_DP 0x04 +#define MSG_USB_DP 0x05 +#define MSG_I2O_DP 0x06 +#define MSG_INFINIBAND_DP 0x09 +#define MSG_VENDOR_DP 0x0A +#define MSG_MAC_ADDR_DP 0x0B +#define MSG_IPv4_DP 0x0C +#define MSG_IPv6_DP 0x0D +#define MSG_UART_DP 0x0E +#define MSG_USB_CLASS_DP 0x0F +#define MSG_USB_WWID_DP 0x10 +#define MSG_DEVICE_LOGICAL_UNIT_DP 0x11 +#define MSG_SATA_DP 0x12 +#define MSG_ISCSI_DP 0x13 +#define MSG_VLAN_DP 0x14 +#define MSG_FIBRECHANNELEX_DP 0x15 +#define MSG_SASEX_DP 0x16 +#define MSG_NVME_NAMESPACE_DP 0x17 +#define MSG_URI_DP 0x18 +#define MSG_UFS_DP 0x19 +#define MSG_SD_DP 0x1A +#define MSG_BLUETOOTH_DP 0x1B +#define MSG_WIFI_DP 0x1C +#define MSG_EMMC_DP 0x1D +#define MSG_BLUETOOTH_LE_DP 0x1E +#define MSG_DNS_DP 0x1F +#define MSG_NVDIMM_NAMESPACE_DP 0x20 +#define MSG_NVME_OF_NAMESPACE_DP 0x22 + +// +// ATAPI (ATA Packet Interface) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // 0 (primary) or 1 (secondary). + // + UINT8 PrimarySecondary; + + // + // 0 (master) or 1 (slave). + // + UINT8 SlaveMaster; + + // + // LUN (Logical Unit Number). + // + UINT16 Lun; +} ATAPI_DEVICE_PATH; + +// +// SCSI (Small Computer System Interface) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // PUN (Physical Unit Number), aka SCSI ID. + // + UINT16 Pun; + + // + // LUN (Logical Unit Number). + // + UINT16 Lun; +} SCSI_DEVICE_PATH; + +// +// Fibre Channel messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Reserved; + + // + // WWN (WorldWide Number). + // + UINT64 WWN; + + // + // LUN (Logical Unit Number). + // + UINT64 Lun; +} FIBRECHANNEL_DEVICE_PATH; + +// +// 1394 messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Reserved; + UINT64 Guid; +} F1394_DEVICE_PATH; + +// +// USB (Universal Serial Bus) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 ParentPortNumber; + UINT8 InterfaceNumber; +} USB_DEVICE_PATH; + +// +// I2O (Intelligent I/O) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // TID (Target ID). + // + UINT32 Tid; +} I2O_DEVICE_PATH; + +// +// InfiniBand messaging subtype. +// + +#define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE 0x01 +#define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT 0x02 +#define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL 0x04 +#define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL 0x08 +#define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL 0x10 + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // INFINIBAND_RESOURCE_FLAG_*. + // + UINT32 ResourceFlags; + + UINT8 PortGid[16]; + UINT64 ServiceId; + UINT64 TargetPortId; + UINT64 DeviceId; +} INFINIBAND_DEVICE_PATH; + +// +// Vendor messaging subtype. +// Use VENDOR_DEVICE_PATH struct. +// + +// +// UART flow control vendor protocol. +// + +#define EFI_VT_100_PLUS_GUID \ + { 0x7BAEC70B, 0x57E0, 0x4C76, {0x8E, 0x87, 0x2F, 0x9E, 0x28, 0x08, 0x83, 0x43} } + +#define EFI_VT_UTF8_GUID \ + { 0xAD15A0D6, 0x8BEC, 0x4ACF, {0xA0, 0x73, 0xD0, 0x1D, 0xE7, 0x7E, 0x2D, 0x88} } + +#define EFI_VT_100_GUID \ + { 0xDFA66065, 0xB419, 0x11D3, {0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } + +#define EFI_PC_ANSI_GUID \ + { 0xE0C14753, 0xF9BE, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } + +#define DEVICE_PATH_MESSAGING_PC_ANSI EFI_PC_ANSI_GUID +#define DEVICE_PATH_MESSAGING_VT_100 EFI_VT_100_GUID +#define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID +#define DEVICE_PATH_MESSAGING_VT_UTF8 EFI_VT_UTF8_GUID + +#define UART_FLOW_CONTROL_HARDWARE 0x00000001 +#define UART_FLOW_CONTROL_XON_XOFF 0x00000010 + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_GUID Guid; + UINT32 FlowControlMap; +} UART_FLOW_CONTROL_DEVICE_PATH; + +// +// SAS (Serial-Attached SCSI) vendor protocol. +// + +#define DEVICE_PATH_MESSAGING_SAS EFI_SAS_DEVICE_PATH_GUID + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_GUID Guid; + UINT32 Reserved; + + // + // SAS address. + // + UINT64 SasAddress; + + // + // LUN (Logical Unit Number). + // + UINT64 Lun; + + UINT16 DeviceTopology; + UINT16 RelativeTargetPort; +} SAS_DEVICE_PATH; + +// +// MAC (Medium Access Control) address messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_MAC_ADDRESS MacAddress; + + // + // Interface type (802.11 etc). + // + UINT8 IfType; +} MAC_ADDR_DEVICE_PATH; + +// +// IPv4 messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_IPv4_ADDRESS LocalIpAddress; + EFI_IPv4_ADDRESS RemoteIpAddress; + UINT16 LocalPort; + UINT16 RemotePort; + UINT16 Protocol; + BOOLEAN StaticIpAddress; + + // + // UEFI 2.0+ only. + // + EFI_IPv4_ADDRESS GatewayIpAddress; + EFI_IPv4_ADDRESS SubnetMask; +} IPv4_DEVICE_PATH; + +// +// IPv6 messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_IPv6_ADDRESS LocalIpAddress; + EFI_IPv6_ADDRESS RemoteIpAddress; + UINT16 LocalPort; + UINT16 RemotePort; + UINT16 Protocol; + UINT8 IpAddressOrigin; + + // + // UEFI 2.0+ only. + // + UINT8 PrefixLength; + EFI_IPv6_ADDRESS GatewayIpAddress; +} IPv6_DEVICE_PATH; + +// +// UART messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Reserved; + UINT64 BaudRate; + UINT8 DataBits; + + // + // Parity configuration. + // 0x00 - Default. + // 0x01 - None. + // 0x02 - Even. + // 0x03 - Odd. + // 0x04 - Mark. + // 0x05 - Space. + // + UINT8 Parity; + + // + // Number of stop bits. + // 0x00 - Default. + // 0x01 - 1. + // 0x02 - 1.5. + // 0x03 - 2. + // + UINT8 StopBits; +} UART_DEVICE_PATH; + +// +// USB class messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // 0xFFFF will match any vendor/product ID. + // + UINT16 VendorId; + UINT16 ProductId; + + // + // 0xFF will match any class/subclass/protocol. + // + UINT8 DeviceClass; + UINT8 DeviceSubClass; + UINT8 DeviceProtocol; +} USB_CLASS_DEVICE_PATH; + +// +// USB WWID (WorldWide IDentifier) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT16 InterfaceNumber; + UINT16 VendorId; + UINT16 ProductId; + CHAR16 SerialNumber[]; +} USB_WWID_DEVICE_PATH; + +// +// Device LUN (Logical Unit Number) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // LUN (Logical Unit Number). + // + UINT8 Lun; +} DEVICE_LOGICAL_UNIT_DEVICE_PATH; + +// +// SATA (Serial ATA) messaging subtype. +// + +#define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000 + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // 0xFFFF is reserved. + // + UINT16 HBAPortNumber; + + // + // 0xFFFF if directly connected to HBA. + // + UINT16 PortMultiplierPortNumber; + + // + // LUN (Logical Unit Number). + // + UINT16 Lun; +} SATA_DEVICE_PATH; + +// +// iSCSI (Internet SCSI) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // 0 if TCP. + // + UINT16 NetworkProtocol; + + UINT16 LoginOption; + + // + // LUN (Logical Unit Number). + // + UINT64 Lun; + + UINT16 TargetPortalGroupTag; +} ISCSI_DEVICE_PATH; + +// +// VLAN (Virtual LAN) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // Must be in range 0-4094. + // + UINT16 VlanId; +} VLAN_DEVICE_PATH; + +// +// Extended Fibre Channel messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Reserved; + + // + // WWN (WorldWide Number). + // + UINT8 WWN[8]; + + // + // LUN (Logical Unit Number). + // + UINT8 Lun[8]; +} FIBRECHANNELEX_DEVICE_PATH; + +// +// Extended SAS (Serial-Attached SCSI) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 SasAddress[8]; + + // + // LUN (Logical Unit Number). + // + UINT8 Lun[8]; + + UINT16 DeviceTopology; + UINT16 RelativeTargetPort; +} SASEX_DEVICE_PATH; + +// +// NVME (NVM Express) namespace messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 NamespaceId; + UINT64 NamespaceUuid; +} NVME_NAMESPACE_DEVICE_PATH; + +// +// URI (Uniform Resource Identifier) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + CHAR8 Uri[]; +} URI_DEVICE_PATH; + +// +// UFS (Universal Flash Storage) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // PUN (Physical Unit Number). + // + UINT8 Pun; + + // + // LUN (Logical Unit Number). + // + UINT8 Lun; +} UFS_DEVICE_PATH; + +// +// SD (Secure Digital) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 SlotNumber; +} SD_DEVICE_PATH; + +// +// Bluetooth messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + BLUETOOTH_ADDRESS Address; +} BLUETOOTH_DEVICE_PATH; + +// +// Wi-Fi messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + + // + // SSID (Service Set Identifier). + // + UINT8 SSId[32]; +} WIFI_DEVICE_PATH; + +// +// EMMC (Embedded MMC) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 SlotNumber; +} EMMC_DEVICE_PATH; + +// +// Bluetooth LE (Low Energy) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + BLUETOOTH_LE_ADDRESS Address; +} BLUETOOTH_LE_DEVICE_PATH; + +// +// DNS (Domain Name Service) messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 IsIPv6; + EFI_IP_ADDRESS DnsServerIp[]; +} DNS_DEVICE_PATH; + +// +// NVDIMM (Non-Volatile DIMM) namespace messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_GUID Uuid; +} NVDIMM_NAMESPACE_DEVICE_PATH; + +// +// NVME-oF (NVME over Fabric) namespace messaging subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 NamespaceIdType; + UINT8 NamespaceId[16]; + CHAR8 SubsystemNqn[]; +} NVME_OF_NAMESPACE_DEVICE_PATH; + +// +// Media device path subtypes. +// +#define MEDIA_HARDDRIVE_DP 0x01 +#define MEDIA_CDROM_DP 0x02 +#define MEDIA_VENDOR_DP 0x03 +#define MEDIA_FILEPATH_DP 0x04 +#define MEDIA_PROTOCOL_DP 0x05 +#define MEDIA_PIWG_FW_FILE_DP 0x06 +#define MEDIA_PIWG_FW_VOL_DP 0x07 +#define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08 +#define MEDIA_RAM_DISK_DP 0x09 + +// +// Hard drive media subtype. +// + +#define MBR_TYPE_PCAT 0x01 +#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02 + +#define NO_DISK_SIGNATURE 0x00 +#define SIGNATURE_TYPE_MBR 0x01 +#define SIGNATURE_TYPE_GUID 0x02 + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 PartitionNumber; + UINT64 PartitionStart; + UINT64 PartitionSize; + UINT8 Signature[16]; + UINT8 MBRType; + UINT8 SignatureType; +} HARDDRIVE_DEVICE_PATH; + +// +// CD-ROM (CD Read-Only Memory) media subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 BootEntry; + UINT64 PartitionStart; + UINT64 PartitionSize; +} CDROM_DEVICE_PATH; + +// +// Vendor media subtype. +// Use VENDOR_DEVICE_PATH structure. +// + +// +// File path media subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + CHAR16 PathName[1]; +} FILEPATH_DEVICE_PATH; + +// +// Protocol media subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_GUID Protocol; +} MEDIA_PROTOCOL_DEVICE_PATH; + +// +// PIWG (Platform Initialization Working Group) firmware file media subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_GUID FvFileName; +} MEDIA_FW_VOL_FILEPATH_DEVICE_PATH; + +// +// PIWG (Platform Initialization Working Group) firmware volume media subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_GUID FvName; +} MEDIA_FW_VOL_DEVICE_PATH; + +// +// Relative offset range media subtype. +// +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Reserved; + UINT64 StartingOffset; + UINT64 EndingOffset; +} MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH; + +// +// RAM disk media subtype. +// + +#define EFI_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE +#define EFI_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE +#define EFI_PERSISTENT_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT +#define EFI_PERSISTENT_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 StartingAddr[2]; + UINT32 EndingAddr[2]; + EFI_GUID TypeGuid; + UINT16 Instance; +} MEDIA_RAM_DISK_DEVICE_PATH; + +// +// BBS (BIOS Boot Specification) device path subtypes. +// +#define BBS_BBS_DP 0x01 + +// +// BBS (BIOS Boot Specification) BBS subtype. +// + +#define BBS_TYPE_FLOPPY 0x01 +#define BBS_TYPE_HARDDRIVE 0x02 +#define BBS_TYPE_CDROM 0x03 +#define BBS_TYPE_PCMCIA 0x04 +#define BBS_TYPE_USB 0x05 +#define BBS_TYPE_EMBEDDED_NETWORK 0x06 +#define BBS_TYPE_DEV 0x80 +#define BBS_TYPE_UNKNOWN 0xFF + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT16 DeviceType; + UINT16 StatusFlag; + CHAR8 String[1]; +} BBS_BBS_DEVICE_PATH; + +// +// Device path helpers. +// + +FORCEINLINE +UINT8 +DevicePathType ( + IN CONST VOID *Node + ) + +/*++ + +Routine Description: + + Gets the type of a device path node. + +Arguments: + + Node - The node to get the type from. + +Return Value: + + The type of the node. + +--*/ + +{ + return ((EFI_DEVICE_PATH *)(Node))->Type & EFI_DP_TYPE_MASK; +} + +FORCEINLINE +UINT8 +DevicePathSubType ( + IN CONST VOID *Node + ) + +/*++ + +Routine Description: + + Gets the subtype of a device path node. + +Arguments: + + Node - The node to get the subtype from. + +Return Value: + + The subtype of the node. + +--*/ + +{ + return ((EFI_DEVICE_PATH *)(Node))->SubType; +} + +FORCEINLINE +UINTN +DevicePathNodeLength ( + IN CONST VOID *Node + ) + +/*++ + +Routine Description: + + Gets the length of a device path node. + +Arguments: + + Node - The node to get the length from. + +Return Value: + + The length of the node. + +--*/ + +{ + return *((UINT16 *)&((EFI_DEVICE_PATH *)(Node))->Length[0]); +} + +FORCEINLINE +EFI_DEVICE_PATH * +NextDevicePathNode ( + IN CONST VOID *Node + ) + +/*++ + +Routine Description: + + Finds the next node in a device path. + +Arguments: + + Node - The current node to find the next node from. + +Return Value: + + A pointer to the next node. + +--*/ + +{ + return (EFI_DEVICE_PATH *)((UINT8 *)(Node) + DevicePathNodeLength(Node)); +} + +FORCEINLINE +BOOLEAN +IsDevicePathEndType ( + IN CONST VOID *Node + ) + +/*++ + +Routine Description: + + Checks if a device path node is an end node. + +Arguments: + + Node - The node to check. + +Return Value: + + TRUE if the node is an end node. + + FALSE if the node is not an end node. + +--*/ + +{ + return (BOOLEAN)(DevicePathType(Node) == END_DEVICE_PATH_TYPE); +} + +#pragma pack() + +#endif /* !_EFIDEVP_H */ diff --git a/SDK/INC/EFI/efierr.h b/SDK/INC/EFI/efierr.h new file mode 100644 index 0000000..b6ec05b --- /dev/null +++ b/SDK/INC/EFI/efierr.h @@ -0,0 +1,86 @@ +/*++ + +Copyright (c) 2024-2025, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efierr.h + +Abstract: + + Provides EFI error definitions. + +--*/ + +#ifndef _EFIERR_H +#define _EFIERR_H + +#define EFIWARN(a) (a) +#define EFI_ERROR(a) (((INTN) (a)) < 0) + +// +// Standard errors. +// +#define EFI_SUCCESS 0 +#define EFI_LOAD_ERROR EFIERR(1) +#define EFI_INVALID_PARAMETER EFIERR(2) +#define EFI_UNSUPPORTED EFIERR(3) +#define EFI_BAD_BUFFER_SIZE EFIERR(4) +#define EFI_BUFFER_TOO_SMALL EFIERR(5) +#define EFI_NOT_READY EFIERR(6) +#define EFI_DEVICE_ERROR EFIERR(7) +#define EFI_WRITE_PROTECTED EFIERR(8) +#define EFI_OUT_OF_RESOURCES EFIERR(9) +#define EFI_VOLUME_CORRUPTED EFIERR(10) +#define EFI_VOLUME_FULL EFIERR(11) +#define EFI_NO_MEDIA EFIERR(12) +#define EFI_MEDIA_CHANGED EFIERR(13) +#define EFI_NOT_FOUND EFIERR(14) +#define EFI_ACCESS_DENIED EFIERR(15) +#define EFI_NO_RESPONSE EFIERR(16) +#define EFI_NO_MAPPING EFIERR(17) +#define EFI_TIMEOUT EFIERR(18) +#define EFI_NOT_STARTED EFIERR(19) +#define EFI_ALREADY_STARTED EFIERR(20) +#define EFI_ABORTED EFIERR(21) +#define EFI_ICMP_ERROR EFIERR(22) +#define EFI_TFTP_ERROR EFIERR(23) +#define EFI_PROTOCOL_ERROR EFIERR(24) +#define EFI_INCOMPATIBLE_VERSION EFIERR(25) +#define EFI_SECURITY_VIOLATION EFIERR(26) +#define EFI_CRC_ERROR EFIERR(27) +#define EFI_END_OF_MEDIA EFIERR(28) +#define EFI_END_OF_FILE EFIERR(31) +#define EFI_INVALID_LANGUAGE EFIERR(32) +#define EFI_COMPROMISED_DATA EFIERR(33) +#define EFI_IP_ADDRESS_CONFLICT EFIERR(34) +#define EFI_HTTP_ERROR EFIERR(35) + +// +// Standard warnings. +// +#define EFI_WARN_UNKOWN_GLYPH EFIWARN(1) +#define EFI_WARN_DELETE_FAILURE EFIWARN(2) +#define EFI_WARN_WRITE_FAILURE EFIWARN(3) +#define EFI_WARN_BUFFER_TOO_SMALL EFIWARN(4) +#define EFI_WARN_STALE_DATA EFIWARN(5) +#define EFI_WARN_FILE_SYSTEM EFIWARN(6) +#define EFI_WARN_RESET_REQUESTED EFIWARN(7) + +// +// ICMP errors. +// +#define EFI_NETWORK_UNREACHABLE EFIERR(100) +#define EFI_HOST_UNREACHABLE EFIERR(101) +#define EFI_PROTOCOL_UNREACHABLE EFIERR(102) +#define EFI_PORT_UNREACHABLE EROERR(103) + +// +// TCP errors. +// +#define EFI_CONNECTION_FIN EFIERR(104) +#define EFI_CONNECTION_RESET EFIERR(105) +#define EFI_CONNECTION_REFUSED EFIERR(106) + +#endif /* !_EFIERR_H */ diff --git a/SDK/INC/EFI/efiprot.h b/SDK/INC/EFI/efiprot.h new file mode 100644 index 0000000..0caf7cd --- /dev/null +++ b/SDK/INC/EFI/efiprot.h @@ -0,0 +1,70 @@ +/*++ + +Copyright (c) 2024-2025, Quinn Stephens. +Provided under the BSD 3-Clause license. + +Module Name: + + efiprot.h + +Abstract: + + Provides EFI protocol definitions. + +--*/ + +#ifndef _EFIPROT_H +#define _EFIPROT_H + +#pragma pack(1) + +// +// Device Path Protocol. +// +#define EFI_DEVICE_PATH_PROTOCOL_GUID \ + { 0x9576E91, 0x6D3F, 0x11D2, {0x8E, 0x39, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } +#define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID + +// +// Loaded Image Protocol. +// + +#define EFI_LOADED_IMAGE_PROTOCOL_GUID \ + { 0x5B1B31A1, 0x9562, 0x11D2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } +#define LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE_PROTOCOL_GUID + +#define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \ + { 0xBC62157E, 0x3E33, 0x4FEC, {0x99, 0x20, 0x2D, 0x3B, 0x36, 0xD7, 0x50, 0xDF} } + +#define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000 +#define EFI_IMAGE_INFORMATION_REVISION EFI_LOADED_IMAGE_PROTOCOL_REVISION + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_UNLOAD) ( + IN EFI_HANDLE ImageHandle + ); + +typedef struct { + UINT32 Revision; + EFI_HANDLE ParentHandle; + struct _EFI_SYSTEM_TABLE *SystemTable; + + EFI_HANDLE DeviceHandle; + EFI_DEVICE_PATH *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, EFI_LOADED_IMAGE; + +#pragma pack() + +#endif /* !_EFIPROT_H */ diff --git a/SDK/INC/NT/guiddef.h b/SDK/INC/NT/guiddef.h index 01e8b99..637fe89 100644 --- a/SDK/INC/NT/guiddef.h +++ b/SDK/INC/NT/guiddef.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: diff --git a/SDK/INC/NT/nt.h b/SDK/INC/NT/nt.h index fbdd8e4..8acc0e7 100644 --- a/SDK/INC/NT/nt.h +++ b/SDK/INC/NT/nt.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: diff --git a/SDK/INC/NT/ntdef.h b/SDK/INC/NT/ntdef.h index ca4acaa..25b707f 100644 --- a/SDK/INC/NT/ntdef.h +++ b/SDK/INC/NT/ntdef.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -31,7 +31,7 @@ Abstract: #endif #ifndef VOID -#define VOID void +#define VOID void #endif #ifndef CONST @@ -44,16 +44,23 @@ Abstract: #ifndef NULL #if defined(__cplusplus) -#define NULL 0 +#if __cplusplus >= 201103L +#define NULL nullptr #else -#define NULL ((VOID *)0) +#define NULL 0 +#endif +#else +#define NULL ((VOID *) 0) #endif #endif #ifndef FORCEINLINE #if defined(_MSC_EXTENSIONS) #define FORCEINLINE __forceinline +#elif defined(__clang__) || defined(__GNUC__) +#define FORCEINLINE __attribute__((always_inline)) #else +#warning Unable to define FORCEINLINE #define FORCEINLINE static inline #endif #endif @@ -61,14 +68,24 @@ Abstract: #ifndef FASTCALL #if defined(_M_IX86) #define FASTCALL __fastcall +#elif defined(__clang__) || defined(__GNUC__) +#define FASTCALL __attribute__((fastcall)) #else +#warning Unable to defined FASTCALL #define FASTCALL #endif #endif #ifndef NTAPI #if !defined(_M_AMD64) +#if defined(_MSC_EXTENSIONS) #define NTAPI __stdcall +#elif defined(__clang__) || defined(__GNUC__) +#define NTAPI __attribute__((stdcall)) +#else +#warning Unable to define NTAPI +#define NTAPI +#endif #else #define NTAPI #endif @@ -77,48 +94,48 @@ Abstract: // // Basic types. // -typedef char CHAR; +typedef char CHAR; typedef short SHORT; -typedef long LONG; -typedef unsigned char UCHAR; +typedef long LONG; +typedef unsigned char UCHAR; typedef unsigned short USHORT; -typedef unsigned long ULONG; +typedef unsigned long ULONG; // // Minimum/maximum values of basic types. // #define MINCHAR 0x80 -#define MAXCHAR 0x7f +#define MAXCHAR 0x7F #define MINSHORT 0x8000 -#define MAXSHORT 0x7fff +#define MAXSHORT 0x7FFF #define MINLONG 0x80000000 -#define MAXLONG 0x7fffffff -#define MAXUCHAR 0xff -#define MAXUSHORT 0xffff -#define MAXULONG 0xffffffff +#define MAXLONG 0x7FFFFFFF +#define MAXUCHAR 0xFF +#define MAXUSHORT 0xFFFF +#define MAXULONG 0xFFFFFFFF // // Long long types. // #if defined(_MSC_EXTENSIONS) -typedef __int64 LONGLONG; -typedef unsigned __int64 ULONGLONG; +typedef __int64 LONGLONG; +typedef unsigned __int64 ULONGLONG; #elif defined(UNIX_LP64) -typedef long LONGLONG; -typedef unsigned long ULONGLONG; +typedef long LONGLONG; +typedef unsigned long ULONGLONG; #else -typedef long long LONGLONG; +typedef long long LONGLONG; typedef unsigned long long ULONGLONG; #endif -#define MAXLONGLONG 0x7fffffffffffffff -#define MAXULONGLONG 0xffffffffffffffff +#define MAXLONGLONG 0x7FFFFFFFFFFFFFFF +#define MAXULONGLONG 0xFFFFFFFFFFFFFFFF // // Logical/boolean value types. // typedef ULONG LOGICAL; -typedef int BOOL; +typedef int BOOL; typedef UCHAR BOOLEAN; #define TRUE 1 @@ -128,34 +145,34 @@ typedef UCHAR BOOLEAN; // Numeric pointer types. // #ifdef _WIN64 -typedef LONGLONG LONG_PTR; +typedef LONGLONG LONG_PTR; typedef ULONGLONG ULONG_PTR; #else -typedef LONG LONG_PTR; -typedef ULONG ULONG_PTR; +typedef LONG LONG_PTR; +typedef ULONG ULONG_PTR; #endif // // Basic type pointers. // -typedef VOID *PVOID; -typedef CHAR *PCHAR; -typedef SHORT *PSHORT; -typedef UCHAR *PUCHAR; +typedef VOID *PVOID; +typedef CHAR *PCHAR; +typedef SHORT *PSHORT; +typedef UCHAR *PUCHAR; typedef USHORT *PUSHORT; -typedef ULONG *PULONG; +typedef ULONG *PULONG; // // Long long type pointers. // -typedef LONGLONG *PLONGLONG; +typedef LONGLONG *PLONGLONG; typedef ULONGLONG *PULONGLONG; // // Logical/boolean type pointers. // -typedef ULONG *PLOGICAL; -typedef BOOL *PBOOL; +typedef ULONG *PLOGICAL; +typedef BOOL *PBOOL; typedef BOOLEAN *PBOOLEAN; // @@ -174,15 +191,15 @@ typedef CONST WCHAR *PCWSTR, *LPCWSTR; // // Handle types. // -typedef PVOID HANDLE; +typedef PVOID HANDLE; typedef HANDLE *PHANDLE; -#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1) +#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR) -1) // // Status code types. // -typedef LONG NTSTATUS; +typedef LONG NTSTATUS; typedef NTSTATUS *PNTSTATUS; // @@ -213,10 +230,10 @@ typedef NTSTATUS *PNTSTATUS; // #define LODWORD(x) ((ULONG)(x)) #define HIDWORD(x) ((ULONG)((x) >> 32)) -#define LOWORD(x) ((USHORT)(x)) -#define HIWORD(x) ((USHORT)((x) >> 16)) -#define LOBYTE(x) ((UCHAR)(x)) -#define HIBYTE(x) ((UCHAR)((x) >> 8)) +#define LOWORD(x) ((USHORT)(x)) +#define HIWORD(x) ((USHORT)((x) >> 16)) +#define LOBYTE(x) ((UCHAR)(x)) +#define HIBYTE(x) ((UCHAR)((x) >> 8)) // // Large (64-bit) integer value. @@ -224,7 +241,7 @@ typedef NTSTATUS *PNTSTATUS; typedef union LARGE_INTEGER { struct { ULONG LowPart; - LONG HighPart; + LONG HighPart; }; LONGLONG QuadPart; @@ -248,7 +265,7 @@ typedef union ULARGE_INTEGER { typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; - PWSTR Buffer; + PWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING; typedef CONST UNICODE_STRING *PCUNICODE_STRING; diff --git a/SDK/INC/NT/ntimage.h b/SDK/INC/NT/ntimage.h index 2c5318b..10b49db 100644 --- a/SDK/INC/NT/ntimage.h +++ b/SDK/INC/NT/ntimage.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -17,10 +17,30 @@ Abstract: #define _NTIMAGE_H // -// Machine type values. +// Machine types. // #define IMAGE_FILE_MACHINE_UNKNOWN 0x0000 -#define IMAGE_FILE_MACHINE_I386 0x014c +#define IMAGE_FILE_MACHINE_I386 0x014C #define IMAGE_FILE_MACHINE_AMD64 0x8664 +// +// Subsystem types. +// +#define IMAGE_SUBSYSTEM_UNKNOWN 0 +#define IMAGE_SUBSYSTEM_NATIVE 1 +#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 +#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 +#define IMAGE_SUBSYSTEM_WINDOWS_CE_OLD 4 +#define IMAGE_SUBSYSTEM_OS2_CUI 5 +#define IMAGE_SUBSYSTEM_POSIX_CUI 7 +#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 +#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 +#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 +#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 +#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 +#define IMAGE_SUBSYSTEM_EFI_ROM 13 +#define IMAGE_SUBSYSTEM_XBOX 14 +#define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16 +#define IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG 17 + #endif /* !_NTIMAGE_H */ diff --git a/SDK/INC/NT/ntrtl.h b/SDK/INC/NT/ntrtl.h index f19b70c..1f1581a 100644 --- a/SDK/INC/NT/ntrtl.h +++ b/SDK/INC/NT/ntrtl.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -149,13 +149,13 @@ Return Value: return (BOOLEAN)(Flink == Blink); } -#define ULONG_ERROR 0xffffffffUL +#define ULONG_ERROR 0xFFFFFFFFUL FORCEINLINE NTSTATUS RtlULongSub ( - IN ULONG ulMinuend, - IN ULONG ulSubtrahend, + IN ULONG ulMinuend, + IN ULONG ulSubtrahend, IN OUT PULONG pulResult ) @@ -194,14 +194,14 @@ VOID NTAPI RtlInitUnicodeString ( OUT PUNICODE_STRING Destination, - IN PCWSTR Source + IN PCWSTR Source ); NTSTATUS NTAPI RtlGUIDFromString ( - IN PUNICODE_STRING String, - OUT GUID *Guid + IN PUNICODE_STRING String, + OUT GUID *Guid ); #ifdef __cplusplus diff --git a/SDK/INC/NT/ntstatus.h b/SDK/INC/NT/ntstatus.h index 863ff94..28f3fae 100644 --- a/SDK/INC/NT/ntstatus.h +++ b/SDK/INC/NT/ntstatus.h @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -16,11 +16,7 @@ Abstract: #ifndef _NTSTATUS_H #define _NTSTATUS_H -#define STATUS_SUCCESS ((NTSTATUS) 0x00000000L) - -// -// TODO: There are an insane amount of status values. -// +#define STATUS_SUCCESS ((NTSTATUS) 0x00000000L) #define STATUS_MEDIA_CHANGED ((NTSTATUS) 0x8000001CL) #define STATUS_UNSUCCESSFUL ((NTSTATUS) 0xC0000001L) #define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xC0000002L) diff --git a/SDK/RTL/guid.c b/SDK/RTL/guid.c index 469dfbd..9969160 100644 --- a/SDK/RTL/guid.c +++ b/SDK/RTL/guid.c @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -19,7 +19,7 @@ Abstract: int ScanHexFormat ( IN PCWSTR Buffer, - IN ULONG MaximumLength, + IN ULONG MaximumLength, IN PCWSTR Format, ... ) @@ -28,13 +28,17 @@ ScanHexFormat ( Routine Description: - Turns a text representation of a GUID into the binary format. + Parses a formatted hex string. Arguments: - String - A GUID string in the format {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. + Buffer - The source string to parse. - Guid - The GUID structure which is to recieve the data. + MaximumLength - The length of the source string. + + Format - The format of the source string. + + ... - Pointers to data destinations. Return Value: @@ -93,10 +97,10 @@ Return Value: if (*Buffer >= '0' && *Buffer <= '9') { Number += *Buffer - '0'; - } else if (*Buffer >= 'a' && *Buffer <= 'f') { - Number += *Buffer - 'a' + 0xa; } else if (*Buffer >= 'A' && *Buffer <= 'F') { Number += *Buffer - 'A' + 0xA; + } else if (*Buffer >= 'a' && *Buffer <= 'f') { + Number += *Buffer - 'a' + 0xa; } else { return -1; } @@ -125,8 +129,8 @@ Return Value: NTSTATUS NTAPI RtlGUIDFromString ( - IN PUNICODE_STRING String, - OUT GUID *Guid + IN PUNICODE_STRING String, + OUT GUID *Guid ) /*++ @@ -155,9 +159,9 @@ Return Value: // Convert string to GUID data. // if (ScanHexFormat( - String->Buffer, String->Length / sizeof(WCHAR), - L"{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", - &Guid->Data1, &Guid->Data2, &Guid->Data3, &Data4[0], &Data4[1], &Data4[2], &Data4[3], &Data4[4], &Data4[5], &Data4[6], &Data4[7] + String->Buffer, String->Length / sizeof(WCHAR), + L"{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + &Guid->Data1, &Guid->Data2, &Guid->Data3, &Data4[0], &Data4[1], &Data4[2], &Data4[3], &Data4[4], &Data4[5], &Data4[6], &Data4[7] ) == -1) { return STATUS_INVALID_PARAMETER; } diff --git a/SDK/RTL/string.c b/SDK/RTL/string.c index 7a6de1e..d2d04fb 100644 --- a/SDK/RTL/string.c +++ b/SDK/RTL/string.c @@ -1,6 +1,6 @@ /*++ -Copyright (c) 2024, Quinn Stephens. +Copyright (c) 2024-2025, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: @@ -20,7 +20,7 @@ VOID NTAPI RtlInitUnicodeString ( OUT PUNICODE_STRING Destination, - IN PCWSTR Source + IN PCWSTR Source ) /*++ diff --git a/premake5.lua b/premake5.lua index 68315ed..9aad871 100644 --- a/premake5.lua +++ b/premake5.lua @@ -1,5 +1,5 @@ --- ---- Copyright (c) 2024, Quinn Stephens. +--- Copyright (c) 2024-2025, Quinn Stephens. --- Provided under the BSD 3-Clause license. --- @@ -46,7 +46,7 @@ project("BOOTMGR") location("BOOT/ENVIRON/APP/BOOTMGR") files({ "BOOT/ENVIRON/INC/**.h", "BOOT/ENVIRON/LIB/**.c", "BOOT/ENVIRON/LIB/**.S", "BOOT/ENVIRON/APP/BOOTMGR/**.c" }) - includedirs({ "BOOT/ENVIRON/INC", "SDK/INC/CRT", "SDK/INC/NT" }) + includedirs({ "BOOT/ENVIRON/INC", "SDK/INC/CRT", "SDK/INC/NT", "SDK/INC/EFI" }) libdirs({ "BUILD/SDK" }) objdir("BUILD/BOOT") targetdir("BUILD/BOOT")