/*++ Copyright (c) 2024, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: efiapi.h Abstract: Provides EFI API definitions. --*/ #ifndef _EFIAPI_H #define _EFIAPI_H #define EFI_MAKE_REVISION(Major, Minor) (((Major) << 16) | (Minor)) #define EFI_SPECIFICATION_MAJOR_REVISION 1 #define EFI_SPECIFICATION_MINOR_REVISION 02 #define EFI_SPECIFICATION_VERSION EFI_MAKE_REVISION(EFI_SPECIFICATION_MAJOR_REVISION, EFI_SPECIFICATION_MINOR_REVISION) INTERFACE_DECL(_EFI_SYSTEM_TABLE); /* * EFI table header. */ typedef struct _EFI_TABLE_HEADER { UINT64 Signature; UINT32 Revision; UINT32 HeaderSize; UINT32 CRC32; UINT32 Reserved; } EFI_TABLE_HEADER; /* * EFI runtime services table definitions. */ #define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 #define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION typedef struct { EFI_TABLE_HEADER Hdr; EFI_HANDLE GetTime; EFI_HANDLE SetTime; EFI_HANDLE GetWakeupTime; EFI_HANDLE SetWakeupTime; EFI_HANDLE SetVirtualAddressMap; EFI_HANDLE ConvertPointer; EFI_HANDLE GetVariable; EFI_HANDLE GetNextVariableName; EFI_HANDLE SetVariable; EFI_HANDLE GetNextHighMonotonicCount; EFI_HANDLE ResetSystem; EFI_HANDLE UpdateCapsule; EFI_HANDLE QueryCapsuleCapabilities; EFI_HANDLE QueryVariableInfo; } EFI_RUNTIME_SERVICES; /* * EFI boot services table definitions. */ #define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 #define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION 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_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, IN EFI_HANDLE AgentHandle, IN EFI_HANDLE ControllerHandle, IN UINT32 Attributes ); #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 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_SET_WATCHDOG_TIMER) ( IN UINTN Timeout, IN UINT64 WatchdogCode, IN UINTN DataSize, IN CHAR16 *WatchdogData OPTIONAL ); typedef struct _EFI_BOOT_SERVICES { EFI_TABLE_HEADER Hdr; EFI_HANDLE RaiseTPL; EFI_HANDLE RestoreTPL; EFI_ALLOCATE_PAGES AllocatePages; EFI_FREE_PAGES FreePages; EFI_GET_MEMORY_MAP GetMemoryMap; EFI_HANDLE AllocatePool; EFI_HANDLE FreePool; EFI_HANDLE CreateEvent; EFI_HANDLE SetTimer; EFI_HANDLE WaitForEvent; EFI_HANDLE SignalEvent; EFI_HANDLE CloseEvent; EFI_HANDLE CheckEvent; EFI_HANDLE InstallProtocolInterface; EFI_HANDLE ReinstallProtocolInterface; EFI_HANDLE UninstallProtocolInterface; EFI_HANDLE_PROTOCOL HandleProtocol; EFI_HANDLE AlternateHandleProtocol; EFI_HANDLE RegisterProtocolNotify; EFI_HANDLE LocateHandle; EFI_HANDLE LocateDevicePath; EFI_HANDLE InstallConfigurationTable; EFI_HANDLE LoadImage; EFI_HANDLE StartImage; EFI_HANDLE Exit; EFI_HANDLE UnloadImage; EFI_HANDLE ExitBootServices; EFI_HANDLE GetNextHighMonotonicCount; EFI_HANDLE Stall; EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; EFI_HANDLE ConnectController; EFI_HANDLE DisconnectController; EFI_OPEN_PROTOCOL OpenProtocol; EFI_CLOSE_PROTOCOL CloseProtocol; EFI_HANDLE OpenProtocolInformation; EFI_HANDLE ProtocolsPerHandle; EFI_HANDLE LocateHandleBuffer; EFI_HANDLE LocateProtocol; EFI_HANDLE InstallMultipleProtocolInterfaces; EFI_HANDLE UninstallMultipleProtocolInterfaces; EFI_HANDLE CalculateCrc32; EFI_HANDLE CopyMem; EFI_HANDLE SetMem; EFI_HANDLE CreateEventEx; } EFI_BOOT_SERVICES; /* * EFI configuration table definitions. */ #define MPS_TABLE_GUID \ { 0xeb9d2d2f, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } #define ACPI_TABLE_GUID \ { 0x8868e871, 0xe4f1, 0x11d3, { 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } } #define ACPI_20_TABLE_GUID \ { 0x8868e871, 0xe4f1, 0x11d3, { 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } } #define SMBIOS_TABLE_GUID \ { 0xeb9d2d31, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } #define SMBIOS3_TABLE_GUID \ { 0xf2fd1544, 0x9794, 0x4a2c, { 0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94 } } #define SAL_SYSTEM_TABLE_GUID \ { 0xeb9d2d32, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } #define EFI_DTB_TABLE_GUID \ { 0xb1b621d5, 0xf19c, 0x41a5, { 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 } } typedef struct _EFI_CONFIGURATION_TABLE { EFI_GUID VendorGuid; VOID *VendorTable; } EFI_CONFIGURATION_TABLE; /* * EFI system table definitions. */ #define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 #define EFI_SYSTEM_TABLE_REVISION EFI_SPECIFICATION_VERSION typedef struct _EFI_SYSTEM_TABLE { EFI_TABLE_HEADER Hdr; CHAR16 *FirmwareVendor; UINT32 FirmwareRevision; EFI_HANDLE ConsoleInHandle; SIMPLE_INPUT_INTERFACE *ConIn; EFI_HANDLE ConsoleOutHandle; SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; EFI_HANDLE StandardErrorHandle; SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; EFI_RUNTIME_SERVICES *RuntimeServices; EFI_BOOT_SERVICES *BootServices; UINTN NumberOfTableEntries; EFI_CONFIGURATION_TABLE *ConfigurationTable; } EFI_SYSTEM_TABLE; #endif