Add basic EFI-related structures
All checks were successful
ci/woodpecker/push/build Pipeline was successful

This commit is contained in:
Rafal Kupiec 2022-07-31 10:54:03 +02:00
parent 35f2c67138
commit d1fff10c15
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
2 changed files with 391 additions and 0 deletions

View File

@ -20,3 +20,4 @@
/* Architecture-independent XT API */ /* Architecture-independent XT API */
#include "xtcommon.h" #include "xtcommon.h"
#include "xtuefi.h"

390
sdk/xtdk/xtuefi.h Normal file
View File

@ -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 <belliash@codingworkshop.eu.org>
*/
#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 */