]> git.proxmox.com Git - mirror_edk2.git/blob - Nt32Pkg/WinNtGopDxe/WinNtGop.h
Replace references to RFC 3066 with RFC 4646.
[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 SIGNATURE_32 ('S', 'g', 'o', 'N')
73
74 #define WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE 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
175 //
176 // Gop Hardware abstraction internal worker functions
177 //
178
179 /**
180 TODO: Add function description
181
182 @param WinNtIo TODO: add argument description
183
184 @return TODO: add return values
185
186 **/
187 EFI_STATUS
188 WinNtGopSupported (
189 IN EFI_WIN_NT_IO_PROTOCOL *WinNtIo
190 );
191
192
193 /**
194 TODO: Add function description
195
196 @param Private TODO: add argument description
197
198 @return TODO: add return values
199
200 **/
201 EFI_STATUS
202 WinNtGopConstructor (
203 IN GOP_PRIVATE_DATA *Private
204 );
205
206
207 /**
208 TODO: Add function description
209
210 @param Private TODO: add argument description
211
212 @return TODO: add return values
213
214 **/
215 EFI_STATUS
216 WinNtGopDestructor (
217 IN GOP_PRIVATE_DATA *Private
218 );
219
220 //
221 // UEFI 2.0 driver model prototypes for Win NT GOP
222 //
223
224
225 /**
226 TODO: Add function description
227
228 @param ImageHandle TODO: add argument description
229 @param SystemTable TODO: add argument description
230
231 @return TODO: add return values
232
233 **/
234 EFI_STATUS
235 EFIAPI
236 WinNtGopInitialize (
237 IN EFI_HANDLE ImageHandle,
238 IN EFI_SYSTEM_TABLE *SystemTable
239 );
240
241
242 /**
243 TODO: Add function description
244
245 @param This TODO: add argument description
246 @param Handle TODO: add argument description
247 @param RemainingDevicePath TODO: add argument description
248
249 @return TODO: add return values
250
251 **/
252 EFI_STATUS
253 EFIAPI
254 WinNtGopDriverBindingSupported (
255 IN EFI_DRIVER_BINDING_PROTOCOL *This,
256 IN EFI_HANDLE Handle,
257 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
258 );
259
260
261 /**
262 TODO: Add function description
263
264 @param This TODO: add argument description
265 @param Handle TODO: add argument description
266 @param RemainingDevicePath TODO: add argument description
267
268 @return TODO: add return values
269
270 **/
271 EFI_STATUS
272 EFIAPI
273 WinNtGopDriverBindingStart (
274 IN EFI_DRIVER_BINDING_PROTOCOL *This,
275 IN EFI_HANDLE Handle,
276 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
277 );
278
279
280 /**
281 TODO: Add function description
282
283 @param This TODO: add argument description
284 @param Handle TODO: add argument description
285 @param NumberOfChildren TODO: add argument description
286 @param ChildHandleBuffer TODO: add argument description
287
288 @return TODO: add return values
289
290 **/
291 EFI_STATUS
292 EFIAPI
293 WinNtGopDriverBindingStop (
294 IN EFI_DRIVER_BINDING_PROTOCOL *This,
295 IN EFI_HANDLE Handle,
296 IN UINTN NumberOfChildren,
297 IN EFI_HANDLE *ChildHandleBuffer
298 );
299
300
301 /**
302 TODO: Add function description
303
304 @param Private TODO: add argument description
305 @param Key TODO: add argument description
306
307 @return TODO: add return values
308
309 **/
310 EFI_STATUS
311 GopPrivateAddQ (
312 IN GOP_PRIVATE_DATA *Private,
313 IN EFI_INPUT_KEY Key
314 );
315
316
317 /**
318 TODO: Add function description
319
320 @param Private TODO: add argument description
321
322 @return TODO: add return values
323
324 **/
325 EFI_STATUS
326 WinNtGopInitializeSimpleTextInForWindow (
327 IN GOP_PRIVATE_DATA *Private
328 );
329
330
331 /**
332 TODO: Add function description
333
334 @param Private TODO: add argument description
335
336 @return TODO: add return values
337
338 **/
339 EFI_STATUS
340 WinNtGopDestroySimpleTextInForWindow (
341 IN GOP_PRIVATE_DATA *Private
342 );
343
344
345
346 #endif