225 lines
4.4 KiB
C
225 lines
4.4 KiB
C
#ifndef EFI_H
|
|
#define EFI_H
|
|
|
|
#include "guid.h"
|
|
#include "_types.h"
|
|
|
|
// EFI Simple Text Input Protocol
|
|
typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
|
|
|
|
// EFI Simple Text Output Protocol
|
|
typedef struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
|
|
|
// EFI Runtime Services
|
|
typedef struct EFI_RUNTIME_SERVICES EFI_RUNTIME_SERVICES;
|
|
|
|
// EFI System Table
|
|
typedef struct EFI_SYSTEM_TABLE EFI_SYSTEM_TABLE;
|
|
|
|
// EFI Simple Text Output Mode
|
|
typedef struct {
|
|
INT32 MaxNode;
|
|
|
|
// Current settings
|
|
INT32 Mode;
|
|
INT32 Attribute;
|
|
INT32 CursorColumn;
|
|
INT32 CursorRow;
|
|
BOOLEAN CursorVisible;
|
|
} SIMPLE_TEXT_OUTPUT_MODE;
|
|
|
|
// Input Key
|
|
typedef struct {
|
|
UINT16 ScanCode;
|
|
CHAR16 UnicodeChar;
|
|
} EFI_INPUT_KEY;
|
|
|
|
// EFI Table Header
|
|
typedef struct {
|
|
UINT64 Signature;
|
|
UINT32 Revision;
|
|
UINT32 HeaderSize;
|
|
UINT32 CRC32;
|
|
UINT32 Reserved;
|
|
} EFI_TABLE_HEADER;
|
|
|
|
// EFI Reset Type
|
|
typedef enum {
|
|
EfiResetCold,
|
|
EfiResetWarm,
|
|
EfiResetShutdown,
|
|
EfiResetPlatformSpecific
|
|
} EFI_RESET_TYPE;
|
|
|
|
/**********************
|
|
* FUNCTIONS *
|
|
**********************/
|
|
|
|
typedef EFI_STATUS
|
|
(EFIAPI *EFI_IMAGE_ENTRY_POINT)(
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
);
|
|
|
|
// EFI Simple Text Input Protocol
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_INPUT_READ_KEY)(
|
|
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
|
|
OUT EFI_INPUT_KEY *Key
|
|
);
|
|
|
|
// EFI Simple Text Output Protocol
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_RESET)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
|
IN BOOLEAN ExtendedVerification
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_STRING)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
|
IN CHAR16 *String
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_TEST_STRING)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
|
IN CHAR16 *String
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_QUERY_MODE)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
|
IN UINTN ModeNumber,
|
|
OUT UINTN *Columns,
|
|
OUT UINTN *Rows
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_SET_MODE)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
|
IN UINTN ModeNumber
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_SET_ATTRIBUTE)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
|
IN UINTN Attribute
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_CLEAR_SCREEN)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_SET_CURSOR_POSITION)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
|
IN UINTN Column,
|
|
IN UINTN Row
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_TEXT_ENABLE_CURSOR)(
|
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
|
IN BOOLEAN Visible
|
|
);
|
|
|
|
// EFI Runtime Services
|
|
|
|
typedef
|
|
VOID
|
|
(EFIAPI *EFI_RESET_SYSTEM)(
|
|
IN EFI_RESET_TYPE ResetType,
|
|
IN EFI_STATUS ResetStatus,
|
|
IN UINTN DataSize,
|
|
IN VOID *ResetData OPTIONAL
|
|
);
|
|
|
|
/**********************
|
|
* Protocols & Tables *
|
|
**********************/
|
|
|
|
// EFI Simple Text Input Protocol
|
|
typedef struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL {
|
|
void *Reset;
|
|
EFI_INPUT_READ_KEY ReadKeyStroke;
|
|
void *WaitForKey;
|
|
} EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
|
|
|
|
// EFI Simple Text Output Protocol
|
|
typedef struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL {
|
|
EFI_TEXT_RESET Reset;
|
|
EFI_TEXT_STRING OutputString;
|
|
EFI_TEXT_TEST_STRING TestString;
|
|
EFI_TEXT_QUERY_MODE QueryMode;
|
|
EFI_TEXT_SET_MODE SetMode;
|
|
EFI_TEXT_SET_ATTRIBUTE SetAttribute;
|
|
EFI_TEXT_CLEAR_SCREEN ClearScreen;
|
|
EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition;
|
|
EFI_TEXT_ENABLE_CURSOR EnableCursor;
|
|
SIMPLE_TEXT_OUTPUT_MODE *Mode;
|
|
} EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
|
|
|
// EFI Runtime Services
|
|
typedef struct EFI_RUNTIME_SERVICES {
|
|
EFI_TABLE_HEADER Hdr;
|
|
|
|
// Time Services
|
|
void *GetTime;
|
|
void *SetTime;
|
|
void *GetWakeupTime;
|
|
void *SetWakeupTime;
|
|
|
|
// Virtual Memory Services
|
|
void *SetVirtualAddressMap;
|
|
void *ConvertPointer;
|
|
|
|
// Variable Services
|
|
void *GetVariable;
|
|
void *GetNextVariableName;
|
|
void *SetVariable;
|
|
|
|
// Miscellaneous Services
|
|
void *GetNextHighMonotonicCount;
|
|
EFI_RESET_SYSTEM ResetSystem;
|
|
|
|
// UEFI 2.0 Capsule Services
|
|
void *UpdateCapsule;
|
|
void *QueryCapsuleCapabilities;
|
|
|
|
// Miscellaneous UEFI 2.0 Service
|
|
void *QueryVariableInfo;
|
|
} EFI_RUNTIME_SERVICES;
|
|
|
|
// EFI System Table
|
|
typedef struct EFI_SYSTEM_TABLE {
|
|
EFI_TABLE_HEADER Hdr;
|
|
|
|
void *FirmwareVendor;
|
|
UINT32 FirmwareRevision;
|
|
void *ConsoleInHandle;
|
|
EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn;
|
|
void *ConsoleOutHandle;
|
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
|
|
void *StandardErrorHandle;
|
|
void *StdErr;
|
|
EFI_RUNTIME_SERVICES *RuntimeServices;
|
|
void *BootServices;
|
|
UINTN NumberOfTableEntries;
|
|
void *ConfigurationTable;
|
|
} EFI_SYSTEM_TABLE;
|
|
|
|
#endif /* EFI_H */
|