xref: /freebsd-src/sys/contrib/edk2/Include/Protocol/SimpleTextInEx.h (revision 0d1ba6657e90b1f9b76e1c393b1555d6cf6cf260)
1*0d1ba665SWarner Losh /** @file
2*0d1ba665SWarner Losh   Simple Text Input Ex protocol from the UEFI 2.0 specification.
3*0d1ba665SWarner Losh 
4*0d1ba665SWarner Losh   This protocol defines an extension to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL
5*0d1ba665SWarner Losh   which exposes much more state and modifier information from the input device,
6*0d1ba665SWarner Losh   also allows one to register a notification for a particular keystroke.
7*0d1ba665SWarner Losh 
8*0d1ba665SWarner Losh   Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
9*0d1ba665SWarner Losh   This program and the accompanying materials
10*0d1ba665SWarner Losh   are licensed and made available under the terms and conditions of the BSD License
11*0d1ba665SWarner Losh   which accompanies this distribution.  The full text of the license may be found at
12*0d1ba665SWarner Losh   http://opensource.org/licenses/bsd-license.php
13*0d1ba665SWarner Losh 
14*0d1ba665SWarner Losh   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15*0d1ba665SWarner Losh   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16*0d1ba665SWarner Losh 
17*0d1ba665SWarner Losh **/
18*0d1ba665SWarner Losh 
19*0d1ba665SWarner Losh #ifndef __SIMPLE_TEXT_IN_EX_H__
20*0d1ba665SWarner Losh #define __SIMPLE_TEXT_IN_EX_H__
21*0d1ba665SWarner Losh 
22*0d1ba665SWarner Losh #include <Protocol/SimpleTextIn.h>
23*0d1ba665SWarner Losh 
24*0d1ba665SWarner Losh #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \
25*0d1ba665SWarner Losh   {0xdd9e7534, 0x7762, 0x4698, { 0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa } }
26*0d1ba665SWarner Losh 
27*0d1ba665SWarner Losh 
28*0d1ba665SWarner Losh typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;
29*0d1ba665SWarner Losh 
30*0d1ba665SWarner Losh /**
31*0d1ba665SWarner Losh   The Reset() function resets the input device hardware. As part
32*0d1ba665SWarner Losh   of initialization process, the firmware/device will make a quick
33*0d1ba665SWarner Losh   but reasonable attempt to verify that the device is functioning.
34*0d1ba665SWarner Losh   If the ExtendedVerification flag is TRUE the firmware may take
35*0d1ba665SWarner Losh   an extended amount of time to verify the device is operating on
36*0d1ba665SWarner Losh   reset. Otherwise the reset operation is to occur as quickly as
37*0d1ba665SWarner Losh   possible. The hardware verification process is not defined by
38*0d1ba665SWarner Losh   this specification and is left up to the platform firmware or
39*0d1ba665SWarner Losh   driver to implement.
40*0d1ba665SWarner Losh 
41*0d1ba665SWarner Losh   @param This                 A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance.
42*0d1ba665SWarner Losh 
43*0d1ba665SWarner Losh   @param ExtendedVerification Indicates that the driver may
44*0d1ba665SWarner Losh                               perform a more exhaustive
45*0d1ba665SWarner Losh                               verification operation of the
46*0d1ba665SWarner Losh                               device during reset.
47*0d1ba665SWarner Losh 
48*0d1ba665SWarner Losh 
49*0d1ba665SWarner Losh   @retval EFI_SUCCESS       The device was reset.
50*0d1ba665SWarner Losh 
51*0d1ba665SWarner Losh   @retval EFI_DEVICE_ERROR  The device is not functioning
52*0d1ba665SWarner Losh                             correctly and could not be reset.
53*0d1ba665SWarner Losh 
54*0d1ba665SWarner Losh **/
55*0d1ba665SWarner Losh typedef
56*0d1ba665SWarner Losh EFI_STATUS
57*0d1ba665SWarner Losh (EFIAPI *EFI_INPUT_RESET_EX)(
58*0d1ba665SWarner Losh   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
59*0d1ba665SWarner Losh   IN BOOLEAN                           ExtendedVerification
60*0d1ba665SWarner Losh );
61*0d1ba665SWarner Losh 
62*0d1ba665SWarner Losh 
63*0d1ba665SWarner Losh ///
64*0d1ba665SWarner Losh /// EFI_KEY_TOGGLE_STATE. The toggle states are defined.
65*0d1ba665SWarner Losh /// They are: EFI_TOGGLE_STATE_VALID, EFI_SCROLL_LOCK_ACTIVE
66*0d1ba665SWarner Losh /// EFI_NUM_LOCK_ACTIVE, EFI_CAPS_LOCK_ACTIVE
67*0d1ba665SWarner Losh ///
68*0d1ba665SWarner Losh typedef UINT8 EFI_KEY_TOGGLE_STATE;
69*0d1ba665SWarner Losh 
70*0d1ba665SWarner Losh typedef struct _EFI_KEY_STATE {
71*0d1ba665SWarner Losh   ///
72*0d1ba665SWarner Losh   /// Reflects the currently pressed shift
73*0d1ba665SWarner Losh   /// modifiers for the input device. The
74*0d1ba665SWarner Losh   /// returned value is valid only if the high
75*0d1ba665SWarner Losh   /// order bit has been set.
76*0d1ba665SWarner Losh   ///
77*0d1ba665SWarner Losh   UINT32                KeyShiftState;
78*0d1ba665SWarner Losh   ///
79*0d1ba665SWarner Losh   /// Reflects the current internal state of
80*0d1ba665SWarner Losh   /// various toggled attributes. The returned
81*0d1ba665SWarner Losh   /// value is valid only if the high order
82*0d1ba665SWarner Losh   /// bit has been set.
83*0d1ba665SWarner Losh   ///
84*0d1ba665SWarner Losh   EFI_KEY_TOGGLE_STATE  KeyToggleState;
85*0d1ba665SWarner Losh } EFI_KEY_STATE;
86*0d1ba665SWarner Losh 
87*0d1ba665SWarner Losh typedef struct {
88*0d1ba665SWarner Losh   ///
89*0d1ba665SWarner Losh   /// The EFI scan code and Unicode value returned from the input device.
90*0d1ba665SWarner Losh   ///
91*0d1ba665SWarner Losh   EFI_INPUT_KEY   Key;
92*0d1ba665SWarner Losh   ///
93*0d1ba665SWarner Losh   /// The current state of various toggled attributes as well as input modifier values.
94*0d1ba665SWarner Losh   ///
95*0d1ba665SWarner Losh   EFI_KEY_STATE   KeyState;
96*0d1ba665SWarner Losh } EFI_KEY_DATA;
97*0d1ba665SWarner Losh 
98*0d1ba665SWarner Losh //
99*0d1ba665SWarner Losh // Any Shift or Toggle State that is valid should have
100*0d1ba665SWarner Losh // high order bit set.
101*0d1ba665SWarner Losh //
102*0d1ba665SWarner Losh // Shift state
103*0d1ba665SWarner Losh //
104*0d1ba665SWarner Losh #define EFI_SHIFT_STATE_VALID     0x80000000
105*0d1ba665SWarner Losh #define EFI_RIGHT_SHIFT_PRESSED   0x00000001
106*0d1ba665SWarner Losh #define EFI_LEFT_SHIFT_PRESSED    0x00000002
107*0d1ba665SWarner Losh #define EFI_RIGHT_CONTROL_PRESSED 0x00000004
108*0d1ba665SWarner Losh #define EFI_LEFT_CONTROL_PRESSED  0x00000008
109*0d1ba665SWarner Losh #define EFI_RIGHT_ALT_PRESSED     0x00000010
110*0d1ba665SWarner Losh #define EFI_LEFT_ALT_PRESSED      0x00000020
111*0d1ba665SWarner Losh #define EFI_RIGHT_LOGO_PRESSED    0x00000040
112*0d1ba665SWarner Losh #define EFI_LEFT_LOGO_PRESSED     0x00000080
113*0d1ba665SWarner Losh #define EFI_MENU_KEY_PRESSED      0x00000100
114*0d1ba665SWarner Losh #define EFI_SYS_REQ_PRESSED       0x00000200
115*0d1ba665SWarner Losh 
116*0d1ba665SWarner Losh //
117*0d1ba665SWarner Losh // Toggle state
118*0d1ba665SWarner Losh //
119*0d1ba665SWarner Losh #define EFI_TOGGLE_STATE_VALID    0x80
120*0d1ba665SWarner Losh #define EFI_KEY_STATE_EXPOSED     0x40
121*0d1ba665SWarner Losh #define EFI_SCROLL_LOCK_ACTIVE    0x01
122*0d1ba665SWarner Losh #define EFI_NUM_LOCK_ACTIVE       0x02
123*0d1ba665SWarner Losh #define EFI_CAPS_LOCK_ACTIVE      0x04
124*0d1ba665SWarner Losh 
125*0d1ba665SWarner Losh //
126*0d1ba665SWarner Losh // EFI Scan codes
127*0d1ba665SWarner Losh //
128*0d1ba665SWarner Losh #define SCAN_F11                  0x0015
129*0d1ba665SWarner Losh #define SCAN_F12                  0x0016
130*0d1ba665SWarner Losh #define SCAN_PAUSE                0x0048
131*0d1ba665SWarner Losh #define SCAN_F13                  0x0068
132*0d1ba665SWarner Losh #define SCAN_F14                  0x0069
133*0d1ba665SWarner Losh #define SCAN_F15                  0x006A
134*0d1ba665SWarner Losh #define SCAN_F16                  0x006B
135*0d1ba665SWarner Losh #define SCAN_F17                  0x006C
136*0d1ba665SWarner Losh #define SCAN_F18                  0x006D
137*0d1ba665SWarner Losh #define SCAN_F19                  0x006E
138*0d1ba665SWarner Losh #define SCAN_F20                  0x006F
139*0d1ba665SWarner Losh #define SCAN_F21                  0x0070
140*0d1ba665SWarner Losh #define SCAN_F22                  0x0071
141*0d1ba665SWarner Losh #define SCAN_F23                  0x0072
142*0d1ba665SWarner Losh #define SCAN_F24                  0x0073
143*0d1ba665SWarner Losh #define SCAN_MUTE                 0x007F
144*0d1ba665SWarner Losh #define SCAN_VOLUME_UP            0x0080
145*0d1ba665SWarner Losh #define SCAN_VOLUME_DOWN          0x0081
146*0d1ba665SWarner Losh #define SCAN_BRIGHTNESS_UP        0x0100
147*0d1ba665SWarner Losh #define SCAN_BRIGHTNESS_DOWN      0x0101
148*0d1ba665SWarner Losh #define SCAN_SUSPEND              0x0102
149*0d1ba665SWarner Losh #define SCAN_HIBERNATE            0x0103
150*0d1ba665SWarner Losh #define SCAN_TOGGLE_DISPLAY       0x0104
151*0d1ba665SWarner Losh #define SCAN_RECOVERY             0x0105
152*0d1ba665SWarner Losh #define SCAN_EJECT                0x0106
153*0d1ba665SWarner Losh 
154*0d1ba665SWarner Losh /**
155*0d1ba665SWarner Losh   The function reads the next keystroke from the input device. If
156*0d1ba665SWarner Losh   there is no pending keystroke the function returns
157*0d1ba665SWarner Losh   EFI_NOT_READY. If there is a pending keystroke, then
158*0d1ba665SWarner Losh   KeyData.Key.ScanCode is the EFI scan code defined in Error!
159*0d1ba665SWarner Losh   Reference source not found. The KeyData.Key.UnicodeChar is the
160*0d1ba665SWarner Losh   actual printable character or is zero if the key does not
161*0d1ba665SWarner Losh   represent a printable character (control key, function key,
162*0d1ba665SWarner Losh   etc.). The KeyData.KeyState is shift state for the character
163*0d1ba665SWarner Losh   reflected in KeyData.Key.UnicodeChar or KeyData.Key.ScanCode .
164*0d1ba665SWarner Losh   When interpreting the data from this function, it should be
165*0d1ba665SWarner Losh   noted that if a class of printable characters that are
166*0d1ba665SWarner Losh   normally adjusted by shift modifiers (e.g. Shift Key + "f"
167*0d1ba665SWarner Losh   key) would be presented solely as a KeyData.Key.UnicodeChar
168*0d1ba665SWarner Losh   without the associated shift state. So in the previous example
169*0d1ba665SWarner Losh   of a Shift Key + "f" key being pressed, the only pertinent
170*0d1ba665SWarner Losh   data returned would be KeyData.Key.UnicodeChar with the value
171*0d1ba665SWarner Losh   of "F". This of course would not typically be the case for
172*0d1ba665SWarner Losh   non-printable characters such as the pressing of the Right
173*0d1ba665SWarner Losh   Shift Key + F10 key since the corresponding returned data
174*0d1ba665SWarner Losh   would be reflected both in the KeyData.KeyState.KeyShiftState
175*0d1ba665SWarner Losh   and KeyData.Key.ScanCode values. UEFI drivers which implement
176*0d1ba665SWarner Losh   the EFI_SIMPLE_TEXT_INPUT_EX protocol are required to return
177*0d1ba665SWarner Losh   KeyData.Key and KeyData.KeyState values. These drivers must
178*0d1ba665SWarner Losh   always return the most current state of
179*0d1ba665SWarner Losh   KeyData.KeyState.KeyShiftState and
180*0d1ba665SWarner Losh   KeyData.KeyState.KeyToggleState. It should also be noted that
181*0d1ba665SWarner Losh   certain input devices may not be able to produce shift or toggle
182*0d1ba665SWarner Losh   state information, and in those cases the high order bit in the
183*0d1ba665SWarner Losh   respective Toggle and Shift state fields should not be active.
184*0d1ba665SWarner Losh 
185*0d1ba665SWarner Losh 
186*0d1ba665SWarner Losh   @param This     A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance.
187*0d1ba665SWarner Losh 
188*0d1ba665SWarner Losh   @param KeyData  A pointer to a buffer that is filled in with
189*0d1ba665SWarner Losh                   the keystroke state data for the key that was
190*0d1ba665SWarner Losh                   pressed.
191*0d1ba665SWarner Losh 
192*0d1ba665SWarner Losh 
193*0d1ba665SWarner Losh   @retval EFI_SUCCESS     The keystroke information was
194*0d1ba665SWarner Losh                           returned.
195*0d1ba665SWarner Losh 
196*0d1ba665SWarner Losh   @retval EFI_NOT_READY   There was no keystroke data available.
197*0d1ba665SWarner Losh                           EFI_DEVICE_ERROR The keystroke
198*0d1ba665SWarner Losh                           information was not returned due to
199*0d1ba665SWarner Losh                           hardware errors.
200*0d1ba665SWarner Losh 
201*0d1ba665SWarner Losh 
202*0d1ba665SWarner Losh **/
203*0d1ba665SWarner Losh typedef
204*0d1ba665SWarner Losh EFI_STATUS
205*0d1ba665SWarner Losh (EFIAPI *EFI_INPUT_READ_KEY_EX)(
206*0d1ba665SWarner Losh   IN  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
207*0d1ba665SWarner Losh   OUT EFI_KEY_DATA                      *KeyData
208*0d1ba665SWarner Losh );
209*0d1ba665SWarner Losh 
210*0d1ba665SWarner Losh /**
211*0d1ba665SWarner Losh   The SetState() function allows the input device hardware to
212*0d1ba665SWarner Losh   have state settings adjusted.
213*0d1ba665SWarner Losh 
214*0d1ba665SWarner Losh   @param This           A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance.
215*0d1ba665SWarner Losh 
216*0d1ba665SWarner Losh   @param KeyToggleState Pointer to the EFI_KEY_TOGGLE_STATE to
217*0d1ba665SWarner Losh                         set the state for the input device.
218*0d1ba665SWarner Losh 
219*0d1ba665SWarner Losh 
220*0d1ba665SWarner Losh   @retval EFI_SUCCESS       The device state was set appropriately.
221*0d1ba665SWarner Losh 
222*0d1ba665SWarner Losh   @retval EFI_DEVICE_ERROR  The device is not functioning
223*0d1ba665SWarner Losh                             correctly and could not have the
224*0d1ba665SWarner Losh                             setting adjusted.
225*0d1ba665SWarner Losh 
226*0d1ba665SWarner Losh   @retval EFI_UNSUPPORTED   The device does not support the
227*0d1ba665SWarner Losh                             ability to have its state set.
228*0d1ba665SWarner Losh 
229*0d1ba665SWarner Losh **/
230*0d1ba665SWarner Losh typedef
231*0d1ba665SWarner Losh EFI_STATUS
232*0d1ba665SWarner Losh (EFIAPI *EFI_SET_STATE)(
233*0d1ba665SWarner Losh   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
234*0d1ba665SWarner Losh   IN EFI_KEY_TOGGLE_STATE              *KeyToggleState
235*0d1ba665SWarner Losh );
236*0d1ba665SWarner Losh 
237*0d1ba665SWarner Losh ///
238*0d1ba665SWarner Losh /// The function will be called when the key sequence is typed specified by KeyData.
239*0d1ba665SWarner Losh ///
240*0d1ba665SWarner Losh typedef
241*0d1ba665SWarner Losh EFI_STATUS
242*0d1ba665SWarner Losh (EFIAPI *EFI_KEY_NOTIFY_FUNCTION)(
243*0d1ba665SWarner Losh   IN EFI_KEY_DATA *KeyData
244*0d1ba665SWarner Losh );
245*0d1ba665SWarner Losh 
246*0d1ba665SWarner Losh /**
247*0d1ba665SWarner Losh   The RegisterKeystrokeNotify() function registers a function
248*0d1ba665SWarner Losh   which will be called when a specified keystroke will occur.
249*0d1ba665SWarner Losh 
250*0d1ba665SWarner Losh   @param This                     A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance.
251*0d1ba665SWarner Losh 
252*0d1ba665SWarner Losh   @param KeyData                  A pointer to a buffer that is filled in with
253*0d1ba665SWarner Losh                                   the keystroke information for the key that was
254*0d1ba665SWarner Losh                                   pressed.
255*0d1ba665SWarner Losh 
256*0d1ba665SWarner Losh   @param KeyNotificationFunction  Points to the function to be
257*0d1ba665SWarner Losh                                   called when the key sequence
258*0d1ba665SWarner Losh                                   is typed specified by KeyData.
259*0d1ba665SWarner Losh 
260*0d1ba665SWarner Losh 
261*0d1ba665SWarner Losh   @param NotifyHandle             Points to the unique handle assigned to
262*0d1ba665SWarner Losh                                   the registered notification.
263*0d1ba665SWarner Losh 
264*0d1ba665SWarner Losh   @retval EFI_SUCCESS           The device state was set
265*0d1ba665SWarner Losh                                 appropriately.
266*0d1ba665SWarner Losh 
267*0d1ba665SWarner Losh   @retval EFI_OUT_OF_RESOURCES  Unable to allocate necessary
268*0d1ba665SWarner Losh                                 data structures.
269*0d1ba665SWarner Losh 
270*0d1ba665SWarner Losh **/
271*0d1ba665SWarner Losh typedef
272*0d1ba665SWarner Losh EFI_STATUS
273*0d1ba665SWarner Losh (EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY)(
274*0d1ba665SWarner Losh   IN  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
275*0d1ba665SWarner Losh   IN  EFI_KEY_DATA                      *KeyData,
276*0d1ba665SWarner Losh   IN  EFI_KEY_NOTIFY_FUNCTION           KeyNotificationFunction,
277*0d1ba665SWarner Losh   OUT VOID                              **NotifyHandle
278*0d1ba665SWarner Losh );
279*0d1ba665SWarner Losh 
280*0d1ba665SWarner Losh /**
281*0d1ba665SWarner Losh   The UnregisterKeystrokeNotify() function removes the
282*0d1ba665SWarner Losh   notification which was previously registered.
283*0d1ba665SWarner Losh 
284*0d1ba665SWarner Losh   @param This               A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance.
285*0d1ba665SWarner Losh 
286*0d1ba665SWarner Losh   @param NotificationHandle The handle of the notification
287*0d1ba665SWarner Losh                             function being unregistered.
288*0d1ba665SWarner Losh 
289*0d1ba665SWarner Losh   @retval EFI_SUCCESS The device state was set appropriately.
290*0d1ba665SWarner Losh 
291*0d1ba665SWarner Losh   @retval EFI_INVALID_PARAMETER The NotificationHandle is
292*0d1ba665SWarner Losh                                 invalid.
293*0d1ba665SWarner Losh 
294*0d1ba665SWarner Losh **/
295*0d1ba665SWarner Losh typedef
296*0d1ba665SWarner Losh EFI_STATUS
297*0d1ba665SWarner Losh (EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY)(
298*0d1ba665SWarner Losh   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
299*0d1ba665SWarner Losh   IN VOID                               *NotificationHandle
300*0d1ba665SWarner Losh );
301*0d1ba665SWarner Losh 
302*0d1ba665SWarner Losh 
303*0d1ba665SWarner Losh ///
304*0d1ba665SWarner Losh /// The EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL is used on the ConsoleIn
305*0d1ba665SWarner Losh /// device. It is an extension to the Simple Text Input protocol
306*0d1ba665SWarner Losh /// which allows a variety of extended shift state information to be
307*0d1ba665SWarner Losh /// returned.
308*0d1ba665SWarner Losh ///
309*0d1ba665SWarner Losh struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL{
310*0d1ba665SWarner Losh   EFI_INPUT_RESET_EX              Reset;
311*0d1ba665SWarner Losh   EFI_INPUT_READ_KEY_EX           ReadKeyStrokeEx;
312*0d1ba665SWarner Losh   ///
313*0d1ba665SWarner Losh   /// Event to use with WaitForEvent() to wait for a key to be available.
314*0d1ba665SWarner Losh   ///
315*0d1ba665SWarner Losh   EFI_EVENT                       WaitForKeyEx;
316*0d1ba665SWarner Losh   EFI_SET_STATE                   SetState;
317*0d1ba665SWarner Losh   EFI_REGISTER_KEYSTROKE_NOTIFY   RegisterKeyNotify;
318*0d1ba665SWarner Losh   EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify;
319*0d1ba665SWarner Losh };
320*0d1ba665SWarner Losh 
321*0d1ba665SWarner Losh 
322*0d1ba665SWarner Losh extern EFI_GUID gEfiSimpleTextInputExProtocolGuid;
323*0d1ba665SWarner Losh 
324*0d1ba665SWarner Losh #endif
325*0d1ba665SWarner Losh 
326