]> git.proxmox.com Git - mirror_edk2.git/blob - Nt32Pkg/Sec/SecMain.h
Merge Temporary Ram support patch.
[mirror_edk2.git] / Nt32Pkg / Sec / SecMain.h
1 /*++
2
3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12
13 Module Name:
14 SecMain.h
15
16 Abstract:
17 Include file for Windows API based SEC
18
19 --*/
20
21 #include <stdio.h>
22 #include <Base.h>
23 #include <PiPei.h>
24 #include <PiDxe.h>
25 #include <WinNtPeim.h>
26 #include <Library/BaseLib.h>
27 #include <Library/PeCoffLib.h>
28 #include <Guid/PeiPeCoffLoader.h>
29 #include <Ppi/NtPeiLoadFile.h>
30 #include <Ppi/NtAutoscan.h>
31 #include <Ppi/NtThunk.h>
32 #include <Ppi/StatusCode.h>
33 #include <Ppi/NtFwh.h>
34 #include <Ppi/TemporaryRamSupport.h>
35 #include <Library/PcdLib.h>
36 #include <Library/DebugLib.h>
37 #include <Library/PrintLib.h>
38 #include <Library/BaseMemoryLib.h>
39 #include <Library/ReportStatusCodeLib.h>
40
41 #include <IndustryStandard/PeImage.h>
42
43
44 #define STACK_SIZE 0x20000
45
46 typedef struct {
47 EFI_PHYSICAL_ADDRESS Address;
48 UINT64 Size;
49 } NT_FD_INFO;
50
51 typedef struct {
52 EFI_PHYSICAL_ADDRESS Memory;
53 UINT64 Size;
54 } NT_SYSTEM_MEMORY;
55
56 #define MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE 0x100
57
58 typedef struct {
59 CHAR8 *PdbPointer;
60 VOID *ModHandle;
61 } PDB_NAME_TO_MOD_HANDLE;
62
63
64
65
66 EFI_STATUS
67 EFIAPI
68 SecWinNtPeiLoadFile (
69 VOID *Pe32Data, // TODO: add IN/OUT modifier to Pe32Data
70 EFI_PHYSICAL_ADDRESS *ImageAddress, // TODO: add IN/OUT modifier to ImageAddress
71 UINT64 *ImageSize, // TODO: add IN/OUT modifier to ImageSize
72 EFI_PHYSICAL_ADDRESS *EntryPoint // TODO: add IN/OUT modifier to EntryPoint
73 )
74 /*++
75
76 Routine Description:
77
78 TODO: Add function description
79
80 Arguments:
81
82 Pe32Data - TODO: add argument description
83 ImageAddress - TODO: add argument description
84 ImageSize - TODO: add argument description
85 EntryPoint - TODO: add argument description
86
87 Returns:
88
89 TODO: add return values
90
91 --*/
92 ;
93
94 EFI_STATUS
95 EFIAPI
96 SecWinNtPeiAutoScan (
97 IN UINTN Index,
98 OUT EFI_PHYSICAL_ADDRESS *MemoryBase,
99 OUT UINT64 *MemorySize
100 )
101 /*++
102
103 Routine Description:
104
105 TODO: Add function description
106
107 Arguments:
108
109 Index - TODO: add argument description
110 MemoryBase - TODO: add argument description
111 MemorySize - TODO: add argument description
112
113 Returns:
114
115 TODO: add return values
116
117 --*/
118 ;
119
120 VOID *
121 EFIAPI
122 SecWinNtWinNtThunkAddress (
123 VOID
124 )
125 /*++
126
127 Routine Description:
128
129 TODO: Add function description
130
131 Arguments:
132
133 InterfaceSize - TODO: add argument description
134 InterfaceBase - TODO: add argument description
135
136 Returns:
137
138 TODO: add return values
139
140 --*/
141 ;
142
143 EFI_STATUS
144 EFIAPI
145 SecWinNtWinNtFwhAddress (
146 IN OUT UINT64 *FwhSize,
147 IN OUT EFI_PHYSICAL_ADDRESS *FwhBase
148 )
149 /*++
150
151 Routine Description:
152
153 TODO: Add function description
154
155 Arguments:
156
157 FwhSize - TODO: add argument description
158 FwhBase - TODO: add argument description
159
160 Returns:
161
162 TODO: add return values
163
164 --*/
165 ;
166
167 EFI_STATUS
168 EFIAPI
169 SecPeiReportStatusCode (
170 IN CONST EFI_PEI_SERVICES **PeiServices,
171 IN EFI_STATUS_CODE_TYPE CodeType,
172 IN EFI_STATUS_CODE_VALUE Value,
173 IN UINT32 Instance,
174 IN CONST EFI_GUID * CallerId,
175 IN CONST EFI_STATUS_CODE_DATA * Data OPTIONAL
176 )
177 /*++
178
179 Routine Description:
180
181 TODO: Add function description
182
183 Arguments:
184
185 PeiServices - TODO: add argument description
186 CodeType - TODO: add argument description
187 Value - TODO: add argument description
188 Instance - TODO: add argument description
189 CallerId - TODO: add argument description
190 Data - TODO: add argument description
191
192 Returns:
193
194 TODO: add return values
195
196 --*/
197 ;
198
199 INTN
200 EFIAPI
201 main (
202 IN INTN Argc,
203 IN CHAR8 **Argv,
204 IN CHAR8 **Envp
205 )
206 /*++
207
208 Routine Description:
209
210 TODO: Add function description
211
212 Arguments:
213
214 Argc - TODO: add argument description
215 Argv - TODO: add argument description
216 Envp - TODO: add argument description
217
218 Returns:
219
220 TODO: add return values
221
222 --*/
223 ;
224
225 EFI_STATUS
226 WinNtOpenFile (
227 CHAR16 *FileName,
228 UINT32 MapSize,
229 DWORD CreationDispostion,
230 EFI_PHYSICAL_ADDRESS *BaseAddress,
231 UINT64 *Length
232 )
233 /*++
234
235 Routine Description:
236
237 TODO: Add function description
238
239 Arguments:
240
241 FileName - TODO: add argument description
242 MapSize - TODO: add argument description
243 CreationDispostion - TODO: add argument description
244 BaseAddress - TODO: add argument description
245 Length - 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 SecWinNtPeCoffLoaderLoadAsDll (
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 SecWinNtPeCoffLoaderFreeLibrary (
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 SecWinNtFdAddress (
432 IN UINTN Index,
433 IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
434 IN OUT UINT64 *FdSize
435 )
436 /*++
437
438 Routine Description:
439
440 TODO: Add function description
441
442 Arguments:
443
444 Index - TODO: add argument description
445 FdBase - TODO: add argument description
446 FdSize - TODO: add argument description
447
448 Returns:
449
450 TODO: add return values
451
452 --*/
453 ;
454
455 EFI_STATUS
456 GetImageReadFunction (
457 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
458 IN EFI_PHYSICAL_ADDRESS *TopOfMemory
459 )
460 /*++
461
462 Routine Description:
463
464 TODO: Add function description
465
466 Arguments:
467
468 ImageContext - TODO: add argument description
469 TopOfMemory - TODO: add argument description
470
471 Returns:
472
473 TODO: add return values
474
475 --*/
476 ;
477
478 EFI_STATUS
479 EFIAPI
480 SecImageRead (
481 IN VOID *FileHandle,
482 IN UINTN FileOffset,
483 IN OUT UINTN *ReadSize,
484 OUT VOID *Buffer
485 )
486 /*++
487
488 Routine Description:
489
490 TODO: Add function description
491
492 Arguments:
493
494 FileHandle - TODO: add argument description
495 FileOffset - TODO: add argument description
496 ReadSize - TODO: add argument description
497 Buffer - TODO: add argument description
498
499 Returns:
500
501 TODO: add return values
502
503 --*/
504 ;
505
506 CHAR16 *
507 AsciiToUnicode (
508 IN CHAR8 *Ascii,
509 IN UINTN *StrLen OPTIONAL
510 )
511 /*++
512
513 Routine Description:
514
515 TODO: Add function description
516
517 Arguments:
518
519 Ascii - TODO: add argument description
520 StrLen - TODO: add argument description
521
522 Returns:
523
524 TODO: add return values
525
526 --*/
527 ;
528
529 UINTN
530 CountSeperatorsInString (
531 IN const CHAR16 *String,
532 IN CHAR16 Seperator
533 )
534 /*++
535
536 Routine Description:
537
538 TODO: Add function description
539
540 Arguments:
541
542 String - TODO: add argument description
543 Seperator - TODO: add argument description
544
545 Returns:
546
547 TODO: add return values
548
549 --*/
550 ;
551
552 EFI_STATUS
553 EFIAPI
554 SecNt32PeCoffGetImageInfo (
555 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
556 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
557 );
558
559 EFI_STATUS
560 EFIAPI
561 SecNt32PeCoffLoadImage (
562 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
563 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
564 );
565
566 EFI_STATUS
567 EFIAPI
568 SecNt32PeCoffRelocateImage (
569 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
570 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
571 );
572
573 EFI_STATUS
574 EFIAPI
575 SecNt32PeCoffUnloadimage (
576 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This,
577 IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
578 );
579
580 EFI_STATUS
581 EFIAPI
582 SecTemporaryRamSupport (
583 IN CONST EFI_PEI_SERVICES **PeiServices,
584 IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
585 IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
586 IN UINTN CopySize
587 );
588
589 typedef struct {
590 EFI_PEI_PE_COFF_LOADER_PROTOCOL PeCoff;
591 VOID *ModHandle;
592 } EFI_PEI_PE_COFF_LOADER_PROTOCOL_INSTANCE;
593
594 extern EFI_WIN_NT_THUNK_PROTOCOL *gWinNt;