]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/EmuGopDxe/Gop.h
EmulatorPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / EmulatorPkg / EmuGopDxe / Gop.h
CommitLineData
79e4f2a5
RN
1/*++ @file\r
2\r
3Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
4Portions copyright (c) 2010,Apple Inc. All rights reserved.<BR>\r
e3ba31da 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
79e4f2a5
RN
6\r
7**/\r
8\r
9#ifndef __UGA_H_\r
10#define __UGA_H_\r
11\r
12#include <PiDxe.h>\r
13\r
14#include <Protocol/GraphicsOutput.h>\r
15#include <Protocol/SimpleTextIn.h>\r
16#include <Protocol/SimpleTextInEx.h>\r
17#include <Protocol/SimplePointer.h>\r
18#include <Protocol/EmuIoThunk.h>\r
19#include <Protocol/EmuGraphicsWindow.h>\r
20\r
21#include <Guid/EventGroup.h>\r
22\r
23#include <Library/DebugLib.h>\r
24#include <Library/BaseLib.h>\r
25#include <Library/UefiDriverEntryPoint.h>\r
26#include <Library/UefiLib.h>\r
27#include <Library/BaseMemoryLib.h>\r
28#include <Library/MemoryAllocationLib.h>\r
29#include <Library/UefiBootServicesTableLib.h>\r
30#include <Library/KeyMapLib.h>\r
31\r
32\r
33#define MAX_Q 256\r
34\r
35typedef struct {\r
36 UINTN Front;\r
37 UINTN Rear;\r
38 UINTN Count;\r
39 EFI_INPUT_KEY Q[MAX_Q];\r
40} GOP_QUEUE_FIXED;\r
41\r
42#define EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('U', 'g', 'S', 'n')\r
43typedef struct _EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY {\r
44 UINTN Signature;\r
45 EFI_HANDLE NotifyHandle;\r
46 EFI_KEY_DATA KeyData;\r
47 EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;\r
48 EFI_EVENT Event;\r
49 LIST_ENTRY NotifyEntry;\r
50} EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY;\r
51\r
52#define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff\r
53\r
54typedef struct {\r
55 UINT32 HorizontalResolution;\r
56 UINT32 VerticalResolution;\r
57 UINT32 ColorDepth;\r
58 UINT32 RefreshRate;\r
59} GOP_MODE_DATA;\r
60\r
61\r
62\r
63extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;\r
64extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;\r
65\r
66#define EMU_UGA_CLASS_NAME L"EmuGopWindow"\r
67\r
68#define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N')\r
69typedef struct {\r
70 UINT64 Signature;\r
71\r
72 EFI_HANDLE Handle;\r
73 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;\r
74 EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;\r
75 EFI_SIMPLE_POINTER_PROTOCOL SimplePointer;\r
76\r
77 EMU_IO_THUNK_PROTOCOL *EmuIoThunk;\r
78 EMU_GRAPHICS_WINDOW_PROTOCOL *EmuGraphicsWindow;\r
79\r
80 EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
81\r
82 EFI_SIMPLE_POINTER_MODE PointerMode;\r
83 //\r
84 // GOP Private Data for QueryMode ()\r
85 //\r
86 GOP_MODE_DATA *ModeData;\r
87\r
88\r
89 //\r
90 // UGA Private Data knowing when to start hardware\r
91 //\r
92 BOOLEAN HardwareNeedsStarting;\r
93\r
94 CHAR16 *WindowName;\r
95\r
96 GOP_QUEUE_FIXED Queue;\r
97\r
98 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx;\r
99 EFI_KEY_STATE KeyState;\r
100 LIST_ENTRY NotifyList;\r
101} GOP_PRIVATE_DATA;\r
102\r
103\r
104#define GOP_PRIVATE_DATA_FROM_THIS(a) \\r
105 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)\r
106\r
107#define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \\r
108 CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE)\r
109\r
110#define GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS(a) \\r
111 CR(a, GOP_PRIVATE_DATA, SimpleTextInEx, GOP_PRIVATE_DATA_SIGNATURE)\r
112\r
113#define GOP_PRIVATE_DATA_FROM_POINTER_MODE_THIS(a) \\r
114 CR(a, GOP_PRIVATE_DATA, SimplePointer, GOP_PRIVATE_DATA_SIGNATURE)\r
115\r
116\r
117//\r
118// Global Protocol Variables\r
119//\r
120extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;\r
121extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;\r
122extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2;\r
123\r
124//\r
125// Gop Hardware abstraction internal worker functions\r
126//\r
127EFI_STATUS\r
128EmuGopSupported (\r
129 IN EMU_IO_THUNK_PROTOCOL *EmuIoThunk\r
130 );\r
131\r
132EFI_STATUS\r
133EmuGopConstructor (\r
134 IN GOP_PRIVATE_DATA *Private\r
135 );\r
136\r
137EFI_STATUS\r
138EmuGopDestructor (\r
139 IN GOP_PRIVATE_DATA *Private\r
140 );\r
141\r
142\r
143EFI_STATUS\r
144GopPrivateAddQ (\r
145 IN GOP_PRIVATE_DATA *Private,\r
146 IN EFI_INPUT_KEY Key\r
147 );\r
148\r
149EFI_STATUS\r
150EmuGopInitializeSimpleTextInForWindow (\r
151 IN GOP_PRIVATE_DATA *Private\r
152 );\r
153\r
154EFI_STATUS\r
155EmuGopInitializeSimplePointerForWindow (\r
156 IN GOP_PRIVATE_DATA *Private\r
157 );\r
158\r
159EFI_STATUS\r
160EmuGopStartWindow (\r
161 IN GOP_PRIVATE_DATA *Private,\r
162 IN UINT32 HorizontalResolution,\r
163 IN UINT32 VerticalResolution,\r
164 IN UINT32 ColorDepth,\r
165 IN UINT32 RefreshRate\r
166 );\r
167\r
168VOID\r
169EFIAPI\r
170ShutdownGopEvent (\r
171 IN EFI_EVENT Event,\r
172 IN VOID *Context\r
173 );\r
174\r
175VOID\r
176EFIAPI\r
177GopPrivateMakeCallbackFunction (\r
178 IN VOID *Context,\r
179 IN EFI_KEY_DATA *KeyData\r
180 );\r
181\r
182VOID\r
183EFIAPI\r
184GopPrivateBreakCallbackFunction (\r
185 IN VOID *Context,\r
186 IN EFI_KEY_DATA *KeyData\r
187 );\r
188\r
189#endif\r