/*++ Copyright (c) 2024, the LibreXP developers. Provided under the BSD 3-Clause license. Module Name: efiapi.h Abstract: Provides EFI API definitions. --*/ #ifndef _EFIAPI_H #define _EFIAPI_H #define EFI_SPECIFICATION_MAJOR_REVISION 1 #define EFI_SPECIFICATION_MINOR_REVISION 02 #define EFI_SPECIFICATION_VERSION ((EFI_SPECIFICATION_MAJOR_REVISION << 16) || EFI_SPECIFICATION_MINOR_REVISION) INTERFACE_DECL(_EFI_SYSTEM_TABLE); /* * Loaded image protocol definitions. */ typedef EFI_STATUS (EFIAPI *EFI_IMAGE_UNLOAD) ( IN EFI_HANDLE ImageHandle ); #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_IMAGE_INFORMATION_REVISION 0x1000 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; /* * 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_HANDLE_PROTOCOL) ( IN EFI_HANDLE Handle, IN EFI_GUID *Protocol, OUT VOID **Interface ); typedef struct _EFI_BOOT_SERVICES { EFI_TABLE_HEADER Hdr; EFI_HANDLE RaiseTPL; EFI_HANDLE RestoreTPL; EFI_HANDLE AllocatePages; EFI_HANDLE FreePages; EFI_HANDLE 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_HANDLE SetWatchdogTimer; EFI_HANDLE ConnectController; EFI_HANDLE DisconnectController; EFI_HANDLE OpenProtocol; EFI_HANDLE 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