From d1fff10c15b7019387763bbf1333bd864c7692dd Mon Sep 17 00:00:00 2001 From: belliash Date: Sun, 31 Jul 2022 10:54:03 +0200 Subject: [PATCH] Add basic EFI-related structures --- sdk/xtdk/xtkmapi.h | 1 + sdk/xtdk/xtuefi.h | 390 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 391 insertions(+) create mode 100644 sdk/xtdk/xtuefi.h diff --git a/sdk/xtdk/xtkmapi.h b/sdk/xtdk/xtkmapi.h index e4a14d5..fec6a50 100644 --- a/sdk/xtdk/xtkmapi.h +++ b/sdk/xtdk/xtkmapi.h @@ -20,3 +20,4 @@ /* Architecture-independent XT API */ #include "xtcommon.h" +#include "xtuefi.h" diff --git a/sdk/xtdk/xtuefi.h b/sdk/xtdk/xtuefi.h new file mode 100644 index 0000000..6e05d3e --- /dev/null +++ b/sdk/xtdk/xtuefi.h @@ -0,0 +1,390 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: sdk/xtdk/xtuefi.h + * DESCRIPTION: XT UEFI support + * DEVELOPERS: Rafal Kupiec + */ + +#ifndef __XTDK_XTUEFI_H +#define __XTDK_XTUEFI_H + +#include "xttypes.h" +#include "xtstruct.h" +#include "xtcommon.h" + + +/* Basic UEFI types */ +typedef PVOID EFI_EVENT, *PEFI_EVENT; +typedef PVOID EFI_HANDLE, *PEFI_HANDLE; +typedef UINT64 EFI_LBA, *PEFI_LBA; +typedef UINT64 EFI_PHYSICAL_ADDRESS, *PEFI_PHYSICAL_ADDRESS; +typedef UINT_PTR EFI_STATUS, *PEFI_STATUS; +typedef UINT_PTR EFI_TPL, *PEFI_TPL; +typedef UINT64 EFI_VIRTUAL_ADDRESS, *PEFI_VIRTUAL_ADDRESS; + +/* Enumeration list of EFI memory allocation types */ +typedef enum _EFI_ALLOCATE_TYPE +{ + AllocateAnyPages, + AllocateMaxAddress, + AllocateAddress, + MaxAllocateType +} EFI_ALLOCATE_TYPE, *PEFI_ALLOCATE_TYPE; + +/* Enumeration list of reset types */ +typedef enum _EFI_RESET_TYPE +{ + EfiResetCold, + EfiResetWarm, + EfiResetShutdown +} EFI_RESET_TYPE, *PEFI_RESET_TYPE; + +/* Enumeration list of timer delay types */ +typedef enum _EFI_TIMER_DELAY +{ + TimerCancel, + TimerPeriodic, + TimerRelative, + TimerTypeMax +} EFI_TIMER_DELAY, *PEFI_TIMER_DELAY; + +/* Enumeration list of EFI Locate Search Types */ +typedef enum _EFI_LOCATE_SEARCH_TYPE +{ + AllHandles, + ByRegisterNotify, + ByProtocol +} EFI_LOCATE_SEARCH_TYPE, *PEFI_LOCATE_SEARCH_TYPE; + +/* Enumeration list of EFI Interface Types */ +typedef enum _EFI_INTERFACE_TYPE +{ + EFI_NATIVE_INTERFACE, + EFI_PCODE_INTERFACE +} EFI_INTERFACE_TYPE, *PEFI_INTERFACE_TYPE; + +/* Enumeration of memory types introduced in UEFI */ +typedef enum _EFI_MEMORY_TYPE +{ + EfiReservedMemoryType, + EfiLoaderCode, + EfiLoaderData, + EfiBootServicesCode, + EfiBootServicesData, + EfiRuntimeServicesCode, + EfiRuntimeServicesData, + EfiConventionalMemory, + EfiUnusableMemory, + EfiACPIReclaimMemory, + EfiACPIMemoryNVS, + EfiMemoryMappedIO, + EfiMemoryMappedIOPortSpace, + EfiPalCode, + EfiMaxMemoryType +} EFI_MEMORY_TYPE, *PEFI_MEMORY_TYPE; + +/* EFI structures forward references */ +typedef struct _EFI_CAPSULE_HEADER EFI_CAPSULE_HEADER, *PEFI_CAPSULE_HEADER; +typedef struct _EFI_GUID EFI_GUID, *PEFI_GUID; +typedef struct _EFI_MEMORY_DESCRIPTOR EFI_MEMORY_DESCRIPTOR, *PEFI_MEMORY_DESCRIPTOR; +typedef struct _EFI_RUNTIME_SERVICES EFI_RUNTIME_SERVICES, *PEFI_RUNTIME_SERVICES; +typedef struct _EFI_TABLE_HEADER EFI_TABLE_HEADER, *PEFI_TABLE_HEADER; +typedef struct _EFI_TIME EFI_TIME, *PEFI_TIME; +typedef struct _EFI_TIME_CAPABILITIES EFI_TIME_CAPABILITIES, *PEFI_TIME_CAPABILITIES; +typedef struct _EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL, *PEFI_DEVICE_PATH_PROTOCOL; +typedef struct _EFI_CONFIGURATION_TABLE EFI_CONFIGURATION_TABLE, *PEFI_CONFIGURATION_TABLE; +typedef struct _EFI_OPEN_PROTOCOL_INFORMATION_ENTRY EFI_OPEN_PROTOCOL_INFORMATION_ENTRY, *PEFI_OPEN_PROTOCOL_INFORMATION_ENTRY; +typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL, *PEFI_SIMPLE_TEXT_INPUT_PROTOCOL; +typedef struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL, *PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL; +typedef struct _EFI_SIMPLE_TEXT_OUTPUT_MODE EFI_SIMPLE_TEXT_OUTPUT_MODE, *PEFI_SIMPLE_TEXT_OUTPUT_MODE; +typedef struct _EFI_INPUT_KEY EFI_INPUT_KEY, *PEFI_INPUT_KEY; + +/* EFI routines forward references */ +typedef EFI_STATUS (*PEFI_CONVERT_POINTER)(UINT64 DebugDisposition, PVOID *Address); +typedef EFI_STATUS (*PEFI_ALLOCATE_PAGES)(EFI_ALLOCATE_TYPE Type, UINT_PTR MemoryType, UINT_PTR Pages, EFI_PHYSICAL_ADDRESS *Memory); +typedef EFI_STATUS (*PEFI_ALLOCATE_POOL)(UINT_PTR PoolType, UINT_PTR Size, PVOID *Buffer); +typedef EFI_STATUS (*PEFI_FREE_PAGES)(EFI_PHYSICAL_ADDRESS Memory, UINT_PTR Pages); +typedef EFI_STATUS (*PEFI_FREE_POOL)(PVOID Buffer); +typedef VOID (*PEFI_EVENT_NOTIFY)(EFI_EVENT Event, PVOID Context); +typedef EFI_STATUS (*PEFI_CREATE_EVENT)(UINT32 Type, EFI_TPL NotifyTpl, PEFI_EVENT_NOTIFY NotifyFunction, PVOID NotifyContext, PEFI_GUID EventGroup, PEFI_EVENT Event); +typedef EFI_STATUS (*PEFI_GET_MEMORY_MAP)(PUINT_PTR MemoryMapSize, PEFI_MEMORY_DESCRIPTOR MemoryMap, PUINT_PTR MapKey, PUINT_PTR DescriptorSize, PUINT32 DescriptorVersion); +typedef EFI_STATUS (*PEFI_GET_VARIABLE)(PUINT16 VariableName, PEFI_GUID VendorGuid, PUINT32 Attributes, PUINT_PTR DataSize, PVOID Data); +typedef EFI_STATUS (*PEFI_GET_NEXT_HIGH_MONO_COUNT)(PUINT32 HighCount); +typedef EFI_STATUS (*PEFI_GET_NEXT_VARIABLE_NAME)(PUINT_PTR VariableNameSize, PUINT16 VariableName, PEFI_GUID VendorGuid); +typedef EFI_STATUS (*PEFI_GET_TIME)(PEFI_TIME Time, PEFI_TIME_CAPABILITIES Capabilities); +typedef EFI_STATUS (*PEFI_SET_TIME)(PEFI_TIME Time); +typedef EFI_STATUS (*PEFI_SET_TIMER)(EFI_EVENT Event, EFI_TIMER_DELAY Type, UINT64 TriggerTime); +typedef EFI_STATUS (*PEFI_SIGNAL_EVENT)(EFI_EVENT Event); +typedef EFI_STATUS (*PEFI_CLOSE_EVENT)(EFI_EVENT Event); +typedef EFI_STATUS (*PEFI_CHECK_EVENT)(EFI_EVENT Event); +typedef EFI_STATUS (*PEFI_CREATE_EVENT_EX)(UINT32 Type, EFI_TPL NotifyTpl, PEFI_EVENT_NOTIFY NotifyFunction, PVOID NotifyContext, PEFI_GUID EventGroup, PEFI_EVENT Event); +typedef EFI_STATUS (*PEFI_WAIT_FOR_EVENT)(UINT_PTR NumberOfEvents, PEFI_EVENT Event, PUINT_PTR Index); +typedef EFI_STATUS (*PEFI_QUERY_CAPSULE_CAPABILITIES)(PEFI_CAPSULE_HEADER *CapsuleHeaderArray, UINT_PTR CapsuleCount, PUINT64 MaximumCapsuleSize, PEFI_RESET_TYPE ResetType); +typedef EFI_STATUS (*PEFI_QUERY_VARIABLE_INFO)(UINT32 Attributes, PUINT64 MaximumVariableStorageSize, PUINT64 RemainingVariableStorageSize, PUINT64 MaximumVariableSize); +typedef EFI_STATUS (*PEFI_RAISE_TPL)(EFI_TPL NewTpl); +typedef EFI_STATUS (*PEFI_RESET_SYSTEM)(EFI_RESET_TYPE ResetType, EFI_STATUS ResetStatus, UINT_PTR DataSize, PVOID ResetData); +typedef EFI_STATUS (*PEFI_RESTORE_TPL)(EFI_TPL OldTpl); +typedef EFI_STATUS (*PEFI_UPDATE_CAPSULE)(PEFI_CAPSULE_HEADER *CapsuleHeaderArray, UINT_PTR CapsuleCount, EFI_PHYSICAL_ADDRESS ScatterGatherList); +typedef EFI_STATUS (*PEFI_SET_VARIABLE)(PUINT16 VariableName, PEFI_GUID VendorGuid, UINT32 Attributes, UINT_PTR DataSize, PVOID Data); +typedef EFI_STATUS (*PEFI_SET_VIRTUAL_ADDRESS_MAP)(UINT_PTR MemoryMapSize, UINT_PTR DescriptorSize, UINT32 DescriptorVersion, PEFI_MEMORY_DESCRIPTOR VirtualMap); +typedef EFI_STATUS (*PEFI_GET_WAKEUP_TIME)(PUCHAR Enabled, PUCHAR Pending, PEFI_TIME Time); +typedef EFI_STATUS (*PEFI_SET_WAKEUP_TIME)(UCHAR Enable, PEFI_TIME Time); +typedef EFI_STATUS (*PEFI_INSTALL_PROTOCOL_INTERFACE)(PEFI_HANDLE Handle, PEFI_GUID Protocol, EFI_INTERFACE_TYPE InterfaceType, PVOID Interface); +typedef EFI_STATUS (*PEFI_REINSTALL_PROTOCOL_INTERFACE)(EFI_HANDLE Handle, PEFI_GUID Protocol, PVOID OldInterface, PVOID NewInterface); +typedef EFI_STATUS (*PEFI_UNINSTALL_PROTOCOL_INTERFACE)(EFI_HANDLE Handle, PEFI_GUID Protocol, PVOID Interface); +typedef EFI_STATUS (*PEFI_HANDLE_PROTOCOL)(EFI_HANDLE Handle, PEFI_GUID Protocol, PVOID *Interface); +typedef EFI_STATUS (*PEFI_REGISTER_PROTOCOL_NOTIFY)(PEFI_GUID Protocol, EFI_EVENT Event, PVOID *Registration); +typedef EFI_STATUS (*PEFI_LOCATE_HANDLE)(EFI_LOCATE_SEARCH_TYPE SearchType, PEFI_GUID Protocol, PVOID SearchKey, PUINT_PTR BufferSize, PEFI_HANDLE Buffer); +typedef EFI_STATUS (*PEFI_LOCATE_DEVICE_PATH)(PEFI_GUID Protocol, PEFI_DEVICE_PATH_PROTOCOL *DevicePath, PEFI_HANDLE Device); +typedef EFI_STATUS (*PEFI_LOCATE_HANDLE_BUFFER)(EFI_LOCATE_SEARCH_TYPE SearchType, PEFI_GUID Protocol, PVOID SearchKey, PUINT_PTR NoHandles, PEFI_HANDLE *Buffer); +typedef EFI_STATUS (*PEFI_LOCATE_PROTOCOL)(PEFI_GUID Protocol, PVOID Registration, PVOID *Interface); +typedef EFI_STATUS (*PEFI_INSTALL_CONFIGURATION_TABLE)(PEFI_GUID Guid, PVOID Table); +typedef EFI_STATUS (*PEFI_IMAGE_LOAD)(UCHAR BootPolicy, EFI_HANDLE ParentImageHandle, PEFI_DEVICE_PATH_PROTOCOL DevicePath, PVOID SourceBuffer, UINT_PTR SourceSize, PEFI_HANDLE ImageHandle); +typedef EFI_STATUS (*PEFI_IMAGE_UNLOAD)(EFI_HANDLE ImageHandle); +typedef EFI_STATUS (*PEFI_IMAGE_START)(EFI_HANDLE ImageHandle, PUINT_PTR ExitDataSize, PUINT16 *ExitData); +typedef EFI_STATUS (*PEFI_EXIT)(EFI_HANDLE ImageHandle, EFI_STATUS ExitStatus, UINT_PTR ExitDataSize, PUINT16 ExitData); +typedef EFI_STATUS (*PEFI_EXIT_BOOT_SERVICES)(EFI_HANDLE ImageHandle, UINT_PTR MapKey); +typedef EFI_STATUS (*PEFI_GET_NEXT_MONOTONIC_COUNT)(PUINT64 Count); +typedef EFI_STATUS (*PEFI_STALL)(UINT_PTR Microseconds); +typedef EFI_STATUS (*PEFI_SET_WATCHDOG_TIMER)(UINT_PTR Timeout, UINT64 WatchdogCode, UINT_PTR DataSize, PUINT16 WatchdogData); +typedef EFI_STATUS (*PEFI_CONNECT_CONTROLLER)(EFI_HANDLE ControllerHandle, PEFI_HANDLE DriverImageHandle, PEFI_DEVICE_PATH_PROTOCOL RemainingDevicePath, UCHAR Recursive); +typedef EFI_STATUS (*PEFI_DISCONNECT_CONTROLLER)(EFI_HANDLE ControllerHandle, EFI_HANDLE DriverImageHandle, EFI_HANDLE ChildHandle); +typedef EFI_STATUS (*PEFI_OPEN_PROTOCOL)(EFI_HANDLE Handle, PEFI_GUID Protocol, PVOID *Interface, EFI_HANDLE AgentHandle, EFI_HANDLE ControllerHandle, UINT32 Attributes); +typedef EFI_STATUS (*PEFI_CLOSE_PROTOCOL)(EFI_HANDLE Handle, PEFI_GUID Protocol, EFI_HANDLE AgentHandle, EFI_HANDLE ControllerHandle); +typedef EFI_STATUS (*PEFI_OPEN_PROTOCOL_INFORMATION)(EFI_HANDLE Handle, PEFI_GUID Protocol, PEFI_OPEN_PROTOCOL_INFORMATION_ENTRY *EntryBuffer, PUINT_PTR EntryCount); +typedef EFI_STATUS (*PEFI_PROTOCOLS_PER_HANDLE)(EFI_HANDLE Handle, PEFI_GUID **ProtocolBuffer, PUINT_PTR ProtocolBufferCount); +typedef EFI_STATUS (*PEFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES)(PEFI_HANDLE Handle, ...); +typedef EFI_STATUS (*PEFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES)(PEFI_HANDLE Handle, ...); +typedef EFI_STATUS (*PEFI_CALCULATE_CRC32)(PVOID Data, UINT_PTR DataSize, PUINT32 Crc32); +typedef EFI_STATUS (*PEFI_COPY_MEM)(PVOID Destination, PVOID Source, UINT_PTR Length); +typedef EFI_STATUS (*PEFI_SET_MEM)(PVOID Buffer, UINT_PTR Size, UINT8 Value); +typedef EFI_STATUS (*PEFI_INPUT_RESET)(PEFI_SIMPLE_TEXT_INPUT_PROTOCOL This, UCHAR ExtendedVerification); +typedef EFI_STATUS (*PEFI_INPUT_READ_KEY)(PEFI_SIMPLE_TEXT_INPUT_PROTOCOL This, PEFI_INPUT_KEY Key); +typedef EFI_STATUS (*PEFI_TEXT_RESET)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, UCHAR ExtendedVerification); +typedef EFI_STATUS (*PEFI_TEXT_STRING)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, PUINT16 String); +typedef EFI_STATUS (*PEFI_TEXT_TEST_STRING)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, PUINT16 String); +typedef EFI_STATUS (*PEFI_TEXT_QUERY_MODE)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, UINT_PTR ModeNumber, UINT_PTR *Columns, UINT_PTR *Rows); +typedef EFI_STATUS (*PEFI_TEXT_SET_MODE)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, UINT_PTR ModeNumber); +typedef EFI_STATUS (*PEFI_TEXT_SET_ATTRIBUTE)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, UINT_PTR Attribute); +typedef EFI_STATUS (*PEFI_TEXT_CLEAR_SCREEN)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This); +typedef EFI_STATUS (*PEFI_TEXT_SET_CURSOR_POSITION)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, UINT_PTR Column, UINT_PTR Row); +typedef EFI_STATUS (*PEFI_TEXT_ENABLE_CURSOR)(PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL This, UCHAR Visible); + +/* 128-bit buffer containing a unique identifier value */ +typedef struct _EFI_GUID +{ + UINT32 Data1; + UINT16 Data2; + UINT16 Data3; + UINT8 Data4[8]; +} EFI_GUID, *PEFI_GUID; + +/* EFI Capsule Header */ +typedef struct _EFI_CAPSULE_HEADER +{ + EFI_GUID CapsuleGuid; + UINT32 HeaderSize; + UINT32 Flags; + UINT32 CapsuleImageSize; +} EFI_CAPSULE_HEADER, *PEFI_CAPSULE_HEADER; + +/* Definition of an EFI memory descriptor */ +typedef struct _EFI_MEMORY_DESCRIPTOR +{ + UINT32 Type; + UINT32 Pad; + EFI_PHYSICAL_ADDRESS PhysicalStart; + EFI_VIRTUAL_ADDRESS VirtualStart; + UINT64 NumberOfPages; + UINT64 Attribute; +} EFI_MEMORY_DESCRIPTOR, *PEFI_MEMORY_DESCRIPTOR; + +/* Data structure that precedes all of the standard EFI table types */ +typedef struct _EFI_TABLE_HEADER +{ + UINT64 Signature; + UINT32 Revision; + UINT32 HeaderSize; + UINT32 CRC32; + UINT32 Reserved; +} EFI_TABLE_HEADER, *PEFI_TABLE_HEADER; + +/* EFI Time Abstraction */ +typedef struct _EFI_TIME +{ + UINT16 Year; + UINT8 Month; + UINT8 Day; + UINT8 Hour; + UINT8 Minute; + UINT8 Second; + UINT8 Pad1; + UINT32 Nanosecond; + INT16 TimeZone; + UINT8 Daylight; + UINT8 PAD2; +} EFI_TIME, *PEFI_TIME; + +/* Provides the capabilities of the RTC device as exposed through the EFI interfaces */ +typedef struct _EFI_TIME_CAPABILITIES +{ + UINT32 Resolution; + UINT32 Accuracy; + UCHAR SetsToZero; +} EFI_TIME_CAPABILITIES, *PEFI_TIME_CAPABILITIES; + +/* Describes the location of the device the handle is for */ +typedef struct _EFI_DEVICE_PATH_PROTOCOL +{ + UINT8 Type; + UINT8 SubType; + UINT8 Length[2]; +} EFI_DEVICE_PATH_PROTOCOL, *PEFI_DEVICE_PATH_PROTOCOL; + +/* EFI Open Protocol Information Entry */ +typedef struct _EFI_OPEN_PROTOCOL_INFORMATION_ENTRY +{ + EFI_HANDLE AgentHandle; + EFI_HANDLE ControllerHandle; + UINT32 Attributes; + UINT32 OpenCount; +} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY, *PEFI_OPEN_PROTOCOL_INFORMATION_ENTRY; + +/* EFI Boot Services Table */ +typedef struct _EFI_BOOT_SERVICES +{ + EFI_TABLE_HEADER Hdr; + PEFI_RAISE_TPL RaiseTPL; + PEFI_RESTORE_TPL RestoreTPL; + PEFI_ALLOCATE_PAGES AllocatePages; + PEFI_FREE_PAGES FreePages; + PEFI_GET_MEMORY_MAP GetMemoryMap; + PEFI_ALLOCATE_POOL AllocatePool; + PEFI_FREE_POOL FreePool; + PEFI_CREATE_EVENT CreateEvent; + PEFI_SET_TIMER SetTimer; + PEFI_WAIT_FOR_EVENT WaitForEvent; + PEFI_SIGNAL_EVENT SignalEvent; + PEFI_CLOSE_EVENT CloseEvent; + PEFI_CHECK_EVENT CheckEvent; + PEFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; + PEFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; + PEFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; + PEFI_HANDLE_PROTOCOL HandleProtocol; + PVOID Reserved; + PEFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; + PEFI_LOCATE_HANDLE LocateHandle; + PEFI_LOCATE_DEVICE_PATH LocateDevicePath; + PEFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; + PEFI_IMAGE_LOAD LoadImage; + PEFI_IMAGE_START StartImage; + PEFI_EXIT Exit; + PEFI_IMAGE_UNLOAD UnloadImage; + PEFI_EXIT_BOOT_SERVICES ExitBootServices; + PEFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; + PEFI_STALL Stall; + PEFI_SET_WATCHDOG_TIMER SetWatchdogTimer; + PEFI_CONNECT_CONTROLLER ConnectController; + PEFI_DISCONNECT_CONTROLLER DisconnectController; + PEFI_OPEN_PROTOCOL OpenProtocol; + PEFI_CLOSE_PROTOCOL CloseProtocol; + PEFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; + PEFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; + PEFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; + PEFI_LOCATE_PROTOCOL LocateProtocol; + PEFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; + PEFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; + PEFI_CALCULATE_CRC32 CalculateCrc32; + PEFI_COPY_MEM CopyMem; + PEFI_SET_MEM SetMem; + PEFI_CREATE_EVENT_EX CreateEventEx; +} EFI_BOOT_SERVICES, *PEFI_BOOT_SERVICES; + +/* EFI Runtime Services Table */ +typedef struct _EFI_RUNTIME_SERVICES +{ + EFI_TABLE_HEADER Hdr; + PEFI_GET_TIME GetTime; + PEFI_SET_TIME SetTime; + PEFI_GET_WAKEUP_TIME GetWakeupTime; + PEFI_SET_WAKEUP_TIME SetWakeupTime; + PEFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; + PEFI_CONVERT_POINTER ConvertPointer; + PEFI_GET_VARIABLE GetVariable; + PEFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; + PEFI_SET_VARIABLE SetVariable; + PEFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; + PEFI_RESET_SYSTEM ResetSystem; + PEFI_UPDATE_CAPSULE UpdateCapsule; + PEFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; + PEFI_QUERY_VARIABLE_INFO QueryVariableInfo; +} EFI_RUNTIME_SERVICES, *PEFI_RUNTIME_SERVICES; + +/* Contains a set of GUID/pointer pairs comprised of the ConfigurationTable field in the EFI System Table */ +typedef struct _EFI_CONFIGURATION_TABLE +{ + EFI_GUID VendorGuid; + PVOID VendorTable; +} EFI_CONFIGURATION_TABLE, *PEFI_CONFIGURATION_TABLE; + +/* Simple Text Input protocol from the UEFI 2.0 specification */ +typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL +{ + PEFI_INPUT_RESET Reset; + PEFI_INPUT_READ_KEY ReadKeyStroke; + EFI_EVENT WaitForKey; +} EFI_SIMPLE_TEXT_INPUT_PROTOCOL, *PEFI_SIMPLE_TEXT_INPUT_PROTOCOL; + +/* Simple Text Output protocol from the UEFI 2.0 specification */ +typedef struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL +{ + PEFI_TEXT_RESET Reset; + PEFI_TEXT_STRING OutputString; + PEFI_TEXT_TEST_STRING TestString; + PEFI_TEXT_QUERY_MODE QueryMode; + PEFI_TEXT_SET_MODE SetMode; + PEFI_TEXT_SET_ATTRIBUTE SetAttribute; + PEFI_TEXT_CLEAR_SCREEN ClearScreen; + PEFI_TEXT_SET_CURSOR_POSITION SetCursorPosition; + PEFI_TEXT_ENABLE_CURSOR EnableCursor; + PEFI_SIMPLE_TEXT_OUTPUT_MODE Mode; +} EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL, *PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL; + +/* Mode Structure pointed to by Simple Text Out protocol */ +typedef struct _EFI_SIMPLE_TEXT_OUTPUT_MODE +{ + INT32 MaxMode; + INT32 Mode; + INT32 Attribute; + INT32 CursorColumn; + INT32 CursorRow; + UCHAR CursorVisible; +} EFI_SIMPLE_TEXT_OUTPUT_MODE, *PEFI_SIMPLE_TEXT_OUTPUT_MODE; + +/* The keystroke information for the key that was pressed */ +typedef struct _EFI_INPUT_KEY +{ + UINT16 ScanCode; + UINT16 UnicodeChar; +} EFI_INPUT_KEY, *PEFI_INPUT_KEY; + +/* EFI System Table */ +typedef struct _EFI_SYSTEM_TABLE +{ + EFI_TABLE_HEADER Hdr; + PUINT16 FirmwareVendor; + UINT32 FirmwareRevision; + EFI_HANDLE ConsoleInHandle; + PEFI_SIMPLE_TEXT_INPUT_PROTOCOL ConIn; + EFI_HANDLE ConsoleOutHandle; + PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL ConOut; + EFI_HANDLE StandardErrorHandle; + PEFI_SIMPLE_TEXT_OUTPUT_PROTOCOL StdErr; + PEFI_RUNTIME_SERVICES RuntimeServices; + PEFI_BOOT_SERVICES BootServices; + UINT_PTR NumberOfTableEntries; + PEFI_CONFIGURATION_TABLE ConfigurationTable; +} EFI_SYSTEM_TABLE, *PEFI_SYSTEM_TABLE; + +#endif /* __XTDK_XTUEFI_H */