1 /* $NetBSD: eficonex.h,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */ 2 3 #ifndef _EFI_CONEX_H 4 #define _EFI_CONEX_H 5 6 /*++ 7 8 Copyright (c) 2020 Kagurazaka Kotori <kagurazakakotori@gmail.com> 9 10 Module Name: 11 12 eficonex.h 13 14 Abstract: 15 16 EFI console extension protocols 17 18 --*/ 19 20 // 21 // Simple Text Input Ex Protocol 22 // 23 24 #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \ 25 { 0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa} } 26 27 INTERFACE_DECL(_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL); 28 29 typedef UINT8 EFI_KEY_TOGGLE_STATE; 30 31 typedef struct EFI_KEY_STATE { 32 UINT32 KeyShiftState; 33 EFI_KEY_TOGGLE_STATE KeyToggleState; 34 } EFI_KEY_STATE; 35 36 typedef struct { 37 EFI_INPUT_KEY Key; 38 EFI_KEY_STATE KeyState; 39 } EFI_KEY_DATA; 40 41 // Shift states 42 #define EFI_SHIFT_STATE_VALID 0x80000000 43 #define EFI_RIGHT_SHIFT_PRESSED 0x00000001 44 #define EFI_LEFT_SHIFT_PRESSED 0x00000002 45 #define EFI_RIGHT_CONTROL_PRESSED 0x00000004 46 #define EFI_LEFT_CONTROL_PRESSED 0x00000008 47 #define EFI_RIGHT_ALT_PRESSED 0x00000010 48 #define EFI_LEFT_ALT_PRESSED 0x00000020 49 #define EFI_RIGHT_LOGO_PRESSED 0x00000040 50 #define EFI_LEFT_LOGO_PRESSED 0x00000080 51 #define EFI_MENU_KEY_PRESSED 0x00000100 52 #define EFI_SYS_REQ_PRESSED 0x00000200 53 54 // Toggle states 55 #define EFI_TOGGLE_STATE_VALID 0x80 56 #define EFI_KEY_STATE_EXPOSED 0x40 57 #define EFI_SCROLL_LOCK_ACTIVE 0x01 58 #define EFI_NUM_LOCK_ACTIVE 0x02 59 #define EFI_CAPS_LOCK_ACTIVE 0x04 60 61 typedef 62 EFI_STATUS 63 (EFIAPI *EFI_INPUT_RESET_EX) ( 64 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 65 IN BOOLEAN ExtendedVerification 66 ); 67 68 typedef 69 EFI_STATUS 70 (EFIAPI *EFI_INPUT_READ_KEY_EX) ( 71 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 72 OUT EFI_KEY_DATA *KeyData 73 ); 74 75 typedef 76 EFI_STATUS 77 (EFIAPI *EFI_SET_STATE) ( 78 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 79 IN EFI_KEY_TOGGLE_STATE *KeyToggleState 80 ); 81 82 typedef 83 EFI_STATUS 84 (EFIAPI *EFI_KEY_NOTIFY_FUNCTION) ( 85 IN EFI_KEY_DATA *KeyData 86 ); 87 88 typedef 89 EFI_STATUS 90 (EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY) ( 91 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 92 IN EFI_KEY_DATA *KeyData, 93 IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, 94 OUT VOID **NotifyHandle 95 ); 96 97 typedef 98 EFI_STATUS 99 (EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY) ( 100 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 101 IN VOID *NotificationHandle 102 ); 103 104 typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL{ 105 EFI_INPUT_RESET_EX Reset; 106 EFI_INPUT_READ_KEY_EX ReadKeyStrokeEx; 107 EFI_EVENT WaitForKeyEx; 108 EFI_SET_STATE SetState; 109 EFI_REGISTER_KEYSTROKE_NOTIFY RegisterKeyNotify; 110 EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify; 111 } EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL; 112 113 #endif 114