Initial commit
This commit is contained in:
commit
828603e9dc
3 changed files with 311 additions and 0 deletions
79
_types.h
Normal file
79
_types.h
Normal file
|
@ -0,0 +1,79 @@
|
|||
#ifndef EFI_TYPES_H
|
||||
#define EFI_TYPES_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
// Wide character
|
||||
typedef uint_least16_t char16_t;
|
||||
|
||||
// Common UEFI Data types
|
||||
typedef uint8_t BOOLEAN;
|
||||
typedef int8_t INT8;
|
||||
typedef uint8_t UINT8;
|
||||
typedef int16_t INT16;
|
||||
typedef uint16_t UINT16;
|
||||
typedef int32_t INT32;
|
||||
typedef uint32_t UINT32;
|
||||
typedef int64_t INT64;
|
||||
typedef uint64_t UINT64;
|
||||
typedef int64_t INTN;
|
||||
typedef uint64_t UINTN;
|
||||
typedef char CHAR8;
|
||||
typedef char16_t CHAR16;
|
||||
typedef void VOID;
|
||||
|
||||
typedef UINTN EFI_STATUS;
|
||||
typedef VOID *EFI_HANDLE;
|
||||
typedef VOID *EFI_EVENT;
|
||||
typedef UINT64 EFI_LBA;
|
||||
typedef UINTN EFI_TPL;
|
||||
|
||||
// https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Base.h
|
||||
#define IN
|
||||
#define OUT
|
||||
#define OPTIONAL
|
||||
#define CONST const
|
||||
|
||||
// x86_64 Microsoft calling convention
|
||||
// https://github.com/vathpela/gnu-efi/blob/master/inc/x86_64/efibind.h
|
||||
#define EFIAPI __attribute__((ms_abi))
|
||||
|
||||
// EFI Status Codes
|
||||
#define EFI_SUCCESS 0
|
||||
|
||||
// Text color attributes
|
||||
#define EFI_BLACK 0x00
|
||||
#define EFI_BLUE 0x01
|
||||
#define EFI_GREEN 0x02
|
||||
#define EFI_CYAN 0x03
|
||||
#define EFI_RED 0x04
|
||||
#define EFI_MAGENTA 0x05
|
||||
#define EFI_BROWN 0x06
|
||||
#define EFI_LIGHTGRAY 0x07
|
||||
#define EFI_BRIGHT 0x08
|
||||
#define EFI_DARKGRAY (EFI_BLACK | EFI_BRIGHT) 0x08
|
||||
#define EFI_LIGHTBLUE 0x09
|
||||
#define EFI_LIGHTGREEN 0x0A
|
||||
#define EFI_LIGHTCYAN 0x0B
|
||||
#define EFI_LIGHTRED 0x0C
|
||||
#define EFI_LIGHTMAGENTA 0x0D
|
||||
#define EFI_YELLOW 0x0E
|
||||
#define EFI_WHITE 0x0F
|
||||
|
||||
// Text background colors
|
||||
#define EFI_BACKGROUND_BLACK 0x00
|
||||
#define EFI_BACKGROUND_BLUE 0x10
|
||||
#define EFI_BACKGROUND_GREEN 0x20
|
||||
#define EFI_BACKGROUND_CYAN 0x30
|
||||
#define EFI_BACKGROUND_RED 0x40
|
||||
#define EFI_BACKGROUND_MAGENTA 0x50
|
||||
#define EFI_BACKGROUND_BROWN 0x60
|
||||
#define EFI_BACKGROUND_LIGHTGRAY 0x70
|
||||
|
||||
// Converts Foreground and Background colors into a single value
|
||||
#define EFI_TEXT_ATTR(Foreground,Background) \
|
||||
((Foreground) | ((Background) << 4))
|
||||
|
||||
#endif /* EFI_TYPES_H */
|
225
efi.h
Normal file
225
efi.h
Normal file
|
@ -0,0 +1,225 @@
|
|||
#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 */
|
7
guid.h
Normal file
7
guid.h
Normal file
|
@ -0,0 +1,7 @@
|
|||
#ifndef GUID_H
|
||||
#define GUID_H
|
||||
|
||||
#define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID {0x387477c1,0x69c7,0x11d2, {0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}}
|
||||
#define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID {0x387477c2,0x69c7,0x11d2, {0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b}}
|
||||
|
||||
#endif /* GUID_H */
|
Loading…
Add table
Reference in a new issue