]> git.proxmox.com Git - mirror_edk2.git/blame - InOsEmuPkg/Unix/Sec/SecMain.h
Added generic EFIABI SEC to InOsEmuPkg. Add library to abstract FV cracking and remov...
[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
65e3f333 31#include <Library/PpiListLib.h>\r
32#include <Library/PeiServicesLib.h>\r
33#include <Library/PeCoffGetEntryPointLib.h>\r
949f388f 34\r
35#include <Ppi/EmuThunk.h>\r
36#include <Ppi/StatusCode.h>\r
949f388f 37\r
38#include <Protocol/SimplePointer.h>\r
39#include <Protocol/SimpleTextIn.h>\r
40#include <Protocol/SimpleTextInEx.h>\r
41#include <Protocol/UgaDraw.h>\r
42#include <Protocol/SimpleFileSystem.h>\r
43\r
44#include <Protocol/EmuThunk.h>\r
45#include <Protocol/EmuIoThunk.h>\r
46#include <Protocol/EmuGraphicsWindow.h>\r
47#include <Protocol/EmuPthreadThunk.h>\r
48\r
49#include <Guid/FileInfo.h>\r
50#include <Guid/FileSystemInfo.h>\r
51#include <Guid/FileSystemVolumeLabelInfo.h>\r
52\r
53#include <stdio.h>\r
54#include <stdlib.h>\r
55\r
56#include <sys/types.h>\r
57#include <sys/stat.h>\r
58#include <sys/termios.h>\r
59#include <sys/time.h>\r
60\r
61#if __CYGWIN__\r
62#include <sys/dirent.h>\r
63#else\r
64#include <sys/dir.h>\r
65#endif\r
66\r
67#include <sys/mman.h>\r
68#include <dlfcn.h>\r
69\r
70#include <unistd.h>\r
71#include <poll.h>\r
72#include <fcntl.h>\r
73#include <time.h>\r
74#include <signal.h>\r
75#include <errno.h>\r
76#include <string.h>\r
77#include <stdlib.h>\r
78#include <sys/ioctl.h>\r
79\r
80#include <sys/socket.h>\r
81#include <netdb.h>\r
82#include <netinet/in.h>\r
83#include <net/if.h>\r
84#include <ifaddrs.h>\r
85\r
86#ifdef __APPLE__\r
87#include <net/if_dl.h>\r
88#include <net/bpf.h>\r
89#include <sys/param.h>\r
90#include <sys/mount.h>\r
91#define _XOPEN_SOURCE\r
92#ifndef _Bool\r
93 #define _Bool char // for clang debug\r
94#endif\r
95#else\r
96#include <termio.h>\r
97#include <sys/vfs.h>\r
98#endif \r
99\r
100#include <utime.h>\r
101\r
102#include "Gasket.h"\r
103\r
104\r
105#define STACK_SIZE 0x20000 \r
106\r
107typedef struct {\r
108 EFI_PHYSICAL_ADDRESS Address;\r
109 UINT64 Size;\r
110} EMU_FD_INFO;\r
111\r
112typedef struct {\r
113 EFI_PHYSICAL_ADDRESS Memory;\r
114 UINT64 Size;\r
115} EMU_SYSTEM_MEMORY;\r
116\r
117\r
118#define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100\r
119\r
120typedef struct {\r
121 PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext;\r
122 VOID *ModHandle;\r
123} IMAGE_CONTEXT_TO_MOD_HANDLE;\r
124\r
125\r
126EFI_STATUS\r
127EFIAPI\r
128SecUnixPeiLoadFile (\r
129 VOID *Pe32Data, \r
130 EFI_PHYSICAL_ADDRESS *ImageAddress, \r
131 UINT64 *ImageSize, \r
132 EFI_PHYSICAL_ADDRESS *EntryPoint \r
133 );\r
134\r
135int\r
136main (\r
137 IN int Argc,\r
138 IN char **Argv,\r
139 IN char **Envp\r
140 );\r
141\r
142VOID\r
143SecLoadFromCore (\r
144 IN UINTN LargestRegion,\r
145 IN UINTN LargestRegionSize,\r
146 IN UINTN BootFirmwareVolumeBase,\r
147 IN VOID *PeiCoreFile\r
148 );\r
149\r
150EFI_STATUS\r
151SecLoadFile (\r
152 IN VOID *Pe32Data,\r
153 IN EFI_PHYSICAL_ADDRESS *ImageAddress,\r
154 IN UINT64 *ImageSize,\r
155 IN EFI_PHYSICAL_ADDRESS *EntryPoint\r
156 );\r
157\r
158EFI_STATUS\r
159SecFfsFindPeiCore (\r
160 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
161 OUT VOID **Pe32Data\r
162 );\r
163\r
164EFI_STATUS\r
165SecFfsFindNextFile (\r
166 IN EFI_FV_FILETYPE SearchType,\r
167 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
168 IN OUT EFI_FFS_FILE_HEADER **FileHeader\r
169 );\r
170\r
171EFI_STATUS\r
172SecFfsFindSectionData (\r
173 IN EFI_SECTION_TYPE SectionType,\r
174 IN EFI_FFS_FILE_HEADER *FfsFileHeader,\r
175 IN OUT VOID **SectionData\r
176 );\r
177\r
178EFI_STATUS\r
179EFIAPI\r
180SecUnixPeCoffLoaderLoadAsDll (\r
181 IN CHAR8 *PdbFileName,\r
182 IN VOID **ImageEntryPoint,\r
183 OUT VOID **ModHandle\r
184 );\r
185\r
186EFI_STATUS\r
187EFIAPI\r
188SecUnixPeCoffLoaderFreeLibrary (\r
189 OUT VOID *ModHandle\r
190 );\r
191\r
192EFI_STATUS\r
193EFIAPI\r
194SecUnixFdAddress (\r
195 IN UINTN Index,\r
196 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
197 IN OUT UINT64 *FdSize,\r
198 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
199 )\r
200;\r
201\r
202EFI_STATUS\r
203EFIAPI\r
204GasketSecUnixFdAddress (\r
205 IN UINTN Index,\r
206 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
207 IN OUT UINT64 *FdSize,\r
208 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
209 )\r
210;\r
211\r
212\r
213EFI_STATUS\r
214GetImageReadFunction (\r
215 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,\r
216 IN EFI_PHYSICAL_ADDRESS *TopOfMemory\r
217 );\r
218\r
219EFI_STATUS\r
220EFIAPI\r
221SecImageRead (\r
222 IN VOID *FileHandle,\r
223 IN UINTN FileOffset,\r
224 IN OUT UINTN *ReadSize,\r
225 OUT VOID *Buffer\r
226 );\r
227\r
228CHAR16 *\r
229AsciiToUnicode (\r
230 IN CHAR8 *Ascii,\r
231 IN UINTN *StrLen OPTIONAL\r
232 );\r
233\r
234UINTN\r
235CountSeperatorsInString (\r
236 IN const CHAR16 *String,\r
237 IN CHAR16 Seperator\r
238 );\r
239\r
240EFI_STATUS\r
241EFIAPI\r
242SecTemporaryRamSupport (\r
243 IN CONST EFI_PEI_SERVICES **PeiServices,\r
244 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
245 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
246 IN UINTN CopySize\r
247 );\r
248 \r
249EFI_STATUS\r
250EFIAPI\r
251GasketSecTemporaryRamSupport (\r
252 IN CONST EFI_PEI_SERVICES **PeiServices,\r
253 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
254 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
255 IN UINTN CopySize\r
256 );\r
257\r
258\r
259RETURN_STATUS\r
260EFIAPI\r
261SecPeCoffGetEntryPoint (\r
262 IN VOID *Pe32Data,\r
263 IN OUT VOID **EntryPoint\r
264 );\r
265\r
266VOID\r
267EFIAPI\r
268SecPeCoffRelocateImageExtraAction (\r
269 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
270 );\r
271\r
272VOID\r
273EFIAPI\r
274SecPeCoffLoaderUnloadImageExtraAction (\r
275 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
276 );\r
277\r
278\r
279VOID\r
280EFIAPI\r
281PeiSwitchStacks (\r
282 IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
283 IN VOID *Context1, OPTIONAL\r
284 IN VOID *Context2, OPTIONAL\r
285 IN VOID *Context3, OPTIONAL\r
286 IN VOID *NewStack\r
287 );\r
288\r
289VOID\r
290SecInitThunkProtocol (\r
291 VOID\r
292 );\r
65e3f333 293 \r
949f388f 294 \r
65e3f333 295EFI_PHYSICAL_ADDRESS *\r
296MapMemory (\r
297 INTN fd,\r
298 UINT64 length,\r
299 INTN prot,\r
300 INTN flags);\r
301\r
302EFI_STATUS\r
303MapFile (\r
304 IN CHAR8 *FileName,\r
305 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
306 OUT UINT64 *Length\r
307 );\r
308\r
309 \r
949f388f 310\r
311VOID SecSleep (UINT64 Milliseconds);\r
312VOID SecEnableInterrupt (VOID);\r
313VOID SecDisableInterrupt (VOID);\r
314BOOLEAN SecInterruptEanbled (VOID);\r
315\r
316\r
317extern EMU_THUNK_PROTOCOL gEmuThunkProtocol;\r
318extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo;\r
319extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo;\r
320extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo;\r
321\r
322\r
323#endif\r