]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/Unix/Host/Host.h
EmulatorPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / EmulatorPkg / Unix / Host / Host.h
CommitLineData
949f388f 1/*++ @file\r
2\r
10d1be3e 3Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
949f388f 4Portions copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>\r
10d1be3e 5\r
e3ba31da 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
949f388f 7\r
8**/\r
9\r
10#ifndef _SEC_MAIN_H__\r
11#define _SEC_MAIN_H__\r
12\r
2b59fcd5 13//\r
14// Name mangle to prevent build errors. I.e conflicts between EFI and OS\r
15//\r
16#define NTOHL _UNIX_EFI_NAME_MANGLE_NTOHL_\r
17#define HTONL _UNIX_EFI_NAME_MANGLE_HTONL_\r
18#define NTOHS _UNIX_EFI_NAME_MANGLE_NTOHS_\r
19#define HTONS _UNIX_EFI_NAME_MANGLE_HTOHS_\r
20#define B0 _UNIX_EFI_NAME_MANGLE_B0_\r
949f388f 21\r
22#include <stdio.h>\r
23#include <stdlib.h>\r
24\r
25#include <sys/types.h>\r
26#include <sys/stat.h>\r
27#include <sys/termios.h>\r
28#include <sys/time.h>\r
29\r
30#if __CYGWIN__\r
31#include <sys/dirent.h>\r
32#else\r
33#include <sys/dir.h>\r
34#endif\r
35\r
36#include <sys/mman.h>\r
37#include <dlfcn.h>\r
38\r
39#include <unistd.h>\r
40#include <poll.h>\r
41#include <fcntl.h>\r
42#include <time.h>\r
43#include <signal.h>\r
44#include <errno.h>\r
45#include <string.h>\r
46#include <stdlib.h>\r
47#include <sys/ioctl.h>\r
63947cc4 48#include <sys/statvfs.h>\r
949f388f 49\r
50#include <sys/socket.h>\r
51#include <netdb.h>\r
52#include <netinet/in.h>\r
53#include <net/if.h>\r
54#include <ifaddrs.h>\r
55\r
56#ifdef __APPLE__\r
57#include <net/if_dl.h>\r
58#include <net/bpf.h>\r
59#include <sys/param.h>\r
60#include <sys/mount.h>\r
63947cc4 61#include <sys/disk.h>\r
949f388f 62#define _XOPEN_SOURCE\r
63#ifndef _Bool\r
64 #define _Bool char // for clang debug\r
65#endif\r
66#else\r
67#include <termio.h>\r
68#include <sys/vfs.h>\r
63947cc4 69#include <linux/fs.h>\r
d18d8a1d 70#endif\r
949f388f 71\r
72#include <utime.h>\r
73\r
2b59fcd5 74#undef NTOHL\r
75#undef HTONL\r
76#undef NTOHS\r
77#undef HTONS\r
78#undef B0\r
79e4f2a5 79#undef CR3\r
2b59fcd5 80\r
81#include <PiPei.h>\r
82#include <Uefi.h>\r
83\r
84#include <Library/PeCoffLib.h>\r
85#include <Library/BaseLib.h>\r
86#include <Library/BaseMemoryLib.h>\r
b8800fc5 87#include <Library/MemoryAllocationLib.h>\r
2b59fcd5 88#include <Library/PrintLib.h>\r
89#include <Library/PcdLib.h>\r
90#include <Library/DebugLib.h>\r
91#include <Library/ReportStatusCodeLib.h>\r
92\r
93#include <Library/ThunkPpiList.h>\r
94#include <Library/ThunkProtocolList.h>\r
95#include <Library/PeiServicesLib.h>\r
96#include <Library/PeCoffGetEntryPointLib.h>\r
97#include <Library/EmuMagicPageLib.h>\r
98\r
99#include <Ppi/EmuThunk.h>\r
100#include <Ppi/StatusCode.h>\r
101\r
102#include <Protocol/SimplePointer.h>\r
103#include <Protocol/SimpleTextIn.h>\r
104#include <Protocol/SimpleTextInEx.h>\r
105#include <Protocol/UgaDraw.h>\r
106#include <Protocol/SimpleFileSystem.h>\r
107\r
108#include <Protocol/EmuThunk.h>\r
109#include <Protocol/EmuIoThunk.h>\r
110#include <Protocol/EmuGraphicsWindow.h>\r
111#include <Protocol/EmuThread.h>\r
112#include <Protocol/EmuBlockIo.h>\r
113#include <Protocol/EmuSnp.h>\r
114\r
115#include <Guid/FileInfo.h>\r
116#include <Guid/FileSystemInfo.h>\r
117#include <Guid/FileSystemVolumeLabelInfo.h>\r
118\r
119\r
949f388f 120#include "Gasket.h"\r
121\r
122\r
d18d8a1d 123#define STACK_SIZE 0x20000\r
949f388f 124\r
125typedef struct {\r
126 EFI_PHYSICAL_ADDRESS Address;\r
127 UINT64 Size;\r
128} EMU_FD_INFO;\r
129\r
130typedef struct {\r
131 EFI_PHYSICAL_ADDRESS Memory;\r
132 UINT64 Size;\r
133} EMU_SYSTEM_MEMORY;\r
134\r
135\r
136#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100\r
137\r
138typedef struct {\r
139 PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext;\r
140 VOID *ModHandle;\r
141} IMAGE_CONTEXT_TO_MOD_HANDLE;\r
142\r
143\r
144EFI_STATUS\r
145EFIAPI\r
146SecUnixPeiLoadFile (\r
d18d8a1d 147 VOID *Pe32Data,\r
148 EFI_PHYSICAL_ADDRESS *ImageAddress,\r
149 UINT64 *ImageSize,\r
150 EFI_PHYSICAL_ADDRESS *EntryPoint\r
949f388f 151 );\r
152\r
153int\r
154main (\r
155 IN int Argc,\r
156 IN char **Argv,\r
157 IN char **Envp\r
158 );\r
159\r
160VOID\r
161SecLoadFromCore (\r
162 IN UINTN LargestRegion,\r
163 IN UINTN LargestRegionSize,\r
164 IN UINTN BootFirmwareVolumeBase,\r
165 IN VOID *PeiCoreFile\r
166 );\r
167\r
168EFI_STATUS\r
169SecLoadFile (\r
170 IN VOID *Pe32Data,\r
171 IN EFI_PHYSICAL_ADDRESS *ImageAddress,\r
172 IN UINT64 *ImageSize,\r
173 IN EFI_PHYSICAL_ADDRESS *EntryPoint\r
174 );\r
175\r
176EFI_STATUS\r
177SecFfsFindPeiCore (\r
178 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
179 OUT VOID **Pe32Data\r
180 );\r
181\r
182EFI_STATUS\r
183SecFfsFindNextFile (\r
184 IN EFI_FV_FILETYPE SearchType,\r
185 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
186 IN OUT EFI_FFS_FILE_HEADER **FileHeader\r
187 );\r
188\r
189EFI_STATUS\r
190SecFfsFindSectionData (\r
191 IN EFI_SECTION_TYPE SectionType,\r
192 IN EFI_FFS_FILE_HEADER *FfsFileHeader,\r
193 IN OUT VOID **SectionData\r
194 );\r
195\r
196EFI_STATUS\r
197EFIAPI\r
198SecUnixPeCoffLoaderLoadAsDll (\r
199 IN CHAR8 *PdbFileName,\r
200 IN VOID **ImageEntryPoint,\r
201 OUT VOID **ModHandle\r
202 );\r
203\r
204EFI_STATUS\r
205EFIAPI\r
206SecUnixPeCoffLoaderFreeLibrary (\r
207 OUT VOID *ModHandle\r
208 );\r
209\r
210EFI_STATUS\r
949f388f 211SecUnixFdAddress (\r
212 IN UINTN Index,\r
213 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
214 IN OUT UINT64 *FdSize,\r
215 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
216 )\r
217;\r
218\r
219EFI_STATUS\r
220EFIAPI\r
221GasketSecUnixFdAddress (\r
222 IN UINTN Index,\r
223 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
224 IN OUT UINT64 *FdSize,\r
225 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
226 )\r
227;\r
228\r
229\r
230EFI_STATUS\r
231GetImageReadFunction (\r
232 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,\r
233 IN EFI_PHYSICAL_ADDRESS *TopOfMemory\r
234 );\r
235\r
236EFI_STATUS\r
237EFIAPI\r
238SecImageRead (\r
239 IN VOID *FileHandle,\r
240 IN UINTN FileOffset,\r
241 IN OUT UINTN *ReadSize,\r
242 OUT VOID *Buffer\r
243 );\r
244\r
245CHAR16 *\r
246AsciiToUnicode (\r
247 IN CHAR8 *Ascii,\r
248 IN UINTN *StrLen OPTIONAL\r
249 );\r
250\r
251UINTN\r
afa99fac 252CountSeparatorsInString (\r
949f388f 253 IN const CHAR16 *String,\r
afa99fac 254 IN CHAR16 Separator\r
949f388f 255 );\r
256\r
257EFI_STATUS\r
258EFIAPI\r
259SecTemporaryRamSupport (\r
260 IN CONST EFI_PEI_SERVICES **PeiServices,\r
261 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
262 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
263 IN UINTN CopySize\r
264 );\r
d18d8a1d 265\r
949f388f 266EFI_STATUS\r
267EFIAPI\r
268GasketSecTemporaryRamSupport (\r
269 IN CONST EFI_PEI_SERVICES **PeiServices,\r
270 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
271 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
272 IN UINTN CopySize\r
273 );\r
274\r
275\r
276RETURN_STATUS\r
277EFIAPI\r
278SecPeCoffGetEntryPoint (\r
279 IN VOID *Pe32Data,\r
280 IN OUT VOID **EntryPoint\r
281 );\r
282\r
283VOID\r
284EFIAPI\r
285SecPeCoffRelocateImageExtraAction (\r
286 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
287 );\r
288\r
289VOID\r
290EFIAPI\r
291SecPeCoffLoaderUnloadImageExtraAction (\r
292 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
293 );\r
294\r
295\r
296VOID\r
949f388f 297PeiSwitchStacks (\r
298 IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
299 IN VOID *Context1, OPTIONAL\r
300 IN VOID *Context2, OPTIONAL\r
949f388f 301 IN VOID *NewStack\r
302 );\r
303\r
304VOID\r
305SecInitThunkProtocol (\r
306 VOID\r
307 );\r
d18d8a1d 308\r
309\r
65e3f333 310EFI_PHYSICAL_ADDRESS *\r
311MapMemory (\r
312 INTN fd,\r
313 UINT64 length,\r
314 INTN prot,\r
315 INTN flags);\r
316\r
317EFI_STATUS\r
318MapFile (\r
319 IN CHAR8 *FileName,\r
320 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
321 OUT UINT64 *Length\r
322 );\r
323\r
8052c4a2 324EFI_STATUS\r
325MapFd0 (\r
326 IN CHAR8 *FileName,\r
327 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
328 OUT UINT64 *Length\r
329 );\r
330\r
1d7ac5a6 331BOOLEAN\r
332EfiSystemMemoryRange (\r
333 IN VOID *MemoryAddress\r
334 );\r
335\r
949f388f 336\r
1ef41207 337VOID SecSleep (UINT64 Nanoseconds);\r
949f388f 338VOID SecEnableInterrupt (VOID);\r
339VOID SecDisableInterrupt (VOID);\r
340BOOLEAN SecInterruptEanbled (VOID);\r
341\r
342\r
343extern EMU_THUNK_PROTOCOL gEmuThunkProtocol;\r
344extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo;\r
345extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo;\r
346extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo;\r
033d0e5f 347extern EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo;\r
2b59fcd5 348extern EMU_IO_THUNK_PROTOCOL gSnpThunkIo;\r
949f388f 349\r
350#endif\r