Inconsistent with specification here:
[edk2.git] / Nt32Pkg / WinNtGopDxe / WinNtGop.h
bloba13b48c88e3c9b3b19fff1ee37650b88ac3e768b
1 /** @file
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
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.
12 Module Name:
14 WinNtGop.h
16 Abstract:
18 Private data for the Gop driver that is bound to the WinNt Thunk protocol
21 **/
23 #ifndef _WIN_NT_GOP_H_
24 #define _WIN_NT_GOP_H_
27 #include <Uefi.h>
28 #include <WinNtDxe.h>
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>
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>
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)
61 #define MAX_Q 256
63 typedef struct {
64 UINTN Front;
65 UINTN Rear;
66 UINTN Count;
67 EFI_INPUT_KEY Q[MAX_Q];
68 } GOP_QUEUE_FIXED;
70 #define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"
72 #define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('S', 'g', 'o', 'N')
74 #define WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('W', 'g', 'S', 'n')
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;
84 #define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
86 typedef struct {
87 UINT32 HorizontalResolution;
88 UINT32 VerticalResolution;
89 UINT32 ColorDepth;
90 UINT32 RefreshRate;
91 } GOP_MODE_DATA;
93 typedef struct {
94 UINT64 Signature;
96 EFI_HANDLE Handle;
97 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
98 EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;
100 EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
102 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
105 // GOP Private Data for QueryMode ()
107 GOP_MODE_DATA *ModeData;
110 // GOP Private Data knowing when to start hardware
112 BOOLEAN HardwareNeedsStarting;
114 CHAR16 *WindowName;
115 CHAR16 Buffer[160];
117 HANDLE ThreadInited; // Semaphore
118 HANDLE ThreadHandle; // Thread
119 DWORD ThreadId;
121 HWND WindowHandle;
122 WNDCLASSEX WindowsClass;
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.
128 BITMAPV4HEADER *VirtualScreenInfo;
129 RGBQUAD *VirtualScreen;
131 EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FillLine;
134 // Keyboard Queue used by Simple Text In. WinProc thread adds, and main
135 // thread removes.
137 CRITICAL_SECTION QCriticalSection;
138 GOP_QUEUE_FIXED Queue;
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;
158 #define GOP_PRIVATE_DATA_FROM_THIS(a) \
159 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
161 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \
162 CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE)
164 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS(a) \
165 CR(a, GOP_PRIVATE_DATA, SimpleTextInEx, GOP_PRIVATE_DATA_SIGNATURE)
168 // Global Protocol Variables
170 extern EFI_DRIVER_BINDING_PROTOCOL gWinNtGopDriverBinding;
171 extern EFI_COMPONENT_NAME_PROTOCOL gWinNtGopComponentName;
172 extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtGopComponentName2;
176 // Gop Hardware abstraction internal worker functions
180 TODO: Add function description
182 @param WinNtIo TODO: add argument description
184 @return TODO: add return values
187 EFI_STATUS
188 WinNtGopSupported (
189 IN EFI_WIN_NT_IO_PROTOCOL *WinNtIo
194 TODO: Add function description
196 @param Private TODO: add argument description
198 @return TODO: add return values
201 EFI_STATUS
202 WinNtGopConstructor (
203 IN GOP_PRIVATE_DATA *Private
208 TODO: Add function description
210 @param Private TODO: add argument description
212 @return TODO: add return values
215 EFI_STATUS
216 WinNtGopDestructor (
217 IN GOP_PRIVATE_DATA *Private
221 // UEFI 2.0 driver model prototypes for Win NT GOP
226 TODO: Add function description
228 @param ImageHandle TODO: add argument description
229 @param SystemTable TODO: add argument description
231 @return TODO: add return values
234 EFI_STATUS
235 EFIAPI
236 WinNtGopInitialize (
237 IN EFI_HANDLE ImageHandle,
238 IN EFI_SYSTEM_TABLE *SystemTable
243 TODO: Add function description
245 @param This TODO: add argument description
246 @param Handle TODO: add argument description
247 @param RemainingDevicePath TODO: add argument description
249 @return TODO: add return values
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
262 TODO: Add function description
264 @param This TODO: add argument description
265 @param Handle TODO: add argument description
266 @param RemainingDevicePath TODO: add argument description
268 @return TODO: add return values
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
281 TODO: Add function description
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
288 @return TODO: add return values
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
302 TODO: Add function description
304 @param Private TODO: add argument description
305 @param Key TODO: add argument description
307 @return TODO: add return values
310 EFI_STATUS
311 GopPrivateAddQ (
312 IN GOP_PRIVATE_DATA *Private,
313 IN EFI_INPUT_KEY Key
318 TODO: Add function description
320 @param Private TODO: add argument description
322 @return TODO: add return values
325 EFI_STATUS
326 WinNtGopInitializeSimpleTextInForWindow (
327 IN GOP_PRIVATE_DATA *Private
332 TODO: Add function description
334 @param Private TODO: add argument description
336 @return TODO: add return values
339 EFI_STATUS
340 WinNtGopDestroySimpleTextInForWindow (
341 IN GOP_PRIVATE_DATA *Private
346 #endif