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