3 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
4 Portions copyright (c) 2010,Apple Inc. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
14 #include <Protocol/GraphicsOutput.h>
15 #include <Protocol/SimpleTextIn.h>
16 #include <Protocol/SimpleTextInEx.h>
17 #include <Protocol/SimplePointer.h>
18 #include <Protocol/EmuIoThunk.h>
19 #include <Protocol/EmuGraphicsWindow.h>
21 #include <Guid/EventGroup.h>
23 #include <Library/DebugLib.h>
24 #include <Library/BaseLib.h>
25 #include <Library/UefiDriverEntryPoint.h>
26 #include <Library/UefiLib.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/MemoryAllocationLib.h>
29 #include <Library/UefiBootServicesTableLib.h>
30 #include <Library/KeyMapLib.h>
38 EFI_INPUT_KEY Q
[MAX_Q
];
41 #define EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('U', 'g', 'S', 'n')
42 typedef struct _EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY
{
44 EFI_HANDLE NotifyHandle
;
46 EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn
;
48 LIST_ENTRY NotifyEntry
;
49 } EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY
;
51 #define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
54 UINT32 HorizontalResolution
;
55 UINT32 VerticalResolution
;
60 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding
;
61 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName
;
63 #define EMU_UGA_CLASS_NAME L"EmuGopWindow"
65 #define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N')
70 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput
;
71 EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn
;
72 EFI_SIMPLE_POINTER_PROTOCOL SimplePointer
;
74 EMU_IO_THUNK_PROTOCOL
*EmuIoThunk
;
75 EMU_GRAPHICS_WINDOW_PROTOCOL
*EmuGraphicsWindow
;
77 EFI_UNICODE_STRING_TABLE
*ControllerNameTable
;
79 EFI_SIMPLE_POINTER_MODE PointerMode
;
81 // GOP Private Data for QueryMode ()
83 GOP_MODE_DATA
*ModeData
;
86 // UGA Private Data knowing when to start hardware
88 BOOLEAN HardwareNeedsStarting
;
92 GOP_QUEUE_FIXED Queue
;
94 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx
;
95 EFI_KEY_STATE KeyState
;
96 LIST_ENTRY NotifyList
;
99 #define GOP_PRIVATE_DATA_FROM_THIS(a) \
100 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
102 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \
103 CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE)
105 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS(a) \
106 CR(a, GOP_PRIVATE_DATA, SimpleTextInEx, GOP_PRIVATE_DATA_SIGNATURE)
108 #define GOP_PRIVATE_DATA_FROM_POINTER_MODE_THIS(a) \
109 CR(a, GOP_PRIVATE_DATA, SimplePointer, GOP_PRIVATE_DATA_SIGNATURE)
112 // Global Protocol Variables
114 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding
;
115 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName
;
116 extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2
;
119 // Gop Hardware abstraction internal worker functions
123 IN EMU_IO_THUNK_PROTOCOL
*EmuIoThunk
128 IN GOP_PRIVATE_DATA
*Private
133 IN GOP_PRIVATE_DATA
*Private
138 IN GOP_PRIVATE_DATA
*Private
,
143 EmuGopInitializeSimpleTextInForWindow (
144 IN GOP_PRIVATE_DATA
*Private
148 EmuGopInitializeSimplePointerForWindow (
149 IN GOP_PRIVATE_DATA
*Private
154 IN GOP_PRIVATE_DATA
*Private
,
155 IN UINT32 HorizontalResolution
,
156 IN UINT32 VerticalResolution
,
157 IN UINT32 ColorDepth
,
158 IN UINT32 RefreshRate
170 GopPrivateMakeCallbackFunction (
172 IN EFI_KEY_DATA
*KeyData
177 GopPrivateBreakCallbackFunction (
179 IN EFI_KEY_DATA
*KeyData