]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/Win/Host/WinGop.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmulatorPkg / Win / Host / WinGop.h
CommitLineData
7a465451
RN
1/** @file\r
2\r
3Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
e3ba31da 4SPDX-License-Identifier: BSD-2-Clause-Patent\r
7a465451
RN
5\r
6Module Name:\r
7\r
8 WinGop.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_GOP_H_\r
18#define _WIN_GOP_H_\r
19\r
7a465451
RN
20#include "WinHost.h"\r
21\r
22#include <Protocol/EmuIoThunk.h>\r
23#include <Protocol/EmuGraphicsWindow.h>\r
109197ee 24#include <Protocol/SimplePointer.h>\r
7a465451
RN
25#include <Protocol/SimpleTextIn.h>\r
26#include <Protocol/SimpleTextInEx.h>\r
27#include <Protocol/GraphicsOutput.h>\r
d773459e 28#include <Library/FrameBufferBltLib.h>\r
7a465451
RN
29\r
30//\r
31// WM_SYSKEYDOWN/WM_SYSKEYUP Notification\r
32// lParam\r
33// bit 24: Specifies whether the key is an extended key,\r
34// such as the right-hand ALT and CTRL keys that appear on\r
35// an enhanced 101- or 102-key keyboard.\r
36// The value is 1 if it is an extended key; otherwise, it is 0.\r
37// bit 29:Specifies the context code.\r
38// The value is 1 if the ALT key is down while the key is pressed/released;\r
39// it is 0 if the WM_SYSKEYDOWN message is posted to the active window\r
40// because no window has the keyboard focus.\r
a550d468
MK
41#define GOP_EXTENDED_KEY (0x1 << 24)\r
42#define GOP_ALT_KEY_PRESSED (0x1 << 29)\r
7a465451 43\r
a550d468 44#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s\r
7a465451 45\r
a550d468 46#define MAX_Q 256\r
7a465451
RN
47\r
48typedef struct {\r
a550d468
MK
49 UINTN Front;\r
50 UINTN Rear;\r
51 EFI_KEY_DATA Q[MAX_Q];\r
52 CRITICAL_SECTION Cs;\r
7a465451
RN
53} GOP_QUEUE_FIXED;\r
54\r
a550d468 55#define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"\r
7a465451
RN
56\r
57typedef struct {\r
a550d468
MK
58 UINT64 Signature;\r
59 EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo;\r
7a465451
RN
60\r
61 //\r
62 // GOP Private Data knowing when to start hardware\r
63 //\r
a550d468 64 BOOLEAN HardwareNeedsStarting;\r
7a465451 65\r
a550d468
MK
66 CHAR16 *WindowName;\r
67 CHAR16 Buffer[160];\r
7a465451 68\r
a550d468
MK
69 HANDLE ThreadInited; // Semaphore\r
70 HANDLE ThreadHandle; // Thread\r
71 DWORD ThreadId;\r
7a465451 72\r
a550d468
MK
73 HWND WindowHandle;\r
74 WNDCLASSEX WindowsClass;\r
7a465451 75\r
a550d468
MK
76 UINT32 Width;\r
77 UINT32 Height;\r
7a465451 78 //\r
3d6b7fd3 79 // This screen is used to redraw the screen when windows events happen. It's\r
7a465451
RN
80 // updated in the main thread and displayed in the windows thread.\r
81 //\r
a550d468 82 BITMAPV4HEADER *VirtualScreenInfo;\r
7a465451 83\r
a550d468 84 FRAME_BUFFER_CONFIGURE *FrameBufferConfigure;\r
7a465451
RN
85\r
86 //\r
87 // Keyboard Queue used by Simple Text In.\r
88 // QueueForRead: WinProc thread adds, and main thread removes.\r
89 //\r
a550d468 90 GOP_QUEUE_FIXED QueueForRead;\r
7a465451
RN
91\r
92 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback;\r
93 EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback;\r
94 VOID *RegisterdKeyCallbackContext;\r
95\r
a550d468
MK
96 EFI_KEY_STATE KeyState;\r
97 BOOLEAN LeftShift;\r
98 BOOLEAN RightShift;\r
99 BOOLEAN LeftAlt;\r
100 BOOLEAN RightAlt;\r
101 BOOLEAN LeftCtrl;\r
102 BOOLEAN RightCtrl;\r
103 BOOLEAN LeftLogo;\r
104 BOOLEAN RightLogo;\r
105 BOOLEAN Menu;\r
106 BOOLEAN SysReq;\r
107 BOOLEAN NumLock;\r
108 BOOLEAN ScrollLock;\r
109 BOOLEAN CapsLock;\r
110 BOOLEAN IsPartialKeySupport;\r
111 INT32 PointerPreviousX;\r
112 INT32 PointerPreviousY;\r
113 BOOLEAN PointerStateChanged;\r
114 EFI_SIMPLE_POINTER_STATE PointerState;\r
7a465451
RN
115} GRAPHICS_PRIVATE_DATA;\r
116#define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd')\r
117#define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \\r
118 CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE)\r
119\r
7a465451
RN
120//\r
121// Gop Hardware abstraction internal worker functions\r
122//\r
123\r
124/**\r
125 TODO: Add function description\r
126\r
127 @param Private TODO: add argument description\r
128 @param Key TODO: add argument description\r
129\r
130 @return TODO: add return values\r
131\r
132**/\r
133EFI_STATUS\r
134GopPrivateAddKey (\r
a550d468
MK
135 IN GRAPHICS_PRIVATE_DATA *Private,\r
136 IN EFI_INPUT_KEY Key\r
7a465451
RN
137 );\r
138\r
139EFI_STATUS\r
140EFIAPI\r
141WinNtWndGetKey (\r
142 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,\r
143 IN EFI_KEY_DATA *KeyData\r
144 );\r
145\r
146EFI_STATUS\r
147EFIAPI\r
148WinNtWndCheckKey (\r
a550d468 149 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo\r
7a465451
RN
150 );\r
151\r
152EFI_STATUS\r
153EFIAPI\r
154WinNtWndKeySetState (\r
a550d468
MK
155 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,\r
156 IN EFI_KEY_TOGGLE_STATE *KeyToggleState\r
7a465451
RN
157 );\r
158\r
159EFI_STATUS\r
160EFIAPI\r
161WinNtWndRegisterKeyNotify (\r
a550d468
MK
162 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,\r
163 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack,\r
164 IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack,\r
165 IN VOID *Context\r
7a465451
RN
166 );\r
167\r
168EFI_STATUS\r
169EFIAPI\r
170WinNtWndCheckPointer (\r
a550d468 171 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo\r
7a465451
RN
172 );\r
173\r
174EFI_STATUS\r
175EFIAPI\r
176WinNtWndGetPointerState (\r
177 IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,\r
178 IN EFI_SIMPLE_POINTER_STATE *State\r
179 );\r
a550d468 180\r
7a465451
RN
181EFI_STATUS\r
182GopPrivateCreateQ (\r
a550d468
MK
183 IN GRAPHICS_PRIVATE_DATA *Private,\r
184 IN GOP_QUEUE_FIXED *Queue\r
7a465451
RN
185 );\r
186\r
7a465451
RN
187/**\r
188 TODO: Add function description\r
189\r
190 @param Private TODO: add argument description\r
191\r
192 @retval EFI_SUCCESS TODO: Add description for return value\r
193\r
194**/\r
195EFI_STATUS\r
196GopPrivateDestroyQ (\r
a550d468
MK
197 IN GRAPHICS_PRIVATE_DATA *Private,\r
198 IN GOP_QUEUE_FIXED *Queue\r
7a465451 199 );\r
7a465451 200\r
a550d468 201#endif\r