]> git.proxmox.com Git - mirror_edk2.git/blob - Nt32Pkg/WinNtGopDxe/WinNtGop.h
Clean up: update "EFI" to "UEFI" if applicable.
[mirror_edk2.git] / Nt32Pkg / WinNtGopDxe / WinNtGop.h
1 /** @file
2
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
8
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.
11
12 Module Name:
13
14 WinNtGop.h
15
16 Abstract:
17
18 Private data for the Gop driver that is bound to the WinNt Thunk protocol
19
20
21 **/
22
23 #ifndef _WIN_NT_GOP_H_
24 #define _WIN_NT_GOP_H_
25
26
27 #include <Uefi.h>
28 #include <WinNtDxe.h>
29
30 #include <Guid/EventGroup.h>
31 #include <Protocol/WinNtIo.h>
32 #include <Protocol/ComponentName.h>
33 #include <Protocol/SimpleTextIn.h>
34 #include <Protocol/SimpleTextInEx.h>
35 #include <Protocol/DriverBinding.h>
36 #include <Protocol/GraphicsOutput.h>
37
38 #include <Library/DebugLib.h>
39 #include <Library/BaseLib.h>
40 #include <Library/UefiDriverEntryPoint.h>
41 #include <Library/UefiLib.h>
42 #include <Library/BaseMemoryLib.h>
43 #include <Library/UefiBootServicesTableLib.h>
44 #include <Library/MemoryAllocationLib.h>
45
46 //
47 // WM_SYSKEYDOWN/WM_SYSKEYUP Notification
48 // lParam
49 // bit 24: Specifies whether the key is an extended key,
50 // such as the right-hand ALT and CTRL keys that appear on
51 // an enhanced 101- or 102-key keyboard.
52 // The value is 1 if it is an extended key; otherwise, it is 0.
53 // bit 29:Specifies the context code.
54 // The value is 1 if the ALT key is down while the key is pressed/released;
55 // it is 0 if the WM_SYSKEYDOWN message is posted to the active window
56 // because no window has the keyboard focus.
57 #define GOP_EXTENDED_KEY (0x1 << 24)
58 #define GOP_ALT_KEY_PRESSED (0x1 << 29)
59
60
61 #define MAX_Q 256
62
63 typedef struct {
64 UINTN Front;
65 UINTN Rear;
66 UINTN Count;
67 EFI_INPUT_KEY Q[MAX_Q];
68 } GOP_QUEUE_FIXED;
69
70 #define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"
71
72 #define GOP_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('S', 'g', 'o', 'N')
73
74 #define WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE EFI_SIGNATURE_32 ('W', 'g', 'S', 'n')
75
76 typedef struct _WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY {
77 UINTN Signature;
78 EFI_HANDLE NotifyHandle;
79 EFI_KEY_DATA KeyData;
80 EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;
81 LIST_ENTRY NotifyEntry;
82 } WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY;
83
84 #define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
85
86 typedef struct {
87 UINT32 HorizontalResolution;
88 UINT32 VerticalResolution;
89 UINT32 ColorDepth;
90 UINT32 RefreshRate;
91 } GOP_MODE_DATA;
92
93 typedef struct {
94 UINT64 Signature;
95
96 EFI_HANDLE Handle;
97 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
98 EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;
99
100 EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
101
102 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
103
104 //
105 // GOP Private Data for QueryMode ()
106 //
107 GOP_MODE_DATA *ModeData;
108
109 //
110 // GOP Private Data knowing when to start hardware
111 //
112 BOOLEAN HardwareNeedsStarting;
113
114 CHAR16 *WindowName;
115 CHAR16 Buffer[160];
116
117 HANDLE ThreadInited; // Semaphore
118 HANDLE ThreadHandle; // Thread
119 DWORD ThreadId;
120
121 HWND WindowHandle;
122 WNDCLASSEX WindowsClass;
123
124 //
125 // This screen is used to redraw the scree when windows events happen. It's
126 // updated in the main thread and displayed in the windows thread.
127 //
128 BITMAPV4HEADER *VirtualScreenInfo;
129 RGBQUAD *VirtualScreen;
130
131 EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FillLine;
132
133 //
134 // Keyboard Queue used by Simple Text In. WinProc thread adds, and main
135 // thread removes.
136 //
137 CRITICAL_SECTION QCriticalSection;
138 GOP_QUEUE_FIXED Queue;
139
140 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx;
141 EFI_KEY_STATE KeyState;
142 LIST_ENTRY NotifyList;
143 BOOLEAN LeftShift;
144 BOOLEAN RightShift;
145 BOOLEAN LeftAlt;
146 BOOLEAN RightAlt;
147 BOOLEAN LeftCtrl;
148 BOOLEAN RightCtrl;
149 BOOLEAN LeftLogo;
150 BOOLEAN RightLogo;
151 BOOLEAN Menu;
152 BOOLEAN SysReq;
153 BOOLEAN NumLock;
154 BOOLEAN ScrollLock;
155 BOOLEAN CapsLock;
156 } GOP_PRIVATE_DATA;
157
158 #define GOP_PRIVATE_DATA_FROM_THIS(a) \
159 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
160
161 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \
162 CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE)
163
164 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS(a) \
165 CR(a, GOP_PRIVATE_DATA, SimpleTextInEx, GOP_PRIVATE_DATA_SIGNATURE)
166
167 //
168 // Global Protocol Variables
169 //
170 extern EFI_DRIVER_BINDING_PROTOCOL gWinNtGopDriverBinding;
171 extern EFI_COMPONENT_NAME_PROTOCOL gWinNtGopComponentName;
172 extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtGopComponentName2;
173
174 extern EFI_GUID gSimpleTextInExNotifyGuid;
175
176 //
177 // Gop Hardware abstraction internal worker functions
178 //
179
180 /**
181 TODO: Add function description
182
183 @param WinNtIo TODO: add argument description
184
185 @return TODO: add return values
186
187 **/
188 EFI_STATUS
189 WinNtGopSupported (
190 IN EFI_WIN_NT_IO_PROTOCOL *WinNtIo
191 )
192 ;
193
194
195 /**
196 TODO: Add function description
197
198 @param Private TODO: add argument description
199
200 @return TODO: add return values
201
202 **/
203 EFI_STATUS
204 WinNtGopConstructor (
205 IN GOP_PRIVATE_DATA *Private
206 )
207 ;
208
209
210 /**
211 TODO: Add function description
212
213 @param Private TODO: add argument description
214
215 @return TODO: add return values
216
217 **/
218 EFI_STATUS
219 WinNtGopDestructor (
220 IN GOP_PRIVATE_DATA *Private
221 )
222 ;
223
224 //
225 // UEFI 2.0 driver model prototypes for Win NT GOP
226 //
227
228
229 /**
230 TODO: Add function description
231
232 @param ImageHandle TODO: add argument description
233 @param SystemTable TODO: add argument description
234
235 @return TODO: add return values
236
237 **/
238 EFI_STATUS
239 EFIAPI
240 WinNtGopInitialize (
241 IN EFI_HANDLE ImageHandle,
242 IN EFI_SYSTEM_TABLE *SystemTable
243 )
244 ;
245
246
247 /**
248 TODO: Add function description
249
250 @param This TODO: add argument description
251 @param Handle TODO: add argument description
252 @param RemainingDevicePath TODO: add argument description
253
254 @return TODO: add return values
255
256 **/
257 EFI_STATUS
258 EFIAPI
259 WinNtGopDriverBindingSupported (
260 IN EFI_DRIVER_BINDING_PROTOCOL *This,
261 IN EFI_HANDLE Handle,
262 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
263 )
264 ;
265
266
267 /**
268 TODO: Add function description
269
270 @param This TODO: add argument description
271 @param Handle TODO: add argument description
272 @param RemainingDevicePath TODO: add argument description
273
274 @return TODO: add return values
275
276 **/
277 EFI_STATUS
278 EFIAPI
279 WinNtGopDriverBindingStart (
280 IN EFI_DRIVER_BINDING_PROTOCOL *This,
281 IN EFI_HANDLE Handle,
282 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
283 )
284 ;
285
286
287 /**
288 TODO: Add function description
289
290 @param This TODO: add argument description
291 @param Handle TODO: add argument description
292 @param NumberOfChildren TODO: add argument description
293 @param ChildHandleBuffer TODO: add argument description
294
295 @return TODO: add return values
296
297 **/
298 EFI_STATUS
299 EFIAPI
300 WinNtGopDriverBindingStop (
301 IN EFI_DRIVER_BINDING_PROTOCOL *This,
302 IN EFI_HANDLE Handle,
303 IN UINTN NumberOfChildren,
304 IN EFI_HANDLE *ChildHandleBuffer
305 )
306 ;
307
308
309 /**
310 TODO: Add function description
311
312 @param Private TODO: add argument description
313 @param Key TODO: add argument description
314
315 @return TODO: add return values
316
317 **/
318 EFI_STATUS
319 GopPrivateAddQ (
320 IN GOP_PRIVATE_DATA *Private,
321 IN EFI_INPUT_KEY Key
322 )
323 ;
324
325
326 /**
327 TODO: Add function description
328
329 @param Private TODO: add argument description
330
331 @return TODO: add return values
332
333 **/
334 EFI_STATUS
335 WinNtGopInitializeSimpleTextInForWindow (
336 IN GOP_PRIVATE_DATA *Private
337 )
338 ;
339
340
341 /**
342 TODO: Add function description
343
344 @param Private TODO: add argument description
345
346 @return TODO: add return values
347
348 **/
349 EFI_STATUS
350 WinNtGopDestroySimpleTextInForWindow (
351 IN GOP_PRIVATE_DATA *Private
352 )
353 ;
354
355
356
357 #endif