]> git.proxmox.com Git - mirror_edk2.git/blob - UnixPkg/Sec/SecMain.h
Added support for an EFI X64 ABI compatible UnixPkg. With an internal only compiler...
[mirror_edk2.git] / UnixPkg / Sec / SecMain.h
1 /*++
2
3 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
4 Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13
14 Module Name:
15 SecMain.h
16
17 Abstract:
18 Include file for host API based SEC
19
20 --*/
21 #include <PiPei.h>
22
23 #include <Protocol/UnixThunk.h>
24 #include <Ppi/StatusCode.h>
25
26 #include <Library/PeCoffLib.h>
27 #include <Library/BaseLib.h>
28 #include <Library/BaseMemoryLib.h>
29 #include <Library/PrintLib.h>
30 #include <Library/PcdLib.h>
31 #include <Library/DebugLib.h>
32 #include <Library/ReportStatusCodeLib.h>
33
34 #define STACK_SIZE 0x20000
35
36 typedef struct {
37 EFI_PHYSICAL_ADDRESS Address;
38 UINT64 Size;
39 } UNIX_FD_INFO;
40
41 typedef struct {
42 EFI_PHYSICAL_ADDRESS Memory;
43 UINT64 Size;
44 } UNIX_SYSTEM_MEMORY;
45
46
47 #define MAX_IMAGE_CONTEXT_TO_MOD_HANDLE_ARRAY_SIZE 0x100
48
49 typedef struct {
50 PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext;
51 VOID *ModHandle;
52 } IMAGE_CONTEXT_TO_MOD_HANDLE;
53
54
55 EFI_STATUS
56 EFIAPI
57 SecUnixPeiLoadFile (
58 VOID *Pe32Data, // TODO: add IN/OUT modifier to Pe32Data
59 EFI_PHYSICAL_ADDRESS *ImageAddress, // TODO: add IN/OUT modifier to ImageAddress
60 UINT64 *ImageSize, // TODO: add IN/OUT modifier to ImageSize
61 EFI_PHYSICAL_ADDRESS *EntryPoint // TODO: add IN/OUT modifier to EntryPoint
62 );
63
64 EFI_STATUS
65 EFIAPI
66 GasketSecUnixPeiLoadFile (
67 VOID *Pe32Data, // TODO: add IN/OUT modifier to Pe32Data
68 EFI_PHYSICAL_ADDRESS *ImageAddress, // TODO: add IN/OUT modifier to ImageAddress
69 UINT64 *ImageSize, // TODO: add IN/OUT modifier to ImageSize
70 EFI_PHYSICAL_ADDRESS *EntryPoint // TODO: add IN/OUT modifier to EntryPoint
71 )
72 /*++
73
74 Routine Description:
75
76 TODO: Add function description
77
78 Arguments:
79
80 Pe32Data - TODO: add argument description
81 ImageAddress - TODO: add argument description
82 ImageSize - TODO: add argument description
83 EntryPoint - TODO: add argument description
84
85 Returns:
86
87 TODO: add return values
88
89 --*/
90 ;
91
92 EFI_STATUS
93 EFIAPI
94 SecUnixPeiAutoScan (
95 IN UINTN Index,
96 OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
97 OUT UINT64 *MemorySize
98 );
99
100 EFI_STATUS
101 EFIAPI
102 GasketSecUnixPeiAutoScan (
103 IN UINTN Index,
104 OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
105 OUT UINT64 *MemorySize
106 )
107 /*++
108
109 Routine Description:
110
111 TODO: Add function description
112
113 Arguments:
114
115 Index - TODO: add argument description
116 MemoryBase - TODO: add argument description
117 MemorySize - TODO: add argument description
118
119 Returns:
120
121 TODO: add return values
122
123 --*/
124 ;
125
126 VOID *
127 EFIAPI
128 SecUnixUnixThunkAddress (
129 VOID
130 );
131
132 VOID *
133 EFIAPI
134 GasketSecUnixUnixThunkAddress (
135 VOID
136 )
137 /*++
138
139 Routine Description:
140
141 TODO: Add function description
142
143 Arguments:
144
145 InterfaceSize - TODO: add argument description
146 InterfaceBase - TODO: add argument description
147
148 Returns:
149
150 TODO: add return values
151
152 --*/
153 ;
154
155 EFI_STATUS
156 EFIAPI
157 SecUnixUnixFwhAddress (
158 IN OUT UINT64 *FwhSize,
159 IN OUT EFI_PHYSICAL_ADDRESS *FwhBase
160 );
161
162 EFI_STATUS
163 EFIAPI
164 GasketSecUnixUnixFwhAddress (
165 IN OUT UINT64 *FwhSize,
166 IN OUT EFI_PHYSICAL_ADDRESS *FwhBase
167 )
168 /*++
169
170 Routine Description:
171
172 TODO: Add function description
173
174 Arguments:
175
176 FwhSize - TODO: add argument description
177 FwhBase - TODO: add argument description
178
179 Returns:
180
181 TODO: add return values
182
183 --*/
184 ;
185
186 EFI_STATUS
187 EFIAPI
188 SecPeiReportStatusCode (
189 IN CONST EFI_PEI_SERVICES **PeiServices,
190 IN EFI_STATUS_CODE_TYPE CodeType,
191 IN EFI_STATUS_CODE_VALUE Value,
192 IN UINT32 Instance,
193 IN CONST EFI_GUID *CallerId,
194 IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
195 );
196
197 EFI_STATUS
198 EFIAPI
199 GasketSecPeiReportStatusCode (
200 IN CONST EFI_PEI_SERVICES **PeiServices,
201 IN EFI_STATUS_CODE_TYPE CodeType,
202 IN EFI_STATUS_CODE_VALUE Value,
203 IN UINT32 Instance,
204 IN CONST EFI_GUID *CallerId,
205 IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
206 )
207 /*++
208
209 Routine Description:
210
211 TODO: Add function description
212
213 Arguments:
214
215 PeiServices - TODO: add argument description
216 CodeType - TODO: add argument description
217 Value - TODO: add argument description
218 Instance - TODO: add argument description
219 CallerId - TODO: add argument description
220 Data - TODO: add argument description
221
222 Returns:
223
224 TODO: add return values
225
226 --*/
227 ;
228
229 int
230 main (
231 IN int Argc,
232 IN char **Argv,
233 IN char **Envp
234 )
235 /*++
236
237 Routine Description:
238
239 TODO: Add function description
240
241 Arguments:
242
243 Argc - TODO: add argument description
244 Argv - TODO: add argument description
245 Envp - TODO: add argument description
246
247 Returns:
248
249 TODO: add return values
250
251 --*/
252 ;
253
254 VOID
255 SecLoadFromCore (
256 IN UINTN LargestRegion,
257 IN UINTN LargestRegionSize,
258 IN UINTN BootFirmwareVolumeBase,
259 IN VOID *PeiCoreFile
260 )
261 /*++
262
263 Routine Description:
264
265 TODO: Add function description
266
267 Arguments:
268
269 LargestRegion - TODO: add argument description
270 LargestRegionSize - TODO: add argument description
271 BootFirmwareVolumeBase - TODO: add argument description
272 PeiCoreFile - TODO: add argument description
273
274 Returns:
275
276 TODO: add return values
277
278 --*/
279 ;
280
281 EFI_STATUS
282 SecLoadFile (
283 IN VOID *Pe32Data,
284 IN EFI_PHYSICAL_ADDRESS *ImageAddress,
285 IN UINT64 *ImageSize,
286 IN EFI_PHYSICAL_ADDRESS *EntryPoint
287 )
288 /*++
289
290 Routine Description:
291
292 TODO: Add function description
293
294 Arguments:
295
296 Pe32Data - TODO: add argument description
297 ImageAddress - TODO: add argument description
298 ImageSize - TODO: add argument description
299 EntryPoint - TODO: add argument description
300
301 Returns:
302
303 TODO: add return values
304
305 --*/
306 ;
307
308 EFI_STATUS
309 SecFfsFindPeiCore (
310 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,
311 OUT VOID **Pe32Data
312 )
313 /*++
314
315 Routine Description:
316
317 TODO: Add function description
318
319 Arguments:
320
321 FwVolHeader - TODO: add argument description
322 Pe32Data - TODO: add argument description
323
324 Returns:
325
326 TODO: add return values
327
328 --*/
329 ;
330
331 EFI_STATUS
332 SecFfsFindNextFile (
333 IN EFI_FV_FILETYPE SearchType,
334 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,
335 IN OUT EFI_FFS_FILE_HEADER **FileHeader
336 )
337 /*++
338
339 Routine Description:
340
341 TODO: Add function description
342
343 Arguments:
344
345 SearchType - TODO: add argument description
346 FwVolHeader - TODO: add argument description
347 FileHeader - TODO: add argument description
348
349 Returns:
350
351 TODO: add return values
352
353 --*/
354 ;
355
356 EFI_STATUS
357 SecFfsFindSectionData (
358 IN EFI_SECTION_TYPE SectionType,
359 IN EFI_FFS_FILE_HEADER *FfsFileHeader,
360 IN OUT VOID **SectionData
361 )
362 /*++
363
364 Routine Description:
365
366 TODO: Add function description
367
368 Arguments:
369
370 SectionType - TODO: add argument description
371 FfsFileHeader - TODO: add argument description
372 SectionData - TODO: add argument description
373
374 Returns:
375
376 TODO: add return values
377
378 --*/
379 ;
380
381 EFI_STATUS
382 EFIAPI
383 SecUnixPeCoffLoaderLoadAsDll (
384 IN CHAR8 *PdbFileName,
385 IN VOID **ImageEntryPoint,
386 OUT VOID **ModHandle
387 )
388 /*++
389
390 Routine Description:
391
392 TODO: Add function description
393
394 Arguments:
395
396 PdbFileName - TODO: add argument description
397 ImageEntryPoint - TODO: add argument description
398 ModHandle - TODO: add argument description
399
400 Returns:
401
402 TODO: add return values
403
404 --*/
405 ;
406
407 EFI_STATUS
408 EFIAPI
409 SecUnixPeCoffLoaderFreeLibrary (
410 OUT VOID *ModHandle
411 )
412 /*++
413
414 Routine Description:
415
416 TODO: Add function description
417
418 Arguments:
419
420 ModHandle - TODO: add argument description
421
422 Returns:
423
424 TODO: add return values
425
426 --*/
427 ;
428
429 EFI_STATUS
430 EFIAPI
431 SecUnixFdAddress (
432 IN UINTN Index,
433 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
434 IN OUT UINT64 *FdSize,
435 IN OUT EFI_PHYSICAL_ADDRESS *FixUp
436 )
437 ;
438
439 EFI_STATUS
440 EFIAPI
441 GasketSecUnixFdAddress (
442 IN UINTN Index,
443 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
444 IN OUT UINT64 *FdSize,
445 IN OUT EFI_PHYSICAL_ADDRESS *FixUp
446 )
447 ;
448
449
450 EFI_STATUS
451 GetImageReadFunction (
452 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
453 IN EFI_PHYSICAL_ADDRESS *TopOfMemory
454 )
455 /*++
456
457 Routine Description:
458
459 TODO: Add function description
460
461 Arguments:
462
463 ImageContext - TODO: add argument description
464 TopOfMemory - TODO: add argument description
465
466 Returns:
467
468 TODO: add return values
469
470 --*/
471 ;
472
473 EFI_STATUS
474 EFIAPI
475 SecImageRead (
476 IN VOID *FileHandle,
477 IN UINTN FileOffset,
478 IN OUT UINTN *ReadSize,
479 OUT VOID *Buffer
480 )
481 /*++
482
483 Routine Description:
484
485 TODO: Add function description
486
487 Arguments:
488
489 FileHandle - TODO: add argument description
490 FileOffset - TODO: add argument description
491 ReadSize - TODO: add argument description
492 Buffer - TODO: add argument description
493
494 Returns:
495
496 TODO: add return values
497
498 --*/
499 ;
500
501 CHAR16 *
502 AsciiToUnicode (
503 IN CHAR8 *Ascii,
504 IN UINTN *StrLen OPTIONAL
505 )
506 /*++
507
508 Routine Description:
509
510 TODO: Add function description
511
512 Arguments:
513
514 Ascii - TODO: add argument description
515 StrLen - TODO: add argument description
516
517 Returns:
518
519 TODO: add return values
520
521 --*/
522 ;
523
524 UINTN
525 CountSeperatorsInString (
526 IN const CHAR16 *String,
527 IN CHAR16 Seperator
528 )
529 /*++
530
531 Routine Description:
532
533 TODO: Add function description
534
535 Arguments:
536
537 String - TODO: add argument description
538 Seperator - TODO: add argument description
539
540 Returns:
541
542 TODO: add return values
543
544 --*/
545 ;
546
547 EFI_STATUS
548 EFIAPI
549 SecTemporaryRamSupport (
550 IN CONST EFI_PEI_SERVICES **PeiServices,
551 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
552 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
553 IN UINTN CopySize
554 );
555
556 EFI_STATUS
557 EFIAPI
558 GasketSecTemporaryRamSupport (
559 IN CONST EFI_PEI_SERVICES **PeiServices,
560 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
561 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
562 IN UINTN CopySize
563 );
564
565
566 RETURN_STATUS
567 EFIAPI
568 SecPeCoffGetEntryPoint (
569 IN VOID *Pe32Data,
570 IN OUT VOID **EntryPoint
571 );
572
573 VOID
574 EFIAPI
575 SecPeCoffRelocateImageExtraAction (
576 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
577 );
578
579 VOID
580 EFIAPI
581 SecPeCoffLoaderUnloadImageExtraAction (
582 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
583 );
584
585
586
587 VOID SetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs));
588 void msSleep (unsigned long Milliseconds);
589 void GetLocalTime (EFI_TIME *Time);
590 void TzSet (void);
591 long GetTimeZone(void);
592 int GetDayLight(void);
593 int GetErrno(void);
594
595
596
597 extern EFI_UNIX_THUNK_PROTOCOL *gUnix;