]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/Unix/Host/Host.h
EmbeddedPkg: Change OPTIONAL keyword usage style
[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
33#include <sys/dirent.h>\r
34#else\r
35#include <sys/dir.h>\r
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
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
63947cc4 63#include <sys/disk.h>\r
949f388f 64#define _XOPEN_SOURCE\r
65#ifndef _Bool\r
66 #define _Bool char // for clang debug\r
67#endif\r
68#else\r
69#include <termio.h>\r
70#include <sys/vfs.h>\r
63947cc4 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
123\r
949f388f 124#include "Gasket.h"\r
125\r
126\r
d18d8a1d 127#define STACK_SIZE 0x20000\r
949f388f 128\r
129typedef struct {\r
130 EFI_PHYSICAL_ADDRESS Address;\r
131 UINT64 Size;\r
132} EMU_FD_INFO;\r
133\r
134typedef struct {\r
135 EFI_PHYSICAL_ADDRESS Memory;\r
136 UINT64 Size;\r
137} EMU_SYSTEM_MEMORY;\r
138\r
139\r
140#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100\r
141\r
142typedef struct {\r
143 PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext;\r
144 VOID *ModHandle;\r
145} IMAGE_CONTEXT_TO_MOD_HANDLE;\r
146\r
147\r
148EFI_STATUS\r
149EFIAPI\r
150SecUnixPeiLoadFile (\r
d18d8a1d 151 VOID *Pe32Data,\r
152 EFI_PHYSICAL_ADDRESS *ImageAddress,\r
153 UINT64 *ImageSize,\r
154 EFI_PHYSICAL_ADDRESS *EntryPoint\r
949f388f 155 );\r
156\r
157int\r
158main (\r
159 IN int Argc,\r
160 IN char **Argv,\r
161 IN char **Envp\r
162 );\r
163\r
164VOID\r
165SecLoadFromCore (\r
166 IN UINTN LargestRegion,\r
167 IN UINTN LargestRegionSize,\r
168 IN UINTN BootFirmwareVolumeBase,\r
169 IN VOID *PeiCoreFile\r
170 );\r
171\r
172EFI_STATUS\r
173SecLoadFile (\r
174 IN VOID *Pe32Data,\r
175 IN EFI_PHYSICAL_ADDRESS *ImageAddress,\r
176 IN UINT64 *ImageSize,\r
177 IN EFI_PHYSICAL_ADDRESS *EntryPoint\r
178 );\r
179\r
180EFI_STATUS\r
181SecFfsFindPeiCore (\r
182 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
183 OUT VOID **Pe32Data\r
184 );\r
185\r
186EFI_STATUS\r
187SecFfsFindNextFile (\r
188 IN EFI_FV_FILETYPE SearchType,\r
189 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
190 IN OUT EFI_FFS_FILE_HEADER **FileHeader\r
191 );\r
192\r
193EFI_STATUS\r
194SecFfsFindSectionData (\r
195 IN EFI_SECTION_TYPE SectionType,\r
196 IN EFI_FFS_FILE_HEADER *FfsFileHeader,\r
197 IN OUT VOID **SectionData\r
198 );\r
199\r
200EFI_STATUS\r
201EFIAPI\r
202SecUnixPeCoffLoaderLoadAsDll (\r
203 IN CHAR8 *PdbFileName,\r
204 IN VOID **ImageEntryPoint,\r
205 OUT VOID **ModHandle\r
206 );\r
207\r
208EFI_STATUS\r
209EFIAPI\r
210SecUnixPeCoffLoaderFreeLibrary (\r
211 OUT VOID *ModHandle\r
212 );\r
213\r
214EFI_STATUS\r
949f388f 215SecUnixFdAddress (\r
216 IN UINTN Index,\r
217 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
218 IN OUT UINT64 *FdSize,\r
219 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
220 )\r
221;\r
222\r
223EFI_STATUS\r
224EFIAPI\r
225GasketSecUnixFdAddress (\r
226 IN UINTN Index,\r
227 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
228 IN OUT UINT64 *FdSize,\r
229 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
230 )\r
231;\r
232\r
233\r
234EFI_STATUS\r
235GetImageReadFunction (\r
236 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,\r
237 IN EFI_PHYSICAL_ADDRESS *TopOfMemory\r
238 );\r
239\r
240EFI_STATUS\r
241EFIAPI\r
242SecImageRead (\r
243 IN VOID *FileHandle,\r
244 IN UINTN FileOffset,\r
245 IN OUT UINTN *ReadSize,\r
246 OUT VOID *Buffer\r
247 );\r
248\r
249CHAR16 *\r
250AsciiToUnicode (\r
251 IN CHAR8 *Ascii,\r
252 IN UINTN *StrLen OPTIONAL\r
253 );\r
254\r
255UINTN\r
afa99fac 256CountSeparatorsInString (\r
949f388f 257 IN const CHAR16 *String,\r
afa99fac 258 IN CHAR16 Separator\r
949f388f 259 );\r
260\r
261EFI_STATUS\r
262EFIAPI\r
263SecTemporaryRamSupport (\r
264 IN CONST EFI_PEI_SERVICES **PeiServices,\r
265 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
266 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
267 IN UINTN CopySize\r
268 );\r
d18d8a1d 269\r
949f388f 270EFI_STATUS\r
271EFIAPI\r
272GasketSecTemporaryRamSupport (\r
273 IN CONST EFI_PEI_SERVICES **PeiServices,\r
274 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
275 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
276 IN UINTN CopySize\r
277 );\r
278\r
279\r
280RETURN_STATUS\r
281EFIAPI\r
282SecPeCoffGetEntryPoint (\r
283 IN VOID *Pe32Data,\r
284 IN OUT VOID **EntryPoint\r
285 );\r
286\r
287VOID\r
288EFIAPI\r
289SecPeCoffRelocateImageExtraAction (\r
290 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
291 );\r
292\r
293VOID\r
294EFIAPI\r
295SecPeCoffLoaderUnloadImageExtraAction (\r
296 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
297 );\r
298\r
299\r
300VOID\r
949f388f 301PeiSwitchStacks (\r
302 IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
303 IN VOID *Context1, OPTIONAL\r
304 IN VOID *Context2, OPTIONAL\r
949f388f 305 IN VOID *NewStack\r
306 );\r
307\r
308VOID\r
309SecInitThunkProtocol (\r
310 VOID\r
311 );\r
d18d8a1d 312\r
313\r
65e3f333 314EFI_PHYSICAL_ADDRESS *\r
315MapMemory (\r
316 INTN fd,\r
317 UINT64 length,\r
318 INTN prot,\r
319 INTN flags);\r
320\r
321EFI_STATUS\r
322MapFile (\r
323 IN CHAR8 *FileName,\r
324 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
325 OUT UINT64 *Length\r
326 );\r
327\r
8052c4a2 328EFI_STATUS\r
329MapFd0 (\r
330 IN CHAR8 *FileName,\r
331 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
332 OUT UINT64 *Length\r
333 );\r
334\r
1d7ac5a6 335BOOLEAN\r
336EfiSystemMemoryRange (\r
337 IN VOID *MemoryAddress\r
338 );\r
339\r
949f388f 340\r
1ef41207 341VOID SecSleep (UINT64 Nanoseconds);\r
949f388f 342VOID SecEnableInterrupt (VOID);\r
343VOID SecDisableInterrupt (VOID);\r
344BOOLEAN SecInterruptEanbled (VOID);\r
345\r
346\r
347extern EMU_THUNK_PROTOCOL gEmuThunkProtocol;\r
348extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo;\r
349extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo;\r
350extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo;\r
033d0e5f 351extern EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo;\r
2b59fcd5 352extern EMU_IO_THUNK_PROTOCOL gSnpThunkIo;\r
949f388f 353\r
354#endif\r