123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- MODULE EFI; (** AUTHOR "Matthias Frei"; PURPOSE "Provides (low-level) API to the (Unified) Extensible Firmware Interface"; *)
- IMPORT SYSTEM;
- CONST
- (* Status Codes *)
- (* Success *)
- Success* = 0;
- (* Warnings *)
- WarnUnknownGlyph *= 1;
- WarnDeleteFailure *= 2;
- WarnWriteFailure *= 3;
- WarnBufferTooSmall *= 4;
- (* Errors*)
- Error* = LONGINT(80000000H); (* == 80000000H *)
- ErrLoadError* = Error + 1;
- ErrInvalidParameter* = Error + 2;
- ErrUnsupported* = Error + 3;
- ErrBadBufferSize* = Error + 4;
- ErrBufferTooSmall* = Error + 5;
- (* ... TODO ... *)
- ErrNotFound* = Error + 14;
- (* ... TODO ... *)
- ErrEndOfFile* = Error + 31;
- ErrInvalidLanguage* = Error + 32;
- (* BSAllocatePages allocation types *)
- AllocateAnyPage* = 0;
- AllocateMaxAddress* = 1;
- AllocateAddress* = 2;
- MaxAllocateType* = 3;
- (* Memory Types (for BSAllocatePages and MemoryDescriptor.Type)*)
- MTReserved* = 0;
- MTLoaderCode* = 1;
- MTLoaderData* = 2;
- MTBootServicesCode* = 3;
- MTBootServicesData* = 4;
- MTRuntimeServicesCode* = 5;
- MTRuntimeServicesData* = 6;
- MTConventionalMemory*= 7;
- MTUnusableMemory* = 8;
- MTACPIReclaimMemory* = 9;
- MTACPIMemoryNVSM* = 10;
- MTMemoryMappedIO* = 11;
- MTMemoryMappedIOPortSpace* = 12;
- MTPalCode* = 13;
- MTMaxMemoryType* = 14;
- (* Page Size in bytes *)
- PageSize* = 1000H; (* = 4KB *)
- (* BSLocateHandle search types *)
- AllHandles* = 0; (* the 'Protocol' and 'SearchLey' argument are ignored and all handles in the system are returned *)
- ByRegistryNotify* = 1; (* 'SearchKey' supplies the Registration value returned by RegisterProtocolNotify(). 'Protocol' is ignored *)
- ByProtocol* =2; (* return all handles that support 'Protocol' the 'SearchKey' argument is ignored *)
- (* Task Priority Levels *)
- ApplicationTPL* = 4;
- CallbackTPL* = 8;
- NotifiyTPL* = 16;
- HighLevelTPL* = 31;
- (* various type definitions *)
- TYPE Char8* = SHORTINT;
- TYPE Char16* = INTEGER;
- TYPE Boolean* = BOOLEAN;
- TYPE Int* = SIZE; (* size of Int architecture dependant (e.g. 32bit on i386, 64bit on ia64) *)
- TYPE Int8* = SHORTINT; (* Int8, Int16, Int32, Int64 NOT architecture dependant *)
- TYPE Int16* = INTEGER;
- TYPE Int32* = LONGINT;
- TYPE Int64* = HUGEINT;
- TYPE Address*= ADDRESS;
- TYPE Status* = Int;
- TYPE TPL* = Int;
- TYPE LBA* = Int64;
- TYPE Pointer* = Address;
- TYPE VirtualAddress* = Int64; (* sic! *)
- TYPE PhysicalAddress* = Int64; (* sic! *)
- TYPE Handle* = Pointer;
- TYPE Event* = Pointer;
- TYPE Protocol* = POINTER TO ProtocolDescription;
- TYPE ProtocolDescription* = RECORD END;
- TYPE GUID* = RECORD
- Data1*: Int32;
- Data2*: Int16;
- Data3*: Int16;
- Data4*: ARRAY 8 OF Int8;
- END;
- TYPE
- MemoryDescriptorPointer*= POINTER TO MemoryDescriptor;
- MemoryDescriptor* = RECORD
- Type- : Int32;
- pad-: Int32;
- PhysicalStart-: PhysicalAddress;
- VirtualStart-: VirtualAddress;
- (* PhysicalStart-: Int64;
- VirtualStart-: Int64; *)
- NumberOfPages-: Int64;
- Attribute-: Int64;
- END;
- TYPE Time* = RECORD
- Year-: Int16; (* 1998 - 20XX *)
- Month-: Int8; (* 1 - 12 *)
- Day-: Int8; (* 1 - 31 *)
- Hour-: Int8; (* 0-23 *)
- Minute-: Int8; (* 0 - 59 *)
- Second-: Int8; (* 0 - 59 *)
- Pad1 : Int8;
- Nanosecond-: Int32; (* 0 - 999,999,999 *)
- TimeZone- : Int8; (* -1440 - 1440 or 2047 (= unspecified) *)
- Daylight-: Int8; (* 1 : EFITimeAdjustDaylight, 2 : EFITimeInDaylight *)
- Pad2 : Int8;
- END;
- (* efi generic table header *)
- TYPE TableHeader* = RECORD
- Signature-: Int64;
- Revision-: Int32;
- HeaderSize-: Int32;
- CRC32-: Int32;
- Reserved-: Int32;
- END;
- (* main EFI tables *)
- TYPE
- SystemTable* = RECORD
- Hdr-: TableHeader;
- FirmwareVendor-{UNTRACED}: POINTER TO ARRAY OF Char16;
- FirmwareRevision-: Int32;
- ConsoleInHandle* : Handle;
- ConIn* {UNTRACED}: POINTER TO SimpleInputInterface;
- ConsoleOutHandle*: Handle;
- ConOut* {UNTRACED}: POINTER TO SimpleTextOutputInterface;
- StandardErrorHandle*: Handle;
- StdErr* {UNTRACED}: POINTER TO SimpleTextOutputInterface;
- RS- {UNTRACED}: POINTER TO RuntimeServices;
- BS* {UNTRACED}: POINTER TO BootServices;
- NumberOfTableEntries-: Int;
- ConfigurationTable-{UNTRACED}: POINTER TO ARRAY 2048 OF ConfigurationTableEntry; (* access to ACPI, SMBIOS, ... *)
- END;
- (* BootServices function type declarations *)
- TYPE DevicePath* = RECORD
- Type-: Int8;
- SubType-: Int8;
- Length-: ARRAY 2 OF Int8;
- END;
- TYPE BSDummyType* = PROCEDURE{C};
- (* task priority functions *)
- TYPE BSTPLRaise* = PROCEDURE{C}(NewTpl : TPL) : TPL;
- TYPE BSTPLRestore* = PROCEDURE{C}(oldTpl : TPL);
- (* Memory functions *)
- TYPE BSAllocatePages* = PROCEDURE{C}(Type : Int; MemoryType : Int; Pages : Int; VAR Memory : PhysicalAddress) : Status;
- TYPE BSFreePages* = PROCEDURE{C}(Memory : PhysicalAddress; Pages : Int) : Status;
- TYPE BSGetMemoryMap* = PROCEDURE{C}(VAR MemoryMapSize : Int; VAR MemoryMap : ARRAY OF MemoryDescriptor; VAR MapKey, DescriptorSize : Int; VAR DescriptorVersion : Int32) : Status;
- (* protocol handler functions *)
- TYPE BSProtocolInstall* = PROCEDURE{C}(VAR Handle : Handle; CONST Protocol : GUID; InterfaceType : Int; Interface : Protocol) : Status;
- TYPE BSProtocolReinstall* = PROCEDURE{C}(Handle : Handle; CONST Protocol : GUID; OldInterface, NewInterface : Protocol) : Status;
- TYPE BSProtocolUninstall* = PROCEDURE{C}(Handle : Handle; CONST Protocol : GUID; Interface : Protocol) : Status;
- TYPE BSProtocolHandle* = PROCEDURE{C}(Handle : Handle; CONST Protocol : GUID; VAR Interface : Protocol) : Status;
- TYPE BSProtocolRegisterNotify* = PROCEDURE{C}(CONST Protocol : GUID; Event : Event; VAR Registration : Pointer) : Status;
- TYPE BSLocateHandle* = PROCEDURE{C}(SearchType : Int; CONST Protocol : GUID; SearchKey : Pointer; VAR BufferSize : Int; VAR Buffer : ARRAY OF Handle): Status;
- TYPE BSLocateDevicePath* = PROCEDURE{C}(CONST Protocol : GUID; VAR DevicePath : DevicePath; VAR Device : Handle) : Status;
- TYPE BSInstallConfigurationTable* = PROCEDURE{C}(CONST Protocol : GUID; Table : Pointer) : Status;
- (* image functions *)
- TYPE BSImageLoad* = PROCEDURE{C}(BootPolicy : Boolean; ParentImageHandle : Handle; CONST FilePath : DevicePath; SourceSize : Int; SourceBuffer : Pointer; VAR ImageHandle : Handle) : Status;
- TYPE BSImageStart* = PROCEDURE{C}(ImageHandle : Handle; VAR ExitDataSize : Int; VAR ExitData : ARRAY OF Char16) : Status;
- TYPE BSImageExit* = PROCEDURE{C}(ImageHandle : Handle; ExitStatus : Status; ExitDataSize : Int; VAR ExitData : ARRAY OF Char16) : Status;
- TYPE BSImageUnload* = PROCEDURE{C}(ImageHandle : Handle) : Status;
- TYPE BSExitBootServices* = PROCEDURE{C}(ImageHandle : Handle; MapKey : Int) : Status;
- (* misc. functions *)
- TYPE BSGetNextMonotonicCount* = PROCEDURE{C}(VAR Count : Int64);
- TYPE BSStall* = PROCEDURE{C}(Microseconds : Int);
- TYPE BootServices* = RECORD
- Hdr- : TableHeader;
- RaiseTPL-: BSTPLRaise;
- RestoreTPL-: BSTPLRestore;
- (* memory functions *)
- AllocatePages-: BSAllocatePages;
- FreePages-: BSFreePages;
- GetMemoryMap-: BSGetMemoryMap;
- AllocatePool-: BSDummyType;
- FreePool-: BSDummyType;
- (* event & timer functions *)
- CreateEvent-: BSDummyType;
- SetTimer-: BSDummyType;
- WaitForEvent-: BSDummyType;
- SignaleEvent-: BSDummyType;
- CloseEvent-: BSDummyType;
- CheckEvent-: BSDummyType;
- (* protocol handler functions *)
- InstallProtocolInterface-: BSProtocolInstall;
- ReinstallProtocolInterface-: BSProtocolReinstall;
- UninstallProtocolInterface-: BSProtocolUninstall;
- HandleProtocol-: BSProtocolHandle;
- PCHandleProtocol-: BSProtocolHandle;
- RegisterProtocolNotify-: BSProtocolRegisterNotify;
- LocateHandle-: BSLocateHandle;
- LocateDevicePath-: BSLocateDevicePath;
- InstallConfigurationTable-: BSDummyType;
- (* image functions *)
- LoadImage-: BSImageLoad;
- StartImage-: BSImageStart;
- Exit-: BSImageExit;
- UnloadImage-: BSImageUnload;
- ExitBootServices-: BSExitBootServices;
- (* misc *)
- GetNextMonotinicCount-: BSGetNextMonotonicCount;
- Stall-: BSStall;
- SetWatchdogTimer-: BSDummyType;
- END;
- (* RuntimeService function type declarations *)
- TYPE RSDummyType* = PROCEDURE{C};
- TYPE RuntimeServices* = RECORD
- Hdr- : TableHeader;
- (* time services *)
- GetTime-: RSDummyType;
- SetTime-: RSDummyType;
- GetWakeupTime-: RSDummyType;
- SetWakeupTime-: RSDummyType;
- (* virtual memory services *)
- SetVirtualAddressMap-: RSDummyType;
- ConvertPointer-: RSDummyType;
- (* varible services *)
- GetVariable-: RSDummyType;
- GetNextVariable-: RSDummyType;
- SetVariable-: RSDummyType;
- (* misc *)
- GetNextHighMonotonicCount-: RSDummyType;
- ResetSystem -: RSDummyType;
- END;
- TYPE ConfigurationTableEntry* = RECORD
- VendorGuid-: GUID;
- VendorTable-: ADDRESS; (* virtual OR physical address - see EFI spec. Chapter 4.6 *)
- END;
- (* basic EFI protocols ( = function tables to communicate with EFI services ) *)
- (* Simple Input Interface Protocol *)
- TYPE InputKey* = RECORD
- ScanCode-: Int16;
- UnicodeChar-: Char16;
- END;
- TYPE InputReset* = PROCEDURE {C} (This: POINTER TO SimpleInputInterface; ExtendedVerification: Boolean): Status;
- TYPE InputReadKey* = PROCEDURE {C} (This: POINTER TO SimpleInputInterface; VAR key: InputKey): Status;
- TYPE SimpleInputInterface* = RECORD(ProtocolDescription)
- Reset-: InputReset;
- ReadKey-: InputReadKey;
- WaitForEvent- : Event;
- END;
- (* Simple Text Output Interface Protocol *)
- TYPE SimpleTextOutputInterfaceMode* = RECORD
- MaxMode-: Int32;
- (* current settings: *)
- Mode-: Int32;
- Attribute-: Int32;
- CursorColumn-: Int32;
- CursorRow-: Int32;
- CursorVisible-: Boolean;
- END;
- TYPE TextReset* = PROCEDURE {C} (This: POINTER TO SimpleTextOutputInterface; ExtendedVerification: Boolean): Status;
- TYPE TextString* = PROCEDURE {C} (This: POINTER TO SimpleTextOutputInterface; CONST String: ARRAY OF Char16): Status;
- TYPE TextTestString* = PROCEDURE {C} (This: POINTER TO SimpleTextOutputInterface; CONST String: ARRAY OF Char16): Status;
- TYPE TextQueryMode* = PROCEDURE {C} (This: POINTER TO SimpleTextOutputInterface; ModeNumber: Int; VAR Columns, Rows: Int): Status;
- TYPE TextSetMode* = PROCEDURE {C} (This: POINTER TO SimpleTextOutputInterface; ModeNumber: Int): Status;
- TYPE TextSetAttribute* = PROCEDURE {C} (This: POINTER TO SimpleTextOutputInterface; Attribute: Int): Status;
- TYPE TextClearScreen* = PROCEDURE {C} (This: POINTER TO SimpleTextOutputInterface): Status;
- TYPE TextSetCursorPos* = PROCEDURE {C} (This: POINTER TO SimpleTextOutputInterface; Column, Row : Int): Status;
- TYPE TextEnableCursor* = PROCEDURE {C} (This : POINTER TO SimpleTextOutputInterface; Visible : Boolean): Status;
- TYPE SimpleTextOutputInterface* = RECORD(ProtocolDescription)
- Reset-: TextReset;
- OutputString-: TextString;
- TestString-: TextTestString;
- QueryMode-: TextQueryMode;
- SetMode-: TextSetMode;
- SetAttribute-: TextSetAttribute;
- ClearScreen-: TextClearScreen;
- SetCursorPosition-: TextSetAttribute;
- EnableCursor-: TextEnableCursor;
- Mode-{UNTRACED}: POINTER TO SimpleTextOutputInterfaceMode;
- END;
- VAR
- imageHandle-: Handle;
- table- {UNTRACED}: POINTER TO SystemTable;
- END EFI.
|