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>
39 EFI_INPUT_KEY Q
[MAX_Q
];
42 #define EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('U', 'g', 'S', 'n')
43 typedef struct _EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY
{
45 EFI_HANDLE NotifyHandle
;
47 EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn
;
49 LIST_ENTRY NotifyEntry
;
50 } EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY
;
52 #define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
55 UINT32 HorizontalResolution
;
56 UINT32 VerticalResolution
;
63 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding
;
64 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName
;
66 #define EMU_UGA_CLASS_NAME L"EmuGopWindow"
68 #define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N')
73 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput
;
74 EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn
;
75 EFI_SIMPLE_POINTER_PROTOCOL SimplePointer
;
77 EMU_IO_THUNK_PROTOCOL
*EmuIoThunk
;
78 EMU_GRAPHICS_WINDOW_PROTOCOL
*EmuGraphicsWindow
;
80 EFI_UNICODE_STRING_TABLE
*ControllerNameTable
;
82 EFI_SIMPLE_POINTER_MODE PointerMode
;
84 // GOP Private Data for QueryMode ()
86 GOP_MODE_DATA
*ModeData
;
90 // UGA Private Data knowing when to start hardware
92 BOOLEAN HardwareNeedsStarting
;
96 GOP_QUEUE_FIXED Queue
;
98 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx
;
99 EFI_KEY_STATE KeyState
;
100 LIST_ENTRY NotifyList
;
104 #define GOP_PRIVATE_DATA_FROM_THIS(a) \
105 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
107 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \
108 CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE)
110 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS(a) \
111 CR(a, GOP_PRIVATE_DATA, SimpleTextInEx, GOP_PRIVATE_DATA_SIGNATURE)
113 #define GOP_PRIVATE_DATA_FROM_POINTER_MODE_THIS(a) \
114 CR(a, GOP_PRIVATE_DATA, SimplePointer, GOP_PRIVATE_DATA_SIGNATURE)
118 // Global Protocol Variables
120 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding
;
121 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName
;
122 extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2
;
125 // Gop Hardware abstraction internal worker functions
129 IN EMU_IO_THUNK_PROTOCOL
*EmuIoThunk
134 IN GOP_PRIVATE_DATA
*Private
139 IN GOP_PRIVATE_DATA
*Private
145 IN GOP_PRIVATE_DATA
*Private
,
150 EmuGopInitializeSimpleTextInForWindow (
151 IN GOP_PRIVATE_DATA
*Private
155 EmuGopInitializeSimplePointerForWindow (
156 IN GOP_PRIVATE_DATA
*Private
161 IN GOP_PRIVATE_DATA
*Private
,
162 IN UINT32 HorizontalResolution
,
163 IN UINT32 VerticalResolution
,
164 IN UINT32 ColorDepth
,
165 IN UINT32 RefreshRate
177 GopPrivateMakeCallbackFunction (
179 IN EFI_KEY_DATA
*KeyData
184 GopPrivateBreakCallbackFunction (
186 IN EFI_KEY_DATA
*KeyData