]> git.proxmox.com Git - mirror_edk2.git/blob - EmulatorPkg/EmuGopDxe/Gop.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmulatorPkg / EmuGopDxe / Gop.h
1 /*++ @file
2
3 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
4 Portions copyright (c) 2010,Apple Inc. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #ifndef __UGA_H_
10 #define __UGA_H_
11
12 #include <PiDxe.h>
13
14 #include <Protocol/GraphicsOutput.h>
15 #include <Protocol/SimpleTextIn.h>
16 #include <Protocol/SimpleTextInEx.h>
17 #include <Protocol/SimplePointer.h>
18 #include <Protocol/EmuIoThunk.h>
19 #include <Protocol/EmuGraphicsWindow.h>
20
21 #include <Guid/EventGroup.h>
22
23 #include <Library/DebugLib.h>
24 #include <Library/BaseLib.h>
25 #include <Library/UefiDriverEntryPoint.h>
26 #include <Library/UefiLib.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/MemoryAllocationLib.h>
29 #include <Library/UefiBootServicesTableLib.h>
30 #include <Library/KeyMapLib.h>
31
32 #define MAX_Q 256
33
34 typedef struct {
35 UINTN Front;
36 UINTN Rear;
37 UINTN Count;
38 EFI_INPUT_KEY Q[MAX_Q];
39 } GOP_QUEUE_FIXED;
40
41 #define EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('U', 'g', 'S', 'n')
42 typedef struct _EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY {
43 UINTN Signature;
44 EFI_HANDLE NotifyHandle;
45 EFI_KEY_DATA KeyData;
46 EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;
47 EFI_EVENT Event;
48 LIST_ENTRY NotifyEntry;
49 } EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY;
50
51 #define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
52
53 typedef struct {
54 UINT32 HorizontalResolution;
55 UINT32 VerticalResolution;
56 UINT32 ColorDepth;
57 UINT32 RefreshRate;
58 } GOP_MODE_DATA;
59
60 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
61 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
62
63 #define EMU_UGA_CLASS_NAME L"EmuGopWindow"
64
65 #define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N')
66 typedef struct {
67 UINT64 Signature;
68
69 EFI_HANDLE Handle;
70 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
71 EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;
72 EFI_SIMPLE_POINTER_PROTOCOL SimplePointer;
73
74 EMU_IO_THUNK_PROTOCOL *EmuIoThunk;
75 EMU_GRAPHICS_WINDOW_PROTOCOL *EmuGraphicsWindow;
76
77 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
78
79 EFI_SIMPLE_POINTER_MODE PointerMode;
80 //
81 // GOP Private Data for QueryMode ()
82 //
83 GOP_MODE_DATA *ModeData;
84
85 //
86 // UGA Private Data knowing when to start hardware
87 //
88 BOOLEAN HardwareNeedsStarting;
89
90 CHAR16 *WindowName;
91
92 GOP_QUEUE_FIXED Queue;
93
94 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx;
95 EFI_KEY_STATE KeyState;
96 LIST_ENTRY NotifyList;
97 } GOP_PRIVATE_DATA;
98
99 #define GOP_PRIVATE_DATA_FROM_THIS(a) \
100 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
101
102 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \
103 CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE)
104
105 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS(a) \
106 CR(a, GOP_PRIVATE_DATA, SimpleTextInEx, GOP_PRIVATE_DATA_SIGNATURE)
107
108 #define GOP_PRIVATE_DATA_FROM_POINTER_MODE_THIS(a) \
109 CR(a, GOP_PRIVATE_DATA, SimplePointer, GOP_PRIVATE_DATA_SIGNATURE)
110
111 //
112 // Global Protocol Variables
113 //
114 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
115 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
116 extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2;
117
118 //
119 // Gop Hardware abstraction internal worker functions
120 //
121 EFI_STATUS
122 EmuGopSupported (
123 IN EMU_IO_THUNK_PROTOCOL *EmuIoThunk
124 );
125
126 EFI_STATUS
127 EmuGopConstructor (
128 IN GOP_PRIVATE_DATA *Private
129 );
130
131 EFI_STATUS
132 EmuGopDestructor (
133 IN GOP_PRIVATE_DATA *Private
134 );
135
136 EFI_STATUS
137 GopPrivateAddQ (
138 IN GOP_PRIVATE_DATA *Private,
139 IN EFI_INPUT_KEY Key
140 );
141
142 EFI_STATUS
143 EmuGopInitializeSimpleTextInForWindow (
144 IN GOP_PRIVATE_DATA *Private
145 );
146
147 EFI_STATUS
148 EmuGopInitializeSimplePointerForWindow (
149 IN GOP_PRIVATE_DATA *Private
150 );
151
152 EFI_STATUS
153 EmuGopStartWindow (
154 IN GOP_PRIVATE_DATA *Private,
155 IN UINT32 HorizontalResolution,
156 IN UINT32 VerticalResolution,
157 IN UINT32 ColorDepth,
158 IN UINT32 RefreshRate
159 );
160
161 VOID
162 EFIAPI
163 ShutdownGopEvent (
164 IN EFI_EVENT Event,
165 IN VOID *Context
166 );
167
168 VOID
169 EFIAPI
170 GopPrivateMakeCallbackFunction (
171 IN VOID *Context,
172 IN EFI_KEY_DATA *KeyData
173 );
174
175 VOID
176 EFIAPI
177 GopPrivateBreakCallbackFunction (
178 IN VOID *Context,
179 IN EFI_KEY_DATA *KeyData
180 );
181
182 #endif