; ; Modified from http://x86asm.net/articles/uefi-programming-first-steps/ ; Copyright © 2016 Pete Batard - Public Domain ; ;for 32/64 portability and automatic natural align in structure definitions struc int8 . db ? end struc struc int16 align 2 . dw ? end struc struc int32 align 4 . dd ? end struc struc int64 align 8 . dq ? end struc struc intn align 8 . dq ? end struc struc dptr align 8 . dq ? end struc ;symbols EFIERR = 0x8000000000000000 EFI_SUCCESS = 0 EFI_LOAD_ERROR = EFIERR or 1 EFI_INVALID_PARAMETER = EFIERR or 2 EFI_UNSUPPORTED = EFIERR or 3 EFI_BAD_BUFFER_SIZE = EFIERR or 4 EFI_BUFFER_TOO_SMALL = EFIERR or 5 EFI_NOT_READY = EFIERR or 6 EFI_DEVICE_ERROR = EFIERR or 7 EFI_WRITE_PROTECTED = EFIERR or 8 EFI_OUT_OF_RESOURCES = EFIERR or 9 EFI_VOLUME_CORRUPTED = EFIERR or 10 EFI_VOLUME_FULL = EFIERR or 11 EFI_NO_MEDIA = EFIERR or 12 EFI_MEDIA_CHANGED = EFIERR or 13 EFI_NOT_FOUND = EFIERR or 14 EFI_ACCESS_DENIED = EFIERR or 15 EFI_NO_RESPONSE = EFIERR or 16 EFI_NO_MAPPING = EFIERR or 17 EFI_TIMEOUT = EFIERR or 18 EFI_NOT_STARTED = EFIERR or 19 EFI_ALREADY_STARTED = EFIERR or 20 EFI_ABORTED = EFIERR or 21 EFI_ICMP_ERROR = EFIERR or 22 EFI_TFTP_ERROR = EFIERR or 23 EFI_PROTOCOL_ERROR = EFIERR or 24 EfiResetCold = 0 EfiResetWarm = 1 EfiResetShutdown = 2 ;helper macro for definition of relative structure member offsets macro struct name virtual at 0 name name end virtual end macro ;structures struc EFI_TABLE_HEADER .Signature int64 .Revision int32 .HeaderSize int32 .CRC32 int32 .Reserved int32 end struc struct EFI_TABLE_HEADER struc EFI_SYSTEM_TABLE .Hdr EFI_TABLE_HEADER .FirmwareVendor dptr .FirmwareRevision int32 .ConsoleInHandle dptr .ConIn dptr .ConsoleOutHandle dptr .ConOut dptr .StandardErrorHandle dptr .StdErr dptr .RuntimeServices dptr .BootServices dptr .NumberOfTableEntries intn .ConfigurationTable dptr end struc struct EFI_SYSTEM_TABLE struc EFI_RUNTIME_SERVICES .Hdr EFI_TABLE_HEADER .GetTime dptr .SetTime dptr .GetWakeupTime dptr .SetWakeupTime dptr .SetVirtualAddressMap dptr .ConvertPointer dptr .GetVariable dptr .GetNextVariableName dptr .SetVariable dptr .GetNextHighMonotonicCount dptr .ResetSystem dptr .UpdateCapsule dptr .QueryCapsuleCapabilities dptr .QueryVariableInfo dptr end struc struct EFI_RUNTIME_SERVICES struc SIMPLE_TEXT_OUTPUT_INTERFACE .Reset dptr .OutputString dptr .TestString dptr .QueryMode dptr .SetMode dptr .SetAttribute dptr .ClearScreen dptr .SetCursorPosition dptr .EnableCursor dptr .Mode dptr end struc struct SIMPLE_TEXT_OUTPUT_INTERFACE struc SIMPLE_TEXT_INPUT_INTERFACE .Reset dptr .ReadKeyStroke dptr .WaitForKey dptr end struc struct SIMPLE_TEXT_INPUT_INTERFACE struc EFI_INPUT_KEY .ScanCode int16 .UnicodeChar int16 end struc struct EFI_INPUT_KEY