]> git.proxmox.com Git - mirror_edk2.git/blame - InOsEmuPkg/Unix/Sec/SecMain.h
add those missing device path nodes into the union structure of EFI_DEV_PATH and...
[mirror_edk2.git] / InOsEmuPkg / Unix / Sec / SecMain.h
CommitLineData
949f388f 1/*++ @file\r
2\r
3Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
4Portions copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>\r
5This program and the accompanying materials \r
6are licensed and made available under the terms and conditions of the BSD License \r
7which accompanies this distribution. The full text of the license may be found at \r
8http://opensource.org/licenses/bsd-license.php \r
9 \r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12\r
13**/\r
14\r
15#ifndef _SEC_MAIN_H__\r
16#define _SEC_MAIN_H__\r
17\r
18#include <PiPei.h>\r
19#include <Uefi.h>\r
20\r
21#include <Library/PeCoffLib.h>\r
22#include <Library/BaseLib.h>\r
23#include <Library/BaseMemoryLib.h>\r
24#include <Library/PrintLib.h>\r
25#include <Library/PcdLib.h>\r
26#include <Library/DebugLib.h>\r
27#include <Library/ReportStatusCodeLib.h>\r
28\r
29#include <Library/ThunkPpiList.h>\r
30#include <Library/ThunkProtocolList.h>\r
31\r
32#include <Ppi/EmuThunk.h>\r
33#include <Ppi/StatusCode.h>\r
34#include <Ppi/TemporaryRamSupport.h>\r
35#include <Ppi/EmuPeiServicesTableUpdate.h>\r
36\r
37#include <Protocol/SimplePointer.h>\r
38#include <Protocol/SimpleTextIn.h>\r
39#include <Protocol/SimpleTextInEx.h>\r
40#include <Protocol/UgaDraw.h>\r
41#include <Protocol/SimpleFileSystem.h>\r
42\r
43#include <Protocol/EmuThunk.h>\r
44#include <Protocol/EmuIoThunk.h>\r
45#include <Protocol/EmuGraphicsWindow.h>\r
46#include <Protocol/EmuPthreadThunk.h>\r
47\r
48#include <Guid/FileInfo.h>\r
49#include <Guid/FileSystemInfo.h>\r
50#include <Guid/FileSystemVolumeLabelInfo.h>\r
51\r
52#include <stdio.h>\r
53#include <stdlib.h>\r
54\r
55#include <sys/types.h>\r
56#include <sys/stat.h>\r
57#include <sys/termios.h>\r
58#include <sys/time.h>\r
59\r
60#if __CYGWIN__\r
61#include <sys/dirent.h>\r
62#else\r
63#include <sys/dir.h>\r
64#endif\r
65\r
66#include <sys/mman.h>\r
67#include <dlfcn.h>\r
68\r
69#include <unistd.h>\r
70#include <poll.h>\r
71#include <fcntl.h>\r
72#include <time.h>\r
73#include <signal.h>\r
74#include <errno.h>\r
75#include <string.h>\r
76#include <stdlib.h>\r
77#include <sys/ioctl.h>\r
78\r
79#include <sys/socket.h>\r
80#include <netdb.h>\r
81#include <netinet/in.h>\r
82#include <net/if.h>\r
83#include <ifaddrs.h>\r
84\r
85#ifdef __APPLE__\r
86#include <net/if_dl.h>\r
87#include <net/bpf.h>\r
88#include <sys/param.h>\r
89#include <sys/mount.h>\r
90#define _XOPEN_SOURCE\r
91#ifndef _Bool\r
92 #define _Bool char // for clang debug\r
93#endif\r
94#else\r
95#include <termio.h>\r
96#include <sys/vfs.h>\r
97#endif \r
98\r
99#include <utime.h>\r
100\r
101#include "Gasket.h"\r
102\r
103\r
104#define STACK_SIZE 0x20000 \r
105\r
106typedef struct {\r
107 EFI_PHYSICAL_ADDRESS Address;\r
108 UINT64 Size;\r
109} EMU_FD_INFO;\r
110\r
111typedef struct {\r
112 EFI_PHYSICAL_ADDRESS Memory;\r
113 UINT64 Size;\r
114} EMU_SYSTEM_MEMORY;\r
115\r
116\r
117#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100\r
118\r
119typedef struct {\r
120 PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext;\r
121 VOID *ModHandle;\r
122} IMAGE_CONTEXT_TO_MOD_HANDLE;\r
123\r
124\r
125EFI_STATUS\r
126EFIAPI\r
127SecUnixPeiLoadFile (\r
128 VOID *Pe32Data, \r
129 EFI_PHYSICAL_ADDRESS *ImageAddress, \r
130 UINT64 *ImageSize, \r
131 EFI_PHYSICAL_ADDRESS *EntryPoint \r
132 );\r
133\r
134int\r
135main (\r
136 IN int Argc,\r
137 IN char **Argv,\r
138 IN char **Envp\r
139 );\r
140\r
141VOID\r
142SecLoadFromCore (\r
143 IN UINTN LargestRegion,\r
144 IN UINTN LargestRegionSize,\r
145 IN UINTN BootFirmwareVolumeBase,\r
146 IN VOID *PeiCoreFile\r
147 );\r
148\r
149EFI_STATUS\r
150SecLoadFile (\r
151 IN VOID *Pe32Data,\r
152 IN EFI_PHYSICAL_ADDRESS *ImageAddress,\r
153 IN UINT64 *ImageSize,\r
154 IN EFI_PHYSICAL_ADDRESS *EntryPoint\r
155 );\r
156\r
157EFI_STATUS\r
158SecFfsFindPeiCore (\r
159 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
160 OUT VOID **Pe32Data\r
161 );\r
162\r
163EFI_STATUS\r
164SecFfsFindNextFile (\r
165 IN EFI_FV_FILETYPE SearchType,\r
166 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
167 IN OUT EFI_FFS_FILE_HEADER **FileHeader\r
168 );\r
169\r
170EFI_STATUS\r
171SecFfsFindSectionData (\r
172 IN EFI_SECTION_TYPE SectionType,\r
173 IN EFI_FFS_FILE_HEADER *FfsFileHeader,\r
174 IN OUT VOID **SectionData\r
175 );\r
176\r
177EFI_STATUS\r
178EFIAPI\r
179SecUnixPeCoffLoaderLoadAsDll (\r
180 IN CHAR8 *PdbFileName,\r
181 IN VOID **ImageEntryPoint,\r
182 OUT VOID **ModHandle\r
183 );\r
184\r
185EFI_STATUS\r
186EFIAPI\r
187SecUnixPeCoffLoaderFreeLibrary (\r
188 OUT VOID *ModHandle\r
189 );\r
190\r
191EFI_STATUS\r
192EFIAPI\r
193SecUnixFdAddress (\r
194 IN UINTN Index,\r
195 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
196 IN OUT UINT64 *FdSize,\r
197 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
198 )\r
199;\r
200\r
201EFI_STATUS\r
202EFIAPI\r
203GasketSecUnixFdAddress (\r
204 IN UINTN Index,\r
205 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
206 IN OUT UINT64 *FdSize,\r
207 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
208 )\r
209;\r
210\r
211\r
212EFI_STATUS\r
213GetImageReadFunction (\r
214 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,\r
215 IN EFI_PHYSICAL_ADDRESS *TopOfMemory\r
216 );\r
217\r
218EFI_STATUS\r
219EFIAPI\r
220SecImageRead (\r
221 IN VOID *FileHandle,\r
222 IN UINTN FileOffset,\r
223 IN OUT UINTN *ReadSize,\r
224 OUT VOID *Buffer\r
225 );\r
226\r
227CHAR16 *\r
228AsciiToUnicode (\r
229 IN CHAR8 *Ascii,\r
230 IN UINTN *StrLen OPTIONAL\r
231 );\r
232\r
233UINTN\r
234CountSeperatorsInString (\r
235 IN const CHAR16 *String,\r
236 IN CHAR16 Seperator\r
237 );\r
238\r
239EFI_STATUS\r
240EFIAPI\r
241SecTemporaryRamSupport (\r
242 IN CONST EFI_PEI_SERVICES **PeiServices,\r
243 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
244 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
245 IN UINTN CopySize\r
246 );\r
247 \r
248EFI_STATUS\r
249EFIAPI\r
250GasketSecTemporaryRamSupport (\r
251 IN CONST EFI_PEI_SERVICES **PeiServices,\r
252 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
253 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
254 IN UINTN CopySize\r
255 );\r
256\r
257\r
258RETURN_STATUS\r
259EFIAPI\r
260SecPeCoffGetEntryPoint (\r
261 IN VOID *Pe32Data,\r
262 IN OUT VOID **EntryPoint\r
263 );\r
264\r
265VOID\r
266EFIAPI\r
267SecPeCoffRelocateImageExtraAction (\r
268 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
269 );\r
270\r
271VOID\r
272EFIAPI\r
273SecPeCoffLoaderUnloadImageExtraAction (\r
274 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
275 );\r
276\r
277\r
278VOID\r
279EFIAPI\r
280PeiSwitchStacks (\r
281 IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
282 IN VOID *Context1, OPTIONAL\r
283 IN VOID *Context2, OPTIONAL\r
284 IN VOID *Context3, OPTIONAL\r
285 IN VOID *NewStack\r
286 );\r
287\r
288VOID\r
289SecInitThunkProtocol (\r
290 VOID\r
291 );\r
292 \r
293\r
294VOID SecSleep (UINT64 Milliseconds);\r
295VOID SecEnableInterrupt (VOID);\r
296VOID SecDisableInterrupt (VOID);\r
297BOOLEAN SecInterruptEanbled (VOID);\r
298\r
299\r
300extern EMU_THUNK_PROTOCOL gEmuThunkProtocol;\r
301extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo;\r
302extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo;\r
303extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo;\r
304\r
305\r
306#endif\r