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