3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 This file produces the Simple Text In for an Gop window.
20 This stuff is linked at the hip to the Window, since the window
21 processing is done in a thread kicked off in WinNtGopImplementation.c
23 Since the window information is processed in an other thread we need
24 a keyboard Queue to pass data about. The Simple Text In code just
25 takes data off the Queue. The WinProc message loop takes keyboard input
26 and places it in the Queue.
36 TODO: Add function description
38 @param Private TODO: add argument description
40 @retval EFI_SUCCESS TODO: Add description for return value
45 IN GOP_PRIVATE_DATA
*Private
48 Private
->WinNtThunk
->InitializeCriticalSection (&Private
->QCriticalSection
);
50 Private
->Queue
.Front
= 0;
51 Private
->Queue
.Rear
= MAX_Q
- 1;
52 Private
->Queue
.Count
= 0;
58 TODO: Add function description
60 @param Private TODO: add argument description
62 @retval EFI_SUCCESS TODO: Add description for return value
67 IN GOP_PRIVATE_DATA
*Private
70 Private
->Queue
.Count
= 0;
71 Private
->WinNtThunk
->DeleteCriticalSection (&Private
->QCriticalSection
);
77 TODO: Add function description
79 @param Private TODO: add argument description
80 @param Key TODO: add argument description
82 @retval EFI_NOT_READY TODO: Add description for return value
83 @retval EFI_SUCCESS TODO: Add description for return value
88 IN GOP_PRIVATE_DATA
*Private
,
92 Private
->WinNtThunk
->EnterCriticalSection (&Private
->QCriticalSection
);
94 if (Private
->Queue
.Count
== MAX_Q
) {
95 Private
->WinNtThunk
->LeaveCriticalSection (&Private
->QCriticalSection
);
99 Private
->Queue
.Rear
= (Private
->Queue
.Rear
+ 1) % MAX_Q
;
100 Private
->Queue
.Q
[Private
->Queue
.Rear
] = Key
;
101 Private
->Queue
.Count
++;
103 Private
->WinNtThunk
->LeaveCriticalSection (&Private
->QCriticalSection
);
109 TODO: Add function description
111 @param Private TODO: add argument description
112 @param Key TODO: add argument description
114 @retval EFI_NOT_READY TODO: Add description for return value
115 @retval EFI_SUCCESS TODO: Add description for return value
120 IN GOP_PRIVATE_DATA
*Private
,
121 OUT EFI_INPUT_KEY
*Key
124 Private
->WinNtThunk
->EnterCriticalSection (&Private
->QCriticalSection
);
126 if (Private
->Queue
.Count
== 0) {
127 Private
->WinNtThunk
->LeaveCriticalSection (&Private
->QCriticalSection
);
128 return EFI_NOT_READY
;
131 *Key
= Private
->Queue
.Q
[Private
->Queue
.Front
];
132 Private
->Queue
.Front
= (Private
->Queue
.Front
+ 1) % MAX_Q
;
133 Private
->Queue
.Count
--;
135 Private
->WinNtThunk
->LeaveCriticalSection (&Private
->QCriticalSection
);
141 TODO: Add function description
143 @param Private TODO: add argument description
145 @retval EFI_NOT_READY TODO: Add description for return value
146 @retval EFI_SUCCESS TODO: Add description for return value
151 IN GOP_PRIVATE_DATA
*Private
154 if (Private
->Queue
.Count
== 0) {
155 return EFI_NOT_READY
;
163 GopPrivateIsKeyRegistered (
164 IN EFI_KEY_DATA
*RegsiteredData
,
165 IN EFI_KEY_DATA
*InputData
173 RegsiteredData - A pointer to a buffer that is filled in with the keystroke
174 state data for the key that was registered.
175 InputData - A pointer to a buffer that is filled in with the keystroke
176 state data for the key that was pressed.
179 TRUE - Key be pressed matches a registered key.
180 FLASE - Match failed.
184 ASSERT (RegsiteredData
!= NULL
&& InputData
!= NULL
);
186 if ((RegsiteredData
->Key
.ScanCode
!= InputData
->Key
.ScanCode
) ||
187 (RegsiteredData
->Key
.UnicodeChar
!= InputData
->Key
.UnicodeChar
)) {
192 // Assume KeyShiftState/KeyToggleState = 0 in Registered key data means these state could be ignored.
194 if (RegsiteredData
->KeyState
.KeyShiftState
!= 0 &&
195 RegsiteredData
->KeyState
.KeyShiftState
!= InputData
->KeyState
.KeyShiftState
) {
198 if (RegsiteredData
->KeyState
.KeyToggleState
!= 0 &&
199 RegsiteredData
->KeyState
.KeyToggleState
!= InputData
->KeyState
.KeyToggleState
) {
210 GopPrivateInvokeRegisteredFunction (
211 IN GOP_PRIVATE_DATA
*Private
,
212 IN EFI_KEY_DATA
*KeyData
218 This function updates the status light of NumLock, ScrollLock and CapsLock.
222 Private - The private structure of WinNt Gop device.
223 KeyData - A pointer to a buffer that is filled in with the keystroke
224 state data for the key that was pressed.
228 EFI_SUCCESS - The status light is updated successfully.
233 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
*CurrentNotify
;
235 for (Link
= Private
->NotifyList
.ForwardLink
; Link
!= &Private
->NotifyList
; Link
= Link
->ForwardLink
) {
238 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
,
240 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE
242 if (GopPrivateIsKeyRegistered (&CurrentNotify
->KeyData
, KeyData
)) {
243 CurrentNotify
->KeyNotificationFn (KeyData
);
250 GopPrivateUpdateStatusLight (
251 IN GOP_PRIVATE_DATA
*Private
257 This function updates the status light of NumLock, ScrollLock and CapsLock.
261 Private - The private structure of WinNt console In/Out.
265 EFI_SUCCESS - The status light is updated successfully.
270 // BUGBUG:Only SendInput/keybd_event function can toggle
271 // NumLock, CapsLock and ScrollLock keys.
272 // Neither of these functions is included in EFI_WIN_NT_THUNK_PROTOCOL.
273 // Thus, return immediately without operation.
282 GopPrivateResetWorker (
283 IN GOP_PRIVATE_DATA
*Private
289 This function is a worker function for SimpleTextIn/SimpleTextInEx.Reset().
293 Private - WinNT GOP private structure
297 EFI_SUCCESS - Reset successfully
305 // Enter critical section
307 OldTpl
= gBS
->RaiseTPL (TPL_NOTIFY
);
310 // A reset is draining the Queue
312 while (GopPrivateDeleteQ (Private
, &Key
) == EFI_SUCCESS
)
315 Private
->LeftShift
= FALSE
;
316 Private
->RightShift
= FALSE
;
317 Private
->LeftAlt
= FALSE
;
318 Private
->RightAlt
= FALSE
;
319 Private
->LeftCtrl
= FALSE
;
320 Private
->RightCtrl
= FALSE
;
321 Private
->LeftLogo
= FALSE
;
322 Private
->RightLogo
= FALSE
;
323 Private
->Menu
= FALSE
;
324 Private
->SysReq
= FALSE
;
326 Private
->CapsLock
= FALSE
;
327 Private
->NumLock
= FALSE
;
328 Private
->ScrollLock
= FALSE
;
330 Private
->KeyState
.KeyShiftState
= EFI_SHIFT_STATE_VALID
;
331 Private
->KeyState
.KeyToggleState
= EFI_TOGGLE_STATE_VALID
;
334 // Leave critical section and return
336 gBS
->RestoreTPL (OldTpl
);
343 GopPrivateReadKeyStrokeWorker (
344 IN GOP_PRIVATE_DATA
*Private
,
345 OUT EFI_KEY_DATA
*KeyData
350 Reads the next keystroke from the input device. The WaitForKey Event can
351 be used to test for existance of a keystroke via WaitForEvent () call.
354 Private - The private structure of WinNt Gop device.
355 KeyData - A pointer to a buffer that is filled in with the keystroke
356 state data for the key that was pressed.
359 EFI_SUCCESS - The keystroke information was returned.
360 EFI_NOT_READY - There was no keystroke data availiable.
361 EFI_DEVICE_ERROR - The keystroke information was not returned due to
363 EFI_INVALID_PARAMETER - KeyData is NULL.
370 if (KeyData
== NULL
) {
371 return EFI_INVALID_PARAMETER
;
375 // Enter critical section
377 OldTpl
= gBS
->RaiseTPL (TPL_NOTIFY
);
379 Status
= GopPrivateCheckQ (Private
);
380 if (!EFI_ERROR (Status
)) {
382 // If a Key press exists try and read it.
384 Status
= GopPrivateDeleteQ (Private
, &KeyData
->Key
);
385 if (!EFI_ERROR (Status
)) {
387 // Record Key shift state and toggle state
389 if (Private
->LeftCtrl
) {
390 Private
->KeyState
.KeyShiftState
|= EFI_LEFT_CONTROL_PRESSED
;
392 if (Private
->RightCtrl
) {
393 Private
->KeyState
.KeyShiftState
|= EFI_RIGHT_CONTROL_PRESSED
;
395 if (Private
->LeftAlt
) {
396 Private
->KeyState
.KeyShiftState
|= EFI_LEFT_ALT_PRESSED
;
398 if (Private
->RightAlt
) {
399 Private
->KeyState
.KeyShiftState
|= EFI_RIGHT_ALT_PRESSED
;
401 if (Private
->LeftShift
) {
402 Private
->KeyState
.KeyShiftState
|= EFI_LEFT_SHIFT_PRESSED
;
404 if (Private
->RightShift
) {
405 Private
->KeyState
.KeyShiftState
|= EFI_RIGHT_SHIFT_PRESSED
;
407 if (Private
->LeftLogo
) {
408 Private
->KeyState
.KeyShiftState
|= EFI_LEFT_LOGO_PRESSED
;
410 if (Private
->RightLogo
) {
411 Private
->KeyState
.KeyShiftState
|= EFI_RIGHT_LOGO_PRESSED
;
414 Private
->KeyState
.KeyShiftState
|= EFI_MENU_KEY_PRESSED
;
416 if (Private
->SysReq
) {
417 Private
->KeyState
.KeyShiftState
|= EFI_SYS_REQ_PRESSED
;
419 if (Private
->CapsLock
) {
420 Private
->KeyState
.KeyToggleState
|= EFI_CAPS_LOCK_ACTIVE
;
422 if (Private
->NumLock
) {
423 Private
->KeyState
.KeyToggleState
|= EFI_NUM_LOCK_ACTIVE
;
425 if (Private
->ScrollLock
) {
426 Private
->KeyState
.KeyToggleState
|= EFI_SCROLL_LOCK_ACTIVE
;
429 KeyData
->KeyState
.KeyShiftState
= Private
->KeyState
.KeyShiftState
;
430 KeyData
->KeyState
.KeyToggleState
= Private
->KeyState
.KeyToggleState
;
432 Private
->KeyState
.KeyShiftState
= EFI_SHIFT_STATE_VALID
;
433 Private
->KeyState
.KeyToggleState
= EFI_TOGGLE_STATE_VALID
;
436 // Leave critical section and return
438 gBS
->RestoreTPL (OldTpl
);
440 GopPrivateInvokeRegisteredFunction (Private
, KeyData
);
447 // Leave critical section and return
449 gBS
->RestoreTPL (OldTpl
);
457 // Simple Text In implementation.
462 TODO: Add function description
464 @param This TODO: add argument description
465 @param ExtendedVerification TODO: add argument description
467 @retval EFI_SUCCESS TODO: Add description for return value
472 WinNtGopSimpleTextInReset (
473 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL
*This
,
474 IN BOOLEAN ExtendedVerification
477 GOP_PRIVATE_DATA
*Private
;
479 Private
= GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS (This
);
481 return GopPrivateResetWorker (Private
);
486 TODO: Add function description
488 @param This TODO: add argument description
489 @param Key TODO: add argument description
491 @return TODO: add return values
497 WinNtGopSimpleTextInReadKeyStroke (
498 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL
*This
,
499 OUT EFI_INPUT_KEY
*Key
502 GOP_PRIVATE_DATA
*Private
;
504 EFI_KEY_DATA KeyData
;
506 Private
= GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS (This
);
508 Status
= GopPrivateReadKeyStrokeWorker (Private
, &KeyData
);
509 if (EFI_ERROR (Status
)) {
513 CopyMem (Key
, &KeyData
.Key
, sizeof (EFI_INPUT_KEY
));
520 TODO: Add function description
522 @param Event TODO: add argument description
523 @param Context TODO: add argument description
525 @return TODO: add return values
531 WinNtGopSimpleTextInWaitForKey (
536 GOP_PRIVATE_DATA
*Private
;
540 Private
= (GOP_PRIVATE_DATA
*) Context
;
543 // Enter critical section
545 OldTpl
= gBS
->RaiseTPL (TPL_NOTIFY
);
547 Status
= GopPrivateCheckQ (Private
);
548 if (!EFI_ERROR (Status
)) {
550 // If a there is a key in the queue signal our event.
552 gBS
->SignalEvent (Event
);
555 // We need to sleep or NT will schedule this thread with such high
556 // priority that WinProc thread will never run and we will not see
557 // keyboard input. This Sleep makes the syste run 10x faster, so don't
560 Private
->WinNtThunk
->Sleep (1);
564 // Leave critical section and return
566 gBS
->RestoreTPL (OldTpl
);
570 // Simple Text Input Ex protocol functions
576 WinNtGopSimpleTextInExResetEx (
577 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*This
,
578 IN BOOLEAN ExtendedVerification
583 Reset the input device and optionaly run diagnostics
586 This - Protocol instance pointer.
587 ExtendedVerification - Driver may perform diagnostics on reset.
590 EFI_SUCCESS - The device was reset.
594 GOP_PRIVATE_DATA
*Private
;
596 Private
= GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS (This
);
598 return GopPrivateResetWorker (Private
);
604 WinNtGopSimpleTextInExReadKeyStrokeEx (
605 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*This
,
606 OUT EFI_KEY_DATA
*KeyData
611 Reads the next keystroke from the input device. The WaitForKey Event can
612 be used to test for existance of a keystroke via WaitForEvent () call.
615 This - Protocol instance pointer.
616 KeyData - A pointer to a buffer that is filled in with the keystroke
617 state data for the key that was pressed.
620 EFI_SUCCESS - The keystroke information was returned.
621 EFI_NOT_READY - There was no keystroke data availiable.
622 EFI_DEVICE_ERROR - The keystroke information was not returned due to
624 EFI_INVALID_PARAMETER - KeyData is NULL.
628 GOP_PRIVATE_DATA
*Private
;
630 if (KeyData
== NULL
) {
631 return EFI_INVALID_PARAMETER
;
634 Private
= GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS (This
);
636 return GopPrivateReadKeyStrokeWorker (Private
, KeyData
);
642 WinNtGopSimpleTextInExSetState (
643 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*This
,
644 IN EFI_KEY_TOGGLE_STATE
*KeyToggleState
649 Set certain state for the input device.
652 This - Protocol instance pointer.
653 KeyToggleState - A pointer to the EFI_KEY_TOGGLE_STATE to set the
654 state for the input device.
657 EFI_SUCCESS - The device state was set successfully.
658 EFI_DEVICE_ERROR - The device is not functioning correctly and could
659 not have the setting adjusted.
660 EFI_UNSUPPORTED - The device does not have the ability to set its state.
661 EFI_INVALID_PARAMETER - KeyToggleState is NULL.
666 GOP_PRIVATE_DATA
*Private
;
668 if (KeyToggleState
== NULL
) {
669 return EFI_INVALID_PARAMETER
;
672 Private
= GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS (This
);
674 if (((Private
->KeyState
.KeyToggleState
& EFI_TOGGLE_STATE_VALID
) != EFI_TOGGLE_STATE_VALID
) ||
675 ((*KeyToggleState
& EFI_TOGGLE_STATE_VALID
) != EFI_TOGGLE_STATE_VALID
)) {
676 return EFI_UNSUPPORTED
;
679 Private
->ScrollLock
= FALSE
;
680 Private
->NumLock
= FALSE
;
681 Private
->CapsLock
= FALSE
;
683 if ((*KeyToggleState
& EFI_SCROLL_LOCK_ACTIVE
) == EFI_SCROLL_LOCK_ACTIVE
) {
684 Private
->ScrollLock
= TRUE
;
686 if ((*KeyToggleState
& EFI_NUM_LOCK_ACTIVE
) == EFI_NUM_LOCK_ACTIVE
) {
687 Private
->NumLock
= TRUE
;
689 if ((*KeyToggleState
& EFI_CAPS_LOCK_ACTIVE
) == EFI_CAPS_LOCK_ACTIVE
) {
690 Private
->CapsLock
= TRUE
;
693 Status
= GopPrivateUpdateStatusLight (Private
);
694 if (EFI_ERROR (Status
)) {
695 return EFI_DEVICE_ERROR
;
698 Private
->KeyState
.KeyToggleState
= *KeyToggleState
;
705 WinNtGopSimpleTextInExRegisterKeyNotify (
706 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*This
,
707 IN EFI_KEY_DATA
*KeyData
,
708 IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction
,
709 OUT EFI_HANDLE
*NotifyHandle
714 Register a notification function for a particular keystroke for the input device.
717 This - Protocol instance pointer.
718 KeyData - A pointer to a buffer that is filled in with the keystroke
719 information data for the key that was pressed.
720 KeyNotificationFunction - Points to the function to be called when the key
721 sequence is typed specified by KeyData.
722 NotifyHandle - Points to the unique handle assigned to the registered notification.
725 EFI_SUCCESS - The notification function was registered successfully.
726 EFI_OUT_OF_RESOURCES - Unable to allocate resources for necesssary data structures.
727 EFI_INVALID_PARAMETER - KeyData or NotifyHandle is NULL.
732 GOP_PRIVATE_DATA
*Private
;
733 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
*CurrentNotify
;
735 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
*NewNotify
;
737 if (KeyData
== NULL
|| NotifyHandle
== NULL
) {
738 return EFI_INVALID_PARAMETER
;
741 Private
= GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS (This
);
744 // Return EFI_SUCCESS if the (KeyData, NotificationFunction) is already registered.
746 for (Link
= Private
->NotifyList
.ForwardLink
; Link
!= &Private
->NotifyList
; Link
= Link
->ForwardLink
) {
749 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
,
751 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE
753 if (GopPrivateIsKeyRegistered (&CurrentNotify
->KeyData
, KeyData
)) {
754 if (CurrentNotify
->KeyNotificationFn
== KeyNotificationFunction
) {
755 *NotifyHandle
= CurrentNotify
->NotifyHandle
;
762 // Allocate resource to save the notification function
764 NewNotify
= (WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
*) AllocateZeroPool (sizeof (WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
));
765 if (NewNotify
== NULL
) {
766 return EFI_OUT_OF_RESOURCES
;
769 NewNotify
->Signature
= WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE
;
770 NewNotify
->KeyNotificationFn
= KeyNotificationFunction
;
771 CopyMem (&NewNotify
->KeyData
, KeyData
, sizeof (KeyData
));
772 InsertTailList (&Private
->NotifyList
, &NewNotify
->NotifyEntry
);
775 // Use gSimpleTextInExNotifyGuid to get a valid EFI_HANDLE
777 Status
= gBS
->InstallMultipleProtocolInterfaces (
778 &NewNotify
->NotifyHandle
,
779 &gSimpleTextInExNotifyGuid
,
783 ASSERT_EFI_ERROR (Status
);
785 *NotifyHandle
= NewNotify
->NotifyHandle
;
793 WinNtGopSimpleTextInExUnregisterKeyNotify (
794 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*This
,
795 IN EFI_HANDLE NotificationHandle
800 Remove a registered notification function from a particular keystroke.
803 This - Protocol instance pointer.
804 NotificationHandle - The handle of the notification function being unregistered.
807 EFI_SUCCESS - The notification function was unregistered successfully.
808 EFI_INVALID_PARAMETER - The NotificationHandle is invalid.
809 EFI_NOT_FOUND - Can not find the matching entry in database.
814 GOP_PRIVATE_DATA
*Private
;
816 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
*CurrentNotify
;
818 if (NotificationHandle
== NULL
) {
819 return EFI_INVALID_PARAMETER
;
822 Status
= gBS
->OpenProtocol (
824 &gSimpleTextInExNotifyGuid
,
828 EFI_OPEN_PROTOCOL_TEST_PROTOCOL
830 if (EFI_ERROR (Status
)) {
831 return EFI_INVALID_PARAMETER
;
834 Private
= GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS (This
);
836 for (Link
= Private
->NotifyList
.ForwardLink
; Link
!= &Private
->NotifyList
; Link
= Link
->ForwardLink
) {
839 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY
,
841 WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE
843 if (CurrentNotify
->NotifyHandle
== NotificationHandle
) {
845 // Remove the notification function from NotifyList and free resources
847 RemoveEntryList (&CurrentNotify
->NotifyEntry
);
848 Status
= gBS
->UninstallMultipleProtocolInterfaces (
849 CurrentNotify
->NotifyHandle
,
850 &gSimpleTextInExNotifyGuid
,
854 ASSERT_EFI_ERROR (Status
);
855 gBS
->FreePool (CurrentNotify
);
861 // Can not find the specified Notification Handle
863 return EFI_NOT_FOUND
;
867 TODO: Add function description
869 @param Private TODO: add argument description
871 @return TODO: add return values
875 WinNtGopInitializeSimpleTextInForWindow (
876 IN GOP_PRIVATE_DATA
*Private
881 GopPrivateCreateQ (Private
);
884 // Initialize Simple Text In protoocol
886 Private
->SimpleTextIn
.Reset
= WinNtGopSimpleTextInReset
;
887 Private
->SimpleTextIn
.ReadKeyStroke
= WinNtGopSimpleTextInReadKeyStroke
;
889 Status
= gBS
->CreateEvent (
892 WinNtGopSimpleTextInWaitForKey
,
894 &Private
->SimpleTextIn
.WaitForKey
898 Private
->SimpleTextInEx
.Reset
= WinNtGopSimpleTextInExResetEx
;
899 Private
->SimpleTextInEx
.ReadKeyStrokeEx
= WinNtGopSimpleTextInExReadKeyStrokeEx
;
900 Private
->SimpleTextInEx
.SetState
= WinNtGopSimpleTextInExSetState
;
901 Private
->SimpleTextInEx
.RegisterKeyNotify
= WinNtGopSimpleTextInExRegisterKeyNotify
;
902 Private
->SimpleTextInEx
.UnregisterKeyNotify
= WinNtGopSimpleTextInExUnregisterKeyNotify
;
904 Private
->SimpleTextInEx
.Reset (&Private
->SimpleTextInEx
, FALSE
);
906 InitializeListHead (&Private
->NotifyList
);
908 Status
= gBS
->CreateEvent (
911 WinNtGopSimpleTextInWaitForKey
,
913 &Private
->SimpleTextInEx
.WaitForKeyEx
915 ASSERT_EFI_ERROR (Status
);
924 TODO: Add function description
926 @param Private TODO: add argument description
928 @retval EFI_SUCCESS TODO: Add description for return value
932 WinNtGopDestroySimpleTextInForWindow (
933 IN GOP_PRIVATE_DATA
*Private
936 GopPrivateDestroyQ (Private
);