summaryrefslogtreecommitdiffstats
path: root/src/boot/efi/proto/simple-text-io.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/boot/efi/proto/simple-text-io.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/src/boot/efi/proto/simple-text-io.h b/src/boot/efi/proto/simple-text-io.h
new file mode 100644
index 0000000..95016d3
--- /dev/null
+++ b/src/boot/efi/proto/simple-text-io.h
@@ -0,0 +1,182 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "efi.h"
+
+#define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \
+ GUID_DEF(0x387477c1, 0x69c7, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
+#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \
+ GUID_DEF(0xdd9e7534, 0x7762, 0x4698, 0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa)
+#define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \
+ GUID_DEF(0x387477c2, 0x69c7, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
+
+#define EFI_SHIFT_STATE_VALID 0x80000000U
+#define EFI_RIGHT_SHIFT_PRESSED 0x00000001U
+#define EFI_LEFT_SHIFT_PRESSED 0x00000002U
+#define EFI_RIGHT_CONTROL_PRESSED 0x00000004U
+#define EFI_LEFT_CONTROL_PRESSED 0x00000008U
+#define EFI_RIGHT_ALT_PRESSED 0x00000010U
+#define EFI_LEFT_ALT_PRESSED 0x00000020U
+#define EFI_RIGHT_LOGO_PRESSED 0x00000040U
+#define EFI_LEFT_LOGO_PRESSED 0x00000080U
+#define EFI_MENU_KEY_PRESSED 0x00000100U
+#define EFI_SYS_REQ_PRESSED 0x00000200U
+
+#define EFI_TOGGLE_STATE_VALID 0x80U
+#define EFI_KEY_STATE_EXPOSED 0x40U
+#define EFI_SCROLL_LOCK_ACTIVE 0x01U
+#define EFI_NUM_LOCK_ACTIVE 0x02U
+#define EFI_CAPS_LOCK_ACTIVE 0x04U
+
+enum {
+ EFI_BLACK = 0x00,
+ EFI_BLUE = 0x01,
+ EFI_GREEN = 0x02,
+ EFI_CYAN = EFI_BLUE | EFI_GREEN,
+ EFI_RED = 0x04,
+ EFI_MAGENTA = EFI_BLUE | EFI_RED,
+ EFI_BROWN = EFI_GREEN | EFI_RED,
+ EFI_LIGHTGRAY = EFI_BLUE | EFI_GREEN | EFI_RED,
+ EFI_BRIGHT = 0x08,
+ EFI_DARKGRAY = EFI_BLACK | EFI_BRIGHT,
+ EFI_LIGHTBLUE = EFI_BLUE | EFI_BRIGHT,
+ EFI_LIGHTGREEN = EFI_GREEN | EFI_BRIGHT,
+ EFI_LIGHTCYAN = EFI_CYAN | EFI_BRIGHT,
+ EFI_LIGHTRED = EFI_RED | EFI_BRIGHT,
+ EFI_LIGHTMAGENTA = EFI_MAGENTA | EFI_BRIGHT,
+ EFI_YELLOW = EFI_BROWN | EFI_BRIGHT,
+ EFI_WHITE = EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT,
+};
+
+#define EFI_TEXT_ATTR(fg, bg) ((fg) | ((bg) << 4))
+#define EFI_TEXT_ATTR_SWAP(c) EFI_TEXT_ATTR(((c) & 0xF0U) >> 4, (c) & 0xFU)
+
+enum {
+ SCAN_NULL = 0x000,
+ SCAN_UP = 0x001,
+ SCAN_DOWN = 0x002,
+ SCAN_RIGHT = 0x003,
+ SCAN_LEFT = 0x004,
+ SCAN_HOME = 0x005,
+ SCAN_END = 0x006,
+ SCAN_INSERT = 0x007,
+ SCAN_DELETE = 0x008,
+ SCAN_PAGE_UP = 0x009,
+ SCAN_PAGE_DOWN = 0x00A,
+ SCAN_F1 = 0x00B,
+ SCAN_F2 = 0x00C,
+ SCAN_F3 = 0x00D,
+ SCAN_F4 = 0x00E,
+ SCAN_F5 = 0x00F,
+ SCAN_F6 = 0x010,
+ SCAN_F7 = 0x011,
+ SCAN_F8 = 0x012,
+ SCAN_F9 = 0x013,
+ SCAN_F10 = 0x014,
+ SCAN_F11 = 0x015,
+ SCAN_F12 = 0x016,
+ SCAN_ESC = 0x017,
+ SCAN_PAUSE = 0x048,
+ SCAN_F13 = 0x068,
+ SCAN_F14 = 0x069,
+ SCAN_F15 = 0x06A,
+ SCAN_F16 = 0x06B,
+ SCAN_F17 = 0x06C,
+ SCAN_F18 = 0x06D,
+ SCAN_F19 = 0x06E,
+ SCAN_F20 = 0x06F,
+ SCAN_F21 = 0x070,
+ SCAN_F22 = 0x071,
+ SCAN_F23 = 0x072,
+ SCAN_F24 = 0x073,
+ SCAN_MUTE = 0x07F,
+ SCAN_VOLUME_UP = 0x080,
+ SCAN_VOLUME_DOWN = 0x081,
+ SCAN_BRIGHTNESS_UP = 0x100,
+ SCAN_BRIGHTNESS_DOWN = 0x101,
+ SCAN_SUSPEND = 0x102,
+ SCAN_HIBERNATE = 0x103,
+ SCAN_TOGGLE_DISPLAY = 0x104,
+ SCAN_RECOVERY = 0x105,
+ SCAN_EJECT = 0x106,
+};
+
+typedef struct {
+ uint16_t ScanCode;
+ char16_t UnicodeChar;
+} EFI_INPUT_KEY;
+
+typedef struct {
+ uint32_t KeyShiftState;
+ uint8_t KeyToggleState;
+} EFI_KEY_STATE;
+
+typedef struct {
+ EFI_INPUT_KEY Key;
+ EFI_KEY_STATE KeyState;
+} EFI_KEY_DATA;
+
+struct EFI_SIMPLE_TEXT_INPUT_PROTOCOL {
+ EFI_STATUS (EFIAPI *Reset)(
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
+ bool ExtendedVerification);
+ EFI_STATUS (EFIAPI *ReadKeyStroke)(
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
+ EFI_INPUT_KEY *Key);
+ EFI_EVENT WaitForKey;
+};
+
+typedef struct EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;
+struct EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL {
+ EFI_STATUS (EFIAPI *Reset)(
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
+ bool ExtendedVerification);
+ EFI_STATUS (EFIAPI *ReadKeyStrokeEx)(
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
+ EFI_KEY_DATA *KeyData);
+ EFI_EVENT WaitForKeyEx;
+ void *SetState;
+ void *RegisterKeyNotify;
+ void *UnregisterKeyNotify;
+};
+
+typedef struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
+struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL {
+ EFI_STATUS (EFIAPI *Reset)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
+ bool ExtendedVerification);
+ EFI_STATUS (EFIAPI *OutputString)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
+ char16_t *String);
+ EFI_STATUS (EFIAPI *TestString)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
+ char16_t *String);
+ EFI_STATUS (EFIAPI *QueryMode)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
+ size_t ModeNumber,
+ size_t *Columns,
+ size_t *Rows);
+ EFI_STATUS (EFIAPI *SetMode)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
+ size_t ModeNumber);
+ EFI_STATUS (EFIAPI *SetAttribute)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
+ size_t Attribute);
+ EFI_STATUS (EFIAPI *ClearScreen)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This);
+ EFI_STATUS (EFIAPI *SetCursorPosition)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
+ size_t Column,
+ size_t Row);
+ EFI_STATUS (EFIAPI *EnableCursor)(
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
+ bool Visible);
+ struct {
+ int32_t MaxMode;
+ int32_t Mode;
+ int32_t Attribute;
+ int32_t CursorColumn;
+ int32_t CursorRow;
+ bool CursorVisible;
+ } *Mode;
+};