]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/Unix/Host/Host.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmulatorPkg / Unix / Host / Host.h
CommitLineData
949f388f 1/*++ @file\r
2\r
b98504b5 3Copyright (c) 2006 - 2019, 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
b98504b5 17#define NTOHLL _UNIX_EFI_NAME_MANGLE_NTOHLL_\r
2b59fcd5 18#define HTONL _UNIX_EFI_NAME_MANGLE_HTONL_\r
b98504b5 19#define HTONLL _UNIX_EFI_NAME_MANGLE_HTONLL_\r
2b59fcd5 20#define NTOHS _UNIX_EFI_NAME_MANGLE_NTOHS_\r
21#define HTONS _UNIX_EFI_NAME_MANGLE_HTOHS_\r
22#define B0 _UNIX_EFI_NAME_MANGLE_B0_\r
949f388f 23\r
24#include <stdio.h>\r
25#include <stdlib.h>\r
26\r
27#include <sys/types.h>\r
28#include <sys/stat.h>\r
29#include <sys/termios.h>\r
30#include <sys/time.h>\r
31\r
32#if __CYGWIN__\r
a550d468 33 #include <sys/dirent.h>\r
949f388f 34#else\r
a550d468 35 #include <sys/dir.h>\r
949f388f 36#endif\r
37\r
38#include <sys/mman.h>\r
39#include <dlfcn.h>\r
40\r
41#include <unistd.h>\r
42#include <poll.h>\r
43#include <fcntl.h>\r
44#include <time.h>\r
45#include <signal.h>\r
46#include <errno.h>\r
47#include <string.h>\r
48#include <stdlib.h>\r
49#include <sys/ioctl.h>\r
63947cc4 50#include <sys/statvfs.h>\r
949f388f 51\r
52#include <sys/socket.h>\r
53#include <netdb.h>\r
54#include <netinet/in.h>\r
55#include <net/if.h>\r
56#include <ifaddrs.h>\r
57\r
58#ifdef __APPLE__\r
a550d468
MK
59 #include <net/if_dl.h>\r
60 #include <net/bpf.h>\r
61 #include <sys/param.h>\r
62 #include <sys/mount.h>\r
63 #include <sys/disk.h>\r
949f388f 64#define _XOPEN_SOURCE\r
a550d468
MK
65 #ifndef _Bool\r
66#define _Bool char // for clang debug\r
67 #endif\r
949f388f 68#else\r
a550d468
MK
69 #include <termio.h>\r
70 #include <sys/vfs.h>\r
71 #include <linux/fs.h>\r
d18d8a1d 72#endif\r
949f388f 73\r
74#include <utime.h>\r
75\r
2b59fcd5 76#undef NTOHL\r
b98504b5 77#undef NTOHLL\r
2b59fcd5 78#undef HTONL\r
b98504b5 79#undef HTONLL\r
2b59fcd5 80#undef NTOHS\r
81#undef HTONS\r
82#undef B0\r
79e4f2a5 83#undef CR3\r
2b59fcd5 84\r
85#include <PiPei.h>\r
86#include <Uefi.h>\r
87\r
88#include <Library/PeCoffLib.h>\r
89#include <Library/BaseLib.h>\r
90#include <Library/BaseMemoryLib.h>\r
b8800fc5 91#include <Library/MemoryAllocationLib.h>\r
2b59fcd5 92#include <Library/PrintLib.h>\r
93#include <Library/PcdLib.h>\r
94#include <Library/DebugLib.h>\r
95#include <Library/ReportStatusCodeLib.h>\r
96\r
97#include <Library/ThunkPpiList.h>\r
98#include <Library/ThunkProtocolList.h>\r
99#include <Library/PeiServicesLib.h>\r
100#include <Library/PeCoffGetEntryPointLib.h>\r
101#include <Library/EmuMagicPageLib.h>\r
102\r
103#include <Ppi/EmuThunk.h>\r
104#include <Ppi/StatusCode.h>\r
105\r
106#include <Protocol/SimplePointer.h>\r
107#include <Protocol/SimpleTextIn.h>\r
108#include <Protocol/SimpleTextInEx.h>\r
109#include <Protocol/UgaDraw.h>\r
110#include <Protocol/SimpleFileSystem.h>\r
111\r
112#include <Protocol/EmuThunk.h>\r
113#include <Protocol/EmuIoThunk.h>\r
114#include <Protocol/EmuGraphicsWindow.h>\r
115#include <Protocol/EmuThread.h>\r
116#include <Protocol/EmuBlockIo.h>\r
117#include <Protocol/EmuSnp.h>\r
118\r
119#include <Guid/FileInfo.h>\r
120#include <Guid/FileSystemInfo.h>\r
121#include <Guid/FileSystemVolumeLabelInfo.h>\r
122\r
949f388f 123#include "Gasket.h"\r
124\r
a550d468 125#define STACK_SIZE 0x20000\r
949f388f 126\r
127typedef struct {\r
a550d468
MK
128 EFI_PHYSICAL_ADDRESS Address;\r
129 UINT64 Size;\r
949f388f 130} EMU_FD_INFO;\r
131\r
132typedef struct {\r
a550d468
MK
133 EFI_PHYSICAL_ADDRESS Memory;\r
134 UINT64 Size;\r
949f388f 135} EMU_SYSTEM_MEMORY;\r
136\r
a550d468 137#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100\r
949f388f 138\r
139typedef struct {\r
a550d468
MK
140 PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext;\r
141 VOID *ModHandle;\r
949f388f 142} IMAGE_CONTEXT_TO_MOD_HANDLE;\r
143\r
949f388f 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
a550d468
MK
162 IN UINTN LargestRegion,\r
163 IN UINTN LargestRegionSize,\r
164 IN UINTN BootFirmwareVolumeBase,\r
165 IN VOID *PeiCoreFile\r
949f388f 166 );\r
167\r
168EFI_STATUS\r
169SecLoadFile (\r
a550d468
MK
170 IN VOID *Pe32Data,\r
171 IN EFI_PHYSICAL_ADDRESS *ImageAddress,\r
172 IN UINT64 *ImageSize,\r
173 IN EFI_PHYSICAL_ADDRESS *EntryPoint\r
949f388f 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
a550d468
MK
191 IN EFI_SECTION_TYPE SectionType,\r
192 IN EFI_FFS_FILE_HEADER *FfsFileHeader,\r
193 IN OUT VOID **SectionData\r
949f388f 194 );\r
195\r
196EFI_STATUS\r
197EFIAPI\r
198SecUnixPeCoffLoaderLoadAsDll (\r
a550d468
MK
199 IN CHAR8 *PdbFileName,\r
200 IN VOID **ImageEntryPoint,\r
201 OUT VOID **ModHandle\r
949f388f 202 );\r
203\r
204EFI_STATUS\r
205EFIAPI\r
206SecUnixPeCoffLoaderFreeLibrary (\r
a550d468 207 OUT VOID *ModHandle\r
949f388f 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
949f388f 229EFI_STATUS\r
230GetImageReadFunction (\r
a550d468
MK
231 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,\r
232 IN EFI_PHYSICAL_ADDRESS *TopOfMemory\r
949f388f 233 );\r
234\r
235EFI_STATUS\r
236EFIAPI\r
237SecImageRead (\r
a550d468
MK
238 IN VOID *FileHandle,\r
239 IN UINTN FileOffset,\r
240 IN OUT UINTN *ReadSize,\r
241 OUT VOID *Buffer\r
949f388f 242 );\r
243\r
244CHAR16 *\r
245AsciiToUnicode (\r
a550d468
MK
246 IN CHAR8 *Ascii,\r
247 IN UINTN *StrLen OPTIONAL\r
949f388f 248 );\r
249\r
250UINTN\r
afa99fac 251CountSeparatorsInString (\r
a550d468
MK
252 IN const CHAR16 *String,\r
253 IN CHAR16 Separator\r
949f388f 254 );\r
255\r
256EFI_STATUS\r
257EFIAPI\r
258SecTemporaryRamSupport (\r
a550d468
MK
259 IN CONST EFI_PEI_SERVICES **PeiServices,\r
260 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
261 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
262 IN UINTN CopySize\r
949f388f 263 );\r
d18d8a1d 264\r
949f388f 265EFI_STATUS\r
266EFIAPI\r
267GasketSecTemporaryRamSupport (\r
a550d468
MK
268 IN CONST EFI_PEI_SERVICES **PeiServices,\r
269 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
270 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
271 IN UINTN CopySize\r
949f388f 272 );\r
273\r
949f388f 274RETURN_STATUS\r
275EFIAPI\r
276SecPeCoffGetEntryPoint (\r
277 IN VOID *Pe32Data,\r
278 IN OUT VOID **EntryPoint\r
279 );\r
280\r
281VOID\r
282EFIAPI\r
283SecPeCoffRelocateImageExtraAction (\r
284 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
285 );\r
286\r
287VOID\r
288EFIAPI\r
289SecPeCoffLoaderUnloadImageExtraAction (\r
290 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
291 );\r
292\r
949f388f 293VOID\r
949f388f 294PeiSwitchStacks (\r
295 IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
c69fc80c
MK
296 IN VOID *Context1 OPTIONAL,\r
297 IN VOID *Context2 OPTIONAL,\r
949f388f 298 IN VOID *NewStack\r
299 );\r
300\r
301VOID\r
302SecInitThunkProtocol (\r
303 VOID\r
304 );\r
d18d8a1d 305\r
65e3f333 306EFI_PHYSICAL_ADDRESS *\r
307MapMemory (\r
a550d468
MK
308 INTN fd,\r
309 UINT64 length,\r
310 INTN prot,\r
311 INTN flags\r
312 );\r
65e3f333 313\r
314EFI_STATUS\r
315MapFile (\r
316 IN CHAR8 *FileName,\r
317 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
318 OUT UINT64 *Length\r
319 );\r
320\r
8052c4a2 321EFI_STATUS\r
322MapFd0 (\r
323 IN CHAR8 *FileName,\r
324 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
325 OUT UINT64 *Length\r
326 );\r
327\r
1d7ac5a6 328BOOLEAN\r
329EfiSystemMemoryRange (\r
a550d468
MK
330 IN VOID *MemoryAddress\r
331 );\r
332\r
333VOID\r
334SecSleep (\r
335 UINT64 Nanoseconds\r
1d7ac5a6 336 );\r
337\r
a550d468
MK
338VOID\r
339SecEnableInterrupt (\r
340 VOID\r
341 );\r
949f388f 342\r
a550d468
MK
343VOID\r
344SecDisableInterrupt (\r
345 VOID\r
346 );\r
949f388f 347\r
a550d468
MK
348BOOLEAN\r
349SecInterruptEanbled (\r
350 VOID\r
351 );\r
949f388f 352\r
a550d468
MK
353extern EMU_THUNK_PROTOCOL gEmuThunkProtocol;\r
354extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo;\r
355extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo;\r
356extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo;\r
357extern EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo;\r
358extern EMU_IO_THUNK_PROTOCOL gSnpThunkIo;\r
949f388f 359\r
360#endif\r