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