]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/Include/Protocol/EmuThunk.h
EmulatorPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / EmulatorPkg / Include / Protocol / EmuThunk.h
CommitLineData
949f388f 1/** @file\r
2 Emulator Thunk to abstract OS services from pure EFI code\r
3\r
4 Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>\r
d18d8a1d 5\r
e3ba31da 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
949f388f 7\r
8**/\r
9\r
10#ifndef __EMU_THUNK_PROTOCOL_H__\r
11#define __EMU_THUNK_PROTOCOL_H__\r
12\r
13#define EMU_THUNK_PROTOCOL_GUID \\r
7e284acb 14 { 0x5CF32E0B, 0x8EDF, 0x2E44, { 0x9C, 0xDA, 0x93, 0x20, 0x5E, 0x99, 0xEC, 0x1C } }\r
949f388f 15\r
16// neded for things like EFI_TIME_CAPABILITIES\r
17#include <Uefi.h>\r
18\r
19#include <Library/PeCoffExtraActionLib.h>\r
20\r
21#include <Protocol/EmuIoThunk.h>\r
22#include <Protocol/DevicePath.h>\r
23\r
24\r
25typedef struct {\r
26 VENDOR_DEVICE_PATH VendorDevicePath;\r
27 UINT32 Instance;\r
28} EMU_VENDOR_DEVICE_PATH_NODE;\r
29\r
30typedef struct {\r
31 EMU_VENDOR_DEVICE_PATH_NODE Vendor;\r
32 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
33} EMU_THUNK_DEVICE_PATH;\r
34\r
35\r
36\r
37typedef struct _EMU_THUNK_PROTOCOL EMU_THUNK_PROTOCOL;\r
38\r
39\r
40\r
d18d8a1d 41typedef\r
7e284acb 42UINTN\r
949f388f 43(EFIAPI *EMU_WRITE_STD_ERROR) (\r
7e284acb 44 IN UINT8 *Buffer,\r
45 IN UINTN NumberOfBytes\r
d18d8a1d 46 );\r
47\r
48typedef\r
7e284acb 49EFI_STATUS\r
50(EFIAPI *EMU_CONFIG_STD_IN) (\r
51 VOID\r
52 );\r
d18d8a1d 53\r
54typedef\r
7e284acb 55UINTN\r
56(EFIAPI *EMU_WRITE_STD_OUT) (\r
949f388f 57 IN UINT8 *Buffer,\r
58 IN UINTN NumberOfBytes\r
59 );\r
d18d8a1d 60\r
61typedef\r
7e284acb 62UINTN\r
63(EFIAPI *EMU_READ_STD_IN) (\r
64 OUT UINT8 *Buffer,\r
65 IN UINTN NumberOfBytes\r
66 );\r
67\r
d18d8a1d 68typedef\r
7e284acb 69BOOLEAN\r
70(EFIAPI *EMU_POLL_STD_IN) (\r
71 VOID\r
72 );\r
73\r
74\r
c2175068 75typedef\r
76VOID *\r
77(EFIAPI *EMU_OS_MALLOC) (\r
78 IN UINTN Size\r
79 );\r
1d7ac5a6 80\r
81typedef\r
82VOID *\r
83(EFIAPI *EMU_OS_VMALLOC) (\r
84 IN UINTN Size\r
85 );\r
d18d8a1d 86\r
87typedef\r
1d7ac5a6 88BOOLEAN\r
c2175068 89(EFIAPI *EMU_OS_FREE) (\r
90 IN VOID *Ptr\r
91 );\r
92\r
949f388f 93\r
d18d8a1d 94typedef\r
949f388f 95EFI_STATUS\r
96(EFIAPI *EMU_PE_COFF_GET_ENTRY_POINT) (\r
97 IN VOID *Pe32Data,\r
98 IN OUT VOID **EntryPoint\r
99 );\r
100\r
d18d8a1d 101typedef\r
949f388f 102VOID\r
103(EFIAPI *EMU_PE_COFF_RELOCATE_EXTRA_ACTION) (\r
104 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
105 );\r
106\r
d18d8a1d 107typedef\r
949f388f 108VOID\r
109(EFIAPI *EMU_PE_COFF_UNLOAD_EXTRA_ACTION) (\r
110 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
111 );\r
112\r
113typedef\r
114VOID\r
115(EFIAPI *EMU_ENABLE_INERRUPTS) (\r
116 VOID\r
117 );\r
d18d8a1d 118\r
949f388f 119typedef\r
120VOID\r
121(EFIAPI *EMU_DISABLE_INERRUPTS) (\r
122 VOID\r
123 );\r
124\r
125typedef\r
126UINT64\r
127(EFIAPI *EMU_QUERY_PERFORMANCE_FREQENCY) (\r
128 VOID\r
129 );\r
130\r
131typedef\r
132UINT64\r
133(EFIAPI *EMU_QUERY_PERFORMANCE_COUNTER) (\r
134 VOID\r
135 );\r
136\r
137typedef\r
138VOID\r
139(EFIAPI *EMU_SLEEP) (\r
140 IN UINT64 Milliseconds\r
141 );\r
142\r
57c7d70f 143typedef\r
144VOID\r
145(EFIAPI *EMU_CPU_SLEEP) (\r
146 VOID\r
147 );\r
148\r
949f388f 149typedef\r
150VOID\r
151(EFIAPI *EMU_EXIT) (\r
152 IN UINTN Status\r
153 );\r
d18d8a1d 154\r
949f388f 155typedef\r
156VOID\r
157(EFIAPI *EMU_GET_TIME) (\r
158 OUT EFI_TIME *Time,\r
159 OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL\r
160 );\r
d18d8a1d 161\r
949f388f 162typedef\r
163VOID\r
164(EFIAPI *EMU_SET_TIME) (\r
165 IN EFI_TIME *Time\r
166 );\r
167\r
168\r
169typedef\r
170VOID\r
171(EFIAPI EMU_SET_TIMER_CALLBACK) (\r
172 IN UINT64 DeltaMs\r
173 );\r
174\r
175typedef\r
176VOID\r
177(EFIAPI *EMU_SET_TIMER) (\r
178 IN UINT64 PeriodMs,\r
179 IN EMU_SET_TIMER_CALLBACK CallBack\r
180 );\r
d18d8a1d 181\r
949f388f 182\r
183\r
184/**\r
185 Enumerates the current set of protocol instances that abstract OS services from EFI.\r
d18d8a1d 186\r
949f388f 187 A given protocol can have multiple instances. Usually a protocol is configured via a\r
d18d8a1d 188 single PCD string. The data associated for each instance is seperated via a ! in the string.\r
949f388f 189 EMU_IO_THUNK_PROTOCOL_CLOSE.ConfigString will contain the information in the PCD string up to the next !.\r
d18d8a1d 190 Thus each instance has a unique ConfigString.\r
949f388f 191\r
192 @param EmuBusDriver TRUE means only return protocol instances that need to be produced\r
193 by the EmuBusDriver. FALSE means return all possible protocols\r
d18d8a1d 194 @param Instance On input the protocol to search for, or NULL to start a search\r
195 of all the supported protocol instances.\r
196 @param NextProtocol On output it represents the next value to be passed into Protocol.\r
197 @param Interface A pointer to the EMU_IO_THUNK_PROTOCOL_CLOSE interface.\r
949f388f 198\r
199 @retval EFI_SUCCESS The function completed successfully.\r
200 @retval EFI_NOT_FOUND The next protocol instance was not found.\r
201 @retval EFI_INVALID_PARAMETER Instance is NULL.\r
202\r
203**/\r
204typedef\r
205EFI_STATUS\r
206(EFIAPI *EMU_GET_NEXT_PROTOCOL) (\r
207 IN BOOLEAN EmuBusDriver,\r
208 OUT EMU_IO_THUNK_PROTOCOL **Instance OPTIONAL\r
209 );\r
d18d8a1d 210\r
949f388f 211\r
212struct _EMU_THUNK_PROTOCOL {\r
213 // Used for early debug printing\r
214 EMU_WRITE_STD_ERROR WriteStdErr;\r
7e284acb 215 EMU_CONFIG_STD_IN ConfigStdIn;\r
216 EMU_WRITE_STD_OUT WriteStdOut;\r
217 EMU_READ_STD_IN ReadStdIn;\r
218 EMU_POLL_STD_IN PollStdIn;\r
d18d8a1d 219\r
c2175068 220 //\r
221 // Map OS malloc/free so we can use OS based guard malloc\r
222 //\r
223 EMU_OS_MALLOC Malloc;\r
1d7ac5a6 224 EMU_OS_VMALLOC Valloc;\r
c2175068 225 EMU_OS_FREE Free;\r
d18d8a1d 226\r
227\r
949f388f 228 ///\r
229 /// PE/COFF loader hooks to get symbols loaded\r
230 ///\r
231 EMU_PE_COFF_GET_ENTRY_POINT PeCoffGetEntryPoint;\r
232 EMU_PE_COFF_RELOCATE_EXTRA_ACTION PeCoffRelocateImageExtraAction;\r
233 EMU_PE_COFF_UNLOAD_EXTRA_ACTION PeCoffUnloadImageExtraAction;\r
d18d8a1d 234\r
949f388f 235 ///\r
236 /// DXE Architecture Protocol Services\r
237 ///\r
238 EMU_ENABLE_INERRUPTS EnableInterrupt;\r
239 EMU_DISABLE_INERRUPTS DisableInterrupt;\r
240 EMU_QUERY_PERFORMANCE_FREQENCY QueryPerformanceFrequency;\r
241 EMU_QUERY_PERFORMANCE_COUNTER QueryPerformanceCounter;\r
242\r
243 EMU_SLEEP Sleep;\r
57c7d70f 244 EMU_CPU_SLEEP CpuSleep;\r
949f388f 245 EMU_EXIT Exit;\r
d18d8a1d 246 EMU_GET_TIME GetTime;\r
949f388f 247 EMU_SET_TIME SetTime;\r
d18d8a1d 248 EMU_SET_TIMER SetTimer;\r
249\r
949f388f 250 ///\r
251 /// Generic System Services\r
252 ///\r
253 EMU_GET_NEXT_PROTOCOL GetNextProtocol;\r
254};\r
255\r
256extern EFI_GUID gEmuThunkProtocolGuid;\r
257\r
258#endif\r