]> git.proxmox.com Git - mirror_edk2.git/blame - InOsEmuPkg/Unix/Sec/SecMain.h
InOsEmuPkg/Unix/Sec: Fix EFIAPI usage inconsistencies
[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
949f388f 216SecUnixFdAddress (\r
217 IN UINTN Index,\r
218 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
219 IN OUT UINT64 *FdSize,\r
220 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
221 )\r
222;\r
223\r
224EFI_STATUS\r
225EFIAPI\r
226GasketSecUnixFdAddress (\r
227 IN UINTN Index,\r
228 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,\r
229 IN OUT UINT64 *FdSize,\r
230 IN OUT EFI_PHYSICAL_ADDRESS *FixUp\r
231 )\r
232;\r
233\r
234\r
235EFI_STATUS\r
236GetImageReadFunction (\r
237 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,\r
238 IN EFI_PHYSICAL_ADDRESS *TopOfMemory\r
239 );\r
240\r
241EFI_STATUS\r
242EFIAPI\r
243SecImageRead (\r
244 IN VOID *FileHandle,\r
245 IN UINTN FileOffset,\r
246 IN OUT UINTN *ReadSize,\r
247 OUT VOID *Buffer\r
248 );\r
249\r
250CHAR16 *\r
251AsciiToUnicode (\r
252 IN CHAR8 *Ascii,\r
253 IN UINTN *StrLen OPTIONAL\r
254 );\r
255\r
256UINTN\r
257CountSeperatorsInString (\r
258 IN const CHAR16 *String,\r
259 IN CHAR16 Seperator\r
260 );\r
261\r
262EFI_STATUS\r
263EFIAPI\r
264SecTemporaryRamSupport (\r
265 IN CONST EFI_PEI_SERVICES **PeiServices,\r
266 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
267 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
268 IN UINTN CopySize\r
269 );\r
270 \r
271EFI_STATUS\r
272EFIAPI\r
273GasketSecTemporaryRamSupport (\r
274 IN CONST EFI_PEI_SERVICES **PeiServices,\r
275 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,\r
276 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,\r
277 IN UINTN CopySize\r
278 );\r
279\r
280\r
281RETURN_STATUS\r
282EFIAPI\r
283SecPeCoffGetEntryPoint (\r
284 IN VOID *Pe32Data,\r
285 IN OUT VOID **EntryPoint\r
286 );\r
287\r
288VOID\r
289EFIAPI\r
290SecPeCoffRelocateImageExtraAction (\r
291 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
292 );\r
293\r
294VOID\r
295EFIAPI\r
296SecPeCoffLoaderUnloadImageExtraAction (\r
297 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
298 );\r
299\r
300\r
301VOID\r
949f388f 302PeiSwitchStacks (\r
303 IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
304 IN VOID *Context1, OPTIONAL\r
305 IN VOID *Context2, OPTIONAL\r
949f388f 306 IN VOID *NewStack\r
307 );\r
308\r
309VOID\r
310SecInitThunkProtocol (\r
311 VOID\r
312 );\r
65e3f333 313 \r
949f388f 314 \r
65e3f333 315EFI_PHYSICAL_ADDRESS *\r
316MapMemory (\r
317 INTN fd,\r
318 UINT64 length,\r
319 INTN prot,\r
320 INTN flags);\r
321\r
322EFI_STATUS\r
323MapFile (\r
324 IN CHAR8 *FileName,\r
325 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
326 OUT UINT64 *Length\r
327 );\r
328\r
8052c4a2 329EFI_STATUS\r
330MapFd0 (\r
331 IN CHAR8 *FileName,\r
332 IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,\r
333 OUT UINT64 *Length\r
334 );\r
335\r
65e3f333 336 \r
949f388f 337\r
338VOID SecSleep (UINT64 Milliseconds);\r
339VOID SecEnableInterrupt (VOID);\r
340VOID SecDisableInterrupt (VOID);\r
341BOOLEAN SecInterruptEanbled (VOID);\r
342\r
343\r
344extern EMU_THUNK_PROTOCOL gEmuThunkProtocol;\r
345extern EMU_IO_THUNK_PROTOCOL gX11ThunkIo;\r
346extern EMU_IO_THUNK_PROTOCOL gPosixFileSystemThunkIo;\r
347extern EMU_IO_THUNK_PROTOCOL gPthreadThunkIo;\r
033d0e5f 348extern EMU_IO_THUNK_PROTOCOL gBlockIoThunkIo;\r
2b59fcd5 349extern EMU_IO_THUNK_PROTOCOL gSnpThunkIo;\r
949f388f 350\r
351#endif\r