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