TianoCore EDK2 master
Loading...
Searching...
No Matches
Ps2KbdTextIn.c
Go to the documentation of this file.
1
10#include "Ps2Keyboard.h"
11
20BOOLEAN
22 IN EFI_KEY_QUEUE *Queue
23 )
24{
25 return (BOOLEAN)(Queue->Head == Queue->Tail);
26}
27
39 IN EFI_KEY_QUEUE *Queue,
40 OUT EFI_KEY_DATA *KeyData OPTIONAL
41 )
42{
43 if (IsEfikeyBufEmpty (Queue)) {
44 return EFI_NOT_READY;
45 }
46
47 //
48 // Retrieve and remove the values
49 //
50 if (KeyData != NULL) {
51 CopyMem (KeyData, &Queue->Buffer[Queue->Head], sizeof (EFI_KEY_DATA));
52 }
53
54 Queue->Head = (Queue->Head + 1) % KEYBOARD_EFI_KEY_MAX_COUNT;
55 return EFI_SUCCESS;
56}
57
64VOID
66 IN EFI_KEY_QUEUE *Queue,
67 IN EFI_KEY_DATA *KeyData
68 )
69{
70 if ((Queue->Tail + 1) % KEYBOARD_EFI_KEY_MAX_COUNT == Queue->Head) {
71 //
72 // If Queue is full, pop the one from head.
73 //
74 PopEfikeyBufHead (Queue, NULL);
75 }
76
77 CopyMem (&Queue->Buffer[Queue->Tail], KeyData, sizeof (EFI_KEY_DATA));
78 Queue->Tail = (Queue->Tail + 1) % KEYBOARD_EFI_KEY_MAX_COUNT;
79}
80
93BOOLEAN
95 IN EFI_KEY_DATA *RegsiteredData,
96 IN EFI_KEY_DATA *InputData
97 )
98
99{
100 ASSERT (RegsiteredData != NULL && InputData != NULL);
101
102 if ((RegsiteredData->Key.ScanCode != InputData->Key.ScanCode) ||
103 (RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar))
104 {
105 return FALSE;
106 }
107
108 //
109 // Assume KeyShiftState/KeyToggleState = 0 in Registered key data means these state could be ignored.
110 //
111 if ((RegsiteredData->KeyState.KeyShiftState != 0) &&
112 (RegsiteredData->KeyState.KeyShiftState != InputData->KeyState.KeyShiftState))
113 {
114 return FALSE;
115 }
116
117 if ((RegsiteredData->KeyState.KeyToggleState != 0) &&
118 (RegsiteredData->KeyState.KeyToggleState != InputData->KeyState.KeyToggleState))
119 {
120 return FALSE;
121 }
122
123 return TRUE;
124}
125
144 IN KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev,
145 OUT EFI_KEY_DATA *KeyData
146 )
147
148{
149 EFI_STATUS Status;
150 EFI_TPL OldTpl;
151
152 if (KeyData == NULL) {
153 return EFI_INVALID_PARAMETER;
154 }
155
156 //
157 // Enter critical section
158 //
159 OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
160
161 KeyboardTimerHandler (NULL, ConsoleInDev);
162
163 if (ConsoleInDev->KeyboardErr) {
164 Status = EFI_DEVICE_ERROR;
165 } else {
166 Status = PopEfikeyBufHead (&ConsoleInDev->EfiKeyQueue, KeyData);
167 if (Status == EFI_NOT_READY) {
168 ZeroMem (&KeyData->Key, sizeof (KeyData->Key));
169 InitializeKeyState (ConsoleInDev, &KeyData->KeyState);
170 }
171 }
172
173 gBS->RestoreTPL (OldTpl);
174 return Status;
175}
176
187EFIAPI
190 IN BOOLEAN ExtendedVerification
191 )
192{
193 EFI_STATUS Status;
194 KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;
195 EFI_TPL OldTpl;
196
197 ConsoleIn = KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);
198 if (ConsoleIn->KeyboardErr) {
199 return EFI_DEVICE_ERROR;
200 }
201
204 EFI_PERIPHERAL_KEYBOARD | EFI_P_PC_RESET,
205 ConsoleIn->DevicePath
206 );
207
208 //
209 // Enter critical section
210 //
211 OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
212
213 //
214 // Call InitKeyboard to initialize the keyboard
215 //
216 Status = InitKeyboard (ConsoleIn, ExtendedVerification);
217 if (EFI_ERROR (Status)) {
218 //
219 // Leave critical section and return
220 //
221 gBS->RestoreTPL (OldTpl);
222 return EFI_DEVICE_ERROR;
223 }
224
225 //
226 // Leave critical section and return
227 //
228 gBS->RestoreTPL (OldTpl);
229
230 //
231 // Report the status If a stuck key was detected
232 //
233 if (KeyReadStatusRegister (ConsoleIn) & 0x01) {
235 EFI_ERROR_CODE | EFI_ERROR_MINOR,
236 EFI_PERIPHERAL_KEYBOARD | EFI_P_KEYBOARD_EC_STUCK_KEY,
237 ConsoleIn->DevicePath
238 );
239 }
240
241 //
242 // Report the status If keyboard is locked
243 //
244 if ((KeyReadStatusRegister (ConsoleIn) & 0x10) == 0) {
246 EFI_ERROR_CODE | EFI_ERROR_MINOR,
247 EFI_PERIPHERAL_KEYBOARD | EFI_P_KEYBOARD_EC_LOCKED,
248 ConsoleIn->DevicePath
249 );
250 }
251
252 return EFI_SUCCESS;
253}
254
265EFIAPI
268 OUT EFI_INPUT_KEY *Key
269 )
270{
271 EFI_STATUS Status;
272 KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;
273 EFI_KEY_DATA KeyData;
274
275 ConsoleIn = KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);
276
277 //
278 // Considering if the partial keystroke is enabled, there maybe a partial
279 // keystroke in the queue, so here skip the partial keystroke and get the
280 // next key from the queue
281 //
282 while (1) {
283 //
284 // If there is no pending key, then return.
285 //
286 Status = KeyboardReadKeyStrokeWorker (ConsoleIn, &KeyData);
287 if (EFI_ERROR (Status)) {
288 return Status;
289 }
290
291 //
292 // If it is partial keystroke, skip it.
293 //
294 if ((KeyData.Key.ScanCode == SCAN_NULL) && (KeyData.Key.UnicodeChar == CHAR_NULL)) {
295 continue;
296 }
297
298 //
299 // Translate the CTRL-Alpha characters to their corresponding control value
300 // (ctrl-a = 0x0001 through ctrl-Z = 0x001A)
301 //
302 if ((KeyData.KeyState.KeyShiftState & (EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) != 0) {
303 if ((KeyData.Key.UnicodeChar >= L'a') && (KeyData.Key.UnicodeChar <= L'z')) {
304 KeyData.Key.UnicodeChar = (CHAR16)(KeyData.Key.UnicodeChar - L'a' + 1);
305 } else if ((KeyData.Key.UnicodeChar >= L'A') && (KeyData.Key.UnicodeChar <= L'Z')) {
306 KeyData.Key.UnicodeChar = (CHAR16)(KeyData.Key.UnicodeChar - L'A' + 1);
307 }
308 }
309
310 CopyMem (Key, &KeyData.Key, sizeof (EFI_INPUT_KEY));
311 return EFI_SUCCESS;
312 }
313}
314
323VOID
324EFIAPI
326 IN EFI_EVENT Event,
327 IN VOID *Context
328 )
329{
330 EFI_TPL OldTpl;
331 KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;
332 EFI_KEY_DATA KeyData;
333
334 ConsoleIn = (KEYBOARD_CONSOLE_IN_DEV *)Context;
335
336 //
337 // Enter critical section
338 //
339 OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
340
341 KeyboardTimerHandler (NULL, ConsoleIn);
342
343 if (!ConsoleIn->KeyboardErr) {
344 //
345 // WaitforKey doesn't support the partial key.
346 // Considering if the partial keystroke is enabled, there maybe a partial
347 // keystroke in the queue, so here skip the partial keystroke and get the
348 // next key from the queue
349 //
350 while (!IsEfikeyBufEmpty (&ConsoleIn->EfiKeyQueue)) {
351 CopyMem (
352 &KeyData,
353 &(ConsoleIn->EfiKeyQueue.Buffer[ConsoleIn->EfiKeyQueue.Head]),
354 sizeof (EFI_KEY_DATA)
355 );
356 if ((KeyData.Key.ScanCode == SCAN_NULL) && (KeyData.Key.UnicodeChar == CHAR_NULL)) {
357 PopEfikeyBufHead (&ConsoleIn->EfiKeyQueue, &KeyData);
358 continue;
359 }
360
361 //
362 // if there is pending value key, signal the event.
363 //
364 gBS->SignalEvent (Event);
365 break;
366 }
367 }
368
369 //
370 // Leave critical section and return
371 //
372 gBS->RestoreTPL (OldTpl);
373}
374
383VOID
384EFIAPI
386 IN EFI_EVENT Event,
387 IN VOID *Context
388 )
389
390{
391 KeyboardWaitForKey (Event, Context);
392}
393
406EFIAPI
409 IN BOOLEAN ExtendedVerification
410 )
411
412{
413 KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;
414
415 ConsoleInDev = TEXT_INPUT_EX_KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);
416
417 return ConsoleInDev->ConIn.Reset (
418 &ConsoleInDev->ConIn,
419 ExtendedVerification
420 );
421}
422
441EFIAPI
444 OUT EFI_KEY_DATA *KeyData
445 )
446
447{
448 KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;
449
450 if (KeyData == NULL) {
451 return EFI_INVALID_PARAMETER;
452 }
453
454 ConsoleInDev = TEXT_INPUT_EX_KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);
455 return KeyboardReadKeyStrokeWorker (ConsoleInDev, KeyData);
456}
457
473EFIAPI
476 IN EFI_KEY_TOGGLE_STATE *KeyToggleState
477 )
478
479{
480 EFI_STATUS Status;
481 KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;
482 EFI_TPL OldTpl;
483
484 if (KeyToggleState == NULL) {
485 return EFI_INVALID_PARAMETER;
486 }
487
488 ConsoleInDev = TEXT_INPUT_EX_KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);
489
490 //
491 // Enter critical section
492 //
493 OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
494
495 if (ConsoleInDev->KeyboardErr) {
496 Status = EFI_DEVICE_ERROR;
497 goto Exit;
498 }
499
500 if ((*KeyToggleState & EFI_TOGGLE_STATE_VALID) != EFI_TOGGLE_STATE_VALID) {
501 Status = EFI_UNSUPPORTED;
502 goto Exit;
503 }
504
505 //
506 // Update the status light
507 //
508 ConsoleInDev->ScrollLock = FALSE;
509 ConsoleInDev->NumLock = FALSE;
510 ConsoleInDev->CapsLock = FALSE;
511 ConsoleInDev->IsSupportPartialKey = FALSE;
512
513 if ((*KeyToggleState & EFI_SCROLL_LOCK_ACTIVE) == EFI_SCROLL_LOCK_ACTIVE) {
514 ConsoleInDev->ScrollLock = TRUE;
515 }
516
517 if ((*KeyToggleState & EFI_NUM_LOCK_ACTIVE) == EFI_NUM_LOCK_ACTIVE) {
518 ConsoleInDev->NumLock = TRUE;
519 }
520
521 if ((*KeyToggleState & EFI_CAPS_LOCK_ACTIVE) == EFI_CAPS_LOCK_ACTIVE) {
522 ConsoleInDev->CapsLock = TRUE;
523 }
524
525 if ((*KeyToggleState & EFI_KEY_STATE_EXPOSED) == EFI_KEY_STATE_EXPOSED) {
526 ConsoleInDev->IsSupportPartialKey = TRUE;
527 }
528
529 Status = UpdateStatusLights (ConsoleInDev);
530 if (EFI_ERROR (Status)) {
531 Status = EFI_DEVICE_ERROR;
532 }
533
534Exit:
535 //
536 // Leave critical section and return
537 //
538 gBS->RestoreTPL (OldTpl);
539
540 return Status;
541}
542
562EFIAPI
565 IN EFI_KEY_DATA *KeyData,
566 IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction,
567 OUT VOID **NotifyHandle
568 )
569{
570 EFI_STATUS Status;
571 KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;
572 EFI_TPL OldTpl;
573 LIST_ENTRY *Link;
574 KEYBOARD_CONSOLE_IN_EX_NOTIFY *CurrentNotify;
576
577 if ((KeyData == NULL) || (NotifyHandle == NULL) || (KeyNotificationFunction == NULL)) {
578 return EFI_INVALID_PARAMETER;
579 }
580
581 ConsoleInDev = TEXT_INPUT_EX_KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);
582
583 //
584 // Enter critical section
585 //
586 OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
587
588 //
589 // Return EFI_SUCCESS if the (KeyData, NotificationFunction) is already registered.
590 //
591 for (Link = ConsoleInDev->NotifyList.ForwardLink; Link != &ConsoleInDev->NotifyList; Link = Link->ForwardLink) {
592 CurrentNotify = CR (
593 Link,
595 NotifyEntry,
596 KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE
597 );
598 if (IsKeyRegistered (&CurrentNotify->KeyData, KeyData)) {
599 if (CurrentNotify->KeyNotificationFn == KeyNotificationFunction) {
600 *NotifyHandle = CurrentNotify;
601 Status = EFI_SUCCESS;
602 goto Exit;
603 }
604 }
605 }
606
607 //
608 // Allocate resource to save the notification function
609 //
611 if (NewNotify == NULL) {
612 Status = EFI_OUT_OF_RESOURCES;
613 goto Exit;
614 }
615
616 NewNotify->Signature = KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE;
617 NewNotify->KeyNotificationFn = KeyNotificationFunction;
618 CopyMem (&NewNotify->KeyData, KeyData, sizeof (EFI_KEY_DATA));
619 InsertTailList (&ConsoleInDev->NotifyList, &NewNotify->NotifyEntry);
620
621 *NotifyHandle = NewNotify;
622 Status = EFI_SUCCESS;
623
624Exit:
625 //
626 // Leave critical section and return
627 //
628 gBS->RestoreTPL (OldTpl);
629 return Status;
630}
631
644EFIAPI
647 IN VOID *NotificationHandle
648 )
649{
650 EFI_STATUS Status;
651 KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev;
652 EFI_TPL OldTpl;
653 LIST_ENTRY *Link;
654 KEYBOARD_CONSOLE_IN_EX_NOTIFY *CurrentNotify;
655
656 if (NotificationHandle == NULL) {
657 return EFI_INVALID_PARAMETER;
658 }
659
660 ConsoleInDev = TEXT_INPUT_EX_KEYBOARD_CONSOLE_IN_DEV_FROM_THIS (This);
661
662 //
663 // Enter critical section
664 //
665 OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
666
667 for (Link = ConsoleInDev->NotifyList.ForwardLink; Link != &ConsoleInDev->NotifyList; Link = Link->ForwardLink) {
668 CurrentNotify = CR (
669 Link,
671 NotifyEntry,
672 KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE
673 );
674 if (CurrentNotify == NotificationHandle) {
675 //
676 // Remove the notification function from NotifyList and free resources
677 //
678 RemoveEntryList (&CurrentNotify->NotifyEntry);
679
680 gBS->FreePool (CurrentNotify);
681 Status = EFI_SUCCESS;
682 goto Exit;
683 }
684 }
685
686 //
687 // Can not find the specified Notification Handle
688 //
689 Status = EFI_INVALID_PARAMETER;
690Exit:
691 //
692 // Leave critical section and return
693 //
694 gBS->RestoreTPL (OldTpl);
695 return Status;
696}
697
704VOID
705EFIAPI
707 IN EFI_EVENT Event,
708 IN VOID *Context
709 )
710{
711 EFI_STATUS Status;
712 KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;
713 EFI_KEY_DATA KeyData;
714 LIST_ENTRY *Link;
715 LIST_ENTRY *NotifyList;
716 KEYBOARD_CONSOLE_IN_EX_NOTIFY *CurrentNotify;
717 EFI_TPL OldTpl;
718
719 ConsoleIn = (KEYBOARD_CONSOLE_IN_DEV *)Context;
720
721 //
722 // Invoke notification functions.
723 //
724 NotifyList = &ConsoleIn->NotifyList;
725 while (TRUE) {
726 //
727 // Enter critical section
728 //
729 OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
730 Status = PopEfikeyBufHead (&ConsoleIn->EfiKeyQueueForNotify, &KeyData);
731 //
732 // Leave critical section
733 //
734 gBS->RestoreTPL (OldTpl);
735 if (EFI_ERROR (Status)) {
736 break;
737 }
738
739 for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {
740 CurrentNotify = CR (Link, KEYBOARD_CONSOLE_IN_EX_NOTIFY, NotifyEntry, KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE);
741 if (IsKeyRegistered (&CurrentNotify->KeyData, &KeyData)) {
742 CurrentNotify->KeyNotificationFn (&KeyData);
743 }
744 }
745 }
746}
BOOLEAN EFIAPI IsNull(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
Definition: LinkedList.c:443
LIST_ENTRY *EFIAPI GetNextNode(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
Definition: LinkedList.c:333
LIST_ENTRY *EFIAPI GetFirstNode(IN CONST LIST_ENTRY *List)
Definition: LinkedList.c:298
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
Definition: LinkedList.c:590
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
Definition: LinkedList.c:259
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
#define NULL
Definition: Base.h:319
#define TRUE
Definition: Base.h:301
#define FALSE
Definition: Base.h:307
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
#define CR(Record, TYPE, Field, TestSignature)
Definition: DebugLib.h:659
#define REPORT_STATUS_CODE_WITH_DEVICE_PATH(Type, Value, DevicePathParameter)
#define EFI_P_KEYBOARD_EC_LOCKED
Definition: PiStatusCode.h:471
#define EFI_ERROR_MINOR
Definition: PiStatusCode.h:58
#define EFI_PROGRESS_CODE
Definition: PiStatusCode.h:43
UINT8 KeyReadStatusRegister(IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn)
VOID EFIAPI KeyboardTimerHandler(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS UpdateStatusLights(IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn)
EFI_STATUS InitKeyboard(IN OUT KEYBOARD_CONSOLE_IN_DEV *ConsoleIn, IN BOOLEAN ExtendedVerification)
EFI_STATUS EFIAPI KeyboardReadKeyStrokeEx(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, OUT EFI_KEY_DATA *KeyData)
Definition: Ps2KbdTextIn.c:442
VOID EFIAPI KeyNotifyProcessHandler(IN EFI_EVENT Event, IN VOID *Context)
Definition: Ps2KbdTextIn.c:706
EFI_STATUS EFIAPI KeyboardEfiResetEx(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
Definition: Ps2KbdTextIn.c:407
EFI_STATUS EFIAPI KeyboardSetState(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_TOGGLE_STATE *KeyToggleState)
Definition: Ps2KbdTextIn.c:474
EFI_STATUS EFIAPI KeyboardEfiReset(IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
Definition: Ps2KbdTextIn.c:188
EFI_STATUS EFIAPI KeyboardReadKeyStroke(IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, OUT EFI_INPUT_KEY *Key)
Definition: Ps2KbdTextIn.c:266
VOID PushEfikeyBufTail(IN EFI_KEY_QUEUE *Queue, IN EFI_KEY_DATA *KeyData)
Definition: Ps2KbdTextIn.c:65
EFI_STATUS KeyboardReadKeyStrokeWorker(IN KEYBOARD_CONSOLE_IN_DEV *ConsoleInDev, OUT EFI_KEY_DATA *KeyData)
Definition: Ps2KbdTextIn.c:143
VOID EFIAPI KeyboardWaitForKeyEx(IN EFI_EVENT Event, IN VOID *Context)
Definition: Ps2KbdTextIn.c:385
BOOLEAN IsEfikeyBufEmpty(IN EFI_KEY_QUEUE *Queue)
Definition: Ps2KbdTextIn.c:21
EFI_STATUS PopEfikeyBufHead(IN EFI_KEY_QUEUE *Queue, OUT EFI_KEY_DATA *KeyData OPTIONAL)
Definition: Ps2KbdTextIn.c:38
EFI_STATUS EFIAPI KeyboardUnregisterKeyNotify(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN VOID *NotificationHandle)
Definition: Ps2KbdTextIn.c:645
EFI_STATUS EFIAPI KeyboardRegisterKeyNotify(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_DATA *KeyData, IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, OUT VOID **NotifyHandle)
Definition: Ps2KbdTextIn.c:563
BOOLEAN IsKeyRegistered(IN EFI_KEY_DATA *RegsiteredData, IN EFI_KEY_DATA *InputData)
Definition: Ps2KbdTextIn.c:94
VOID EFIAPI KeyboardWaitForKey(IN EFI_EVENT Event, IN VOID *Context)
Definition: Ps2KbdTextIn.c:325
UINT8 EFI_KEY_TOGGLE_STATE
EFI_STATUS(EFIAPI * EFI_KEY_NOTIFY_FUNCTION)(IN EFI_KEY_DATA *KeyData)
VOID EFIAPI Exit(IN EFI_STATUS Status)
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
VOID * EFI_EVENT
Definition: UefiBaseType.h:37
UINTN EFI_TPL
Definition: UefiBaseType.h:41
#define EFI_SUCCESS
Definition: UefiBaseType.h:112
EFI_BOOT_SERVICES * gBS
VOID InitializeKeyState(IN GRAPHICS_PRIVATE_DATA *Private, IN EFI_KEY_STATE *KeyState)
Definition: WinGopInput.c:168
UINT32 KeyShiftState
EFI_INPUT_KEY Key
EFI_KEY_STATE KeyState