]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Core/Pei/PeiMain.h
Remove PeCoffLoader library class and its instances.
[mirror_edk2.git] / MdeModulePkg / Core / Pei / PeiMain.h
CommitLineData
192f6d4c 1/*++\r
2\r
3Copyright (c) 2006 - 2007, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13\r
14 PeiMain.h\r
15\r
16Abstract:\r
17\r
18 Definition of Pei Core Structures and Services\r
19\r
20Revision History\r
21\r
22--*/\r
23\r
24#ifndef _PEI_MAIN_H_\r
25#define _PEI_MAIN_H_\r
26\r
859b72fa
A
27#include <PiPei.h>\r
28#include <FrameworkPei.h>\r
28dc3c67 29#include <Guid/StatusCodeDataTypeId.h>\r
859b72fa
A
30#include <Ppi/DxeIpl.h>\r
31#include <Ppi/MemoryDiscovered.h>\r
859b72fa 32#include <Ppi/StatusCode.h>\r
859b72fa 33#include <Ppi/Reset.h>\r
b0d803fe 34#include <Ppi/FirmwareVolume.h>\r
35#include <Ppi/FirmwareVolumeInfo.h>\r
36#include <Ppi/Decompress.h>\r
37#include <Ppi/GuidedSectionExtraction.h>\r
38#include <Ppi/LoadFile.h>\r
39#include <Ppi/Security2.h>\r
859b72fa
A
40#include <Library/DebugLib.h>\r
41#include <Library/PeiCoreEntryPoint.h>\r
42#include <Library/BaseLib.h>\r
43#include <Library/HobLib.h>\r
44#include <Library/PerformanceLib.h>\r
45#include <Library/PeiServicesLib.h>\r
46#include <Library/ReportStatusCodeLib.h>\r
c58cf83d 47#include <Library/PeCoffLib.h>\r
859b72fa
A
48#include <Library/PeCoffGetEntryPointLib.h>\r
49#include <Library/BaseMemoryLib.h>\r
b0d803fe 50#include <Library/CacheMaintenanceLib.h>\r
859b72fa 51#include <Library/TimerLib.h>\r
28dc3c67 52#include <IndustryStandard/PeImage.h>\r
14e8823a 53#include <Library/PeiServicesTablePointerLib.h>\r
b0d803fe 54#include <Library/MemoryAllocationLib.h>\r
55#include <Guid/FirmwareFileSystem2.h>\r
56#include <Guid/AprioriFileName.h>\r
192f6d4c 57\r
3a63377f 58#define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE 0xff\r
59\r
192f6d4c 60//\r
61// Pei Core private data structures\r
62//\r
63typedef union {\r
64 EFI_PEI_PPI_DESCRIPTOR *Ppi;\r
65 EFI_PEI_NOTIFY_DESCRIPTOR *Notify;\r
66 VOID *Raw;\r
67} PEI_PPI_LIST_POINTERS;\r
68\r
69#define PEI_STACK_SIZE 0x20000\r
70\r
71#define MAX_PPI_DESCRIPTORS 64\r
72\r
73typedef struct {\r
74 INTN PpiListEnd;\r
75 INTN NotifyListEnd;\r
76 INTN DispatchListEnd;\r
77 INTN LastDispatchedInstall;\r
78 INTN LastDispatchedNotify;\r
79 PEI_PPI_LIST_POINTERS PpiListPtrs[MAX_PPI_DESCRIPTORS];\r
80} PEI_PPI_DATABASE;\r
81\r
3a63377f 82\r
83#define PEI_CORE_MAX_FV_SUPPORTED 4\r
84#define PEI_CORE_MAX_PEIM_PER_FV 32\r
85\r
86//\r
87// PEI_CORE_FV_HANDE.PeimState\r
88// Do not change these values as there is code doing math to change states.\r
89// Look for Private->Fv[FvCount].PeimState[PeimCount]++;\r
90//\r
91#define PEIM_STATE_NOT_DISPATCHED 0x00\r
92#define PEIM_STATE_DISPATCHED 0x01\r
93#define PEIM_STATE_REGISITER_FOR_SHADOW 0x02\r
94#define PEIM_STATE_DONE 0x03\r
95\r
96typedef struct {\r
97 EFI_FIRMWARE_VOLUME_HEADER *FvHeader;\r
98 UINT8 PeimState[PEI_CORE_MAX_PEIM_PER_FV]; \r
99 EFI_PEI_FILE_HANDLE FvFileHandles[PEI_CORE_MAX_PEIM_PER_FV];\r
100 BOOLEAN ScanFv;\r
101} PEI_CORE_FV_HANDLE;\r
102\r
192f6d4c 103//\r
104// Pei Core private data structure instance\r
105//\r
106\r
107#define PEI_CORE_HANDLE_SIGNATURE EFI_SIGNATURE_32('P','e','i','C')\r
108\r
109typedef struct{\r
110 UINTN Signature;\r
111 EFI_PEI_SERVICES *PS; // Point to ServiceTableShadow\r
112 PEI_PPI_DATABASE PpiData;\r
3a63377f 113 UINTN FvCount;\r
114 PEI_CORE_FV_HANDLE Fv[PEI_CORE_MAX_FV_SUPPORTED];\r
115 EFI_PEI_FILE_HANDLE CurrentFvFileHandles[PEI_CORE_MAX_PEIM_PER_FV];\r
116 UINTN AprioriCount;\r
117 UINTN CurrentPeimFvCount; \r
118 UINTN CurrentPeimCount;\r
119 EFI_PEI_FILE_HANDLE CurrentFileHandle;\r
120 UINTN AllFvCount;\r
121 EFI_PEI_FV_HANDLE AllFv[PEI_CORE_MAX_FV_SUPPORTED];\r
192f6d4c 122 EFI_PEI_HOB_POINTERS HobList;\r
123 BOOLEAN SwitchStackSignal;\r
124 BOOLEAN PeiMemoryInstalled;\r
125 EFI_PHYSICAL_ADDRESS StackBase;\r
126 UINT64 StackSize;\r
127 VOID *BottomOfCarHeap;\r
128 VOID *TopOfCarHeap;\r
129 VOID *CpuIo;\r
b0d803fe 130 EFI_PEI_SECURITY2_PPI *PrivateSecurityPpi;\r
192f6d4c 131 EFI_PEI_SERVICES ServiceTableShadow;\r
132 UINTN SizeOfCacheAsRam;\r
133 VOID *MaxTopOfCarHeap;\r
b0d803fe 134 EFI_PEI_PPI_DESCRIPTOR *XipLoadFile;\r
192f6d4c 135} PEI_CORE_INSTANCE;\r
136\r
137//\r
138// Pei Core Instance Data Macros\r
139//\r
140\r
141#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \\r
142 CR(a, PEI_CORE_INSTANCE, PS, PEI_CORE_HANDLE_SIGNATURE)\r
143\r
144//\r
145// BUGBUG: Where does this go really?\r
146//\r
147typedef\r
148EFI_STATUS\r
149(EFIAPI *PEI_CORE_ENTRY_POINT)(\r
b98c2ab7 150 IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,\r
151 IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList,\r
152 IN PEI_CORE_INSTANCE *OldCoreData\r
192f6d4c 153 );\r
154\r
155//\r
156// Union of temporarily used function pointers (to save stack space)\r
157//\r
158typedef union {\r
159 PEI_CORE_ENTRY_POINT PeiCore;\r
1c9d209f 160 EFI_PEIM_ENTRY_POINT2 PeimEntry;\r
192f6d4c 161 EFI_PEIM_NOTIFY_ENTRY_POINT PeimNotifyEntry;\r
162 EFI_DXE_IPL_PPI *DxeIpl;\r
163 EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;\r
164 EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor;\r
165 VOID *Raw;\r
166} PEI_CORE_TEMP_POINTERS;\r
167\r
168\r
b98c2ab7 169\r
170typedef struct {\r
171 CONST EFI_SEC_PEI_HAND_OFF *SecCoreData;\r
172 EFI_PEI_PPI_DESCRIPTOR *PpiList;\r
173 VOID *Data;\r
174} PEI_CORE_PARAMETERS;\r
175\r
192f6d4c 176//\r
177// PeiCore function\r
178//\r
179EFI_STATUS\r
180EFIAPI\r
181PeiCore (\r
5aae0aa7 182 IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,\r
183 IN CONST EFI_PEI_PPI_DESCRIPTOR *PpList,\r
184 IN VOID *Data\r
192f6d4c 185 )\r
186/*++\r
187\r
188Routine Description:\r
189\r
190 The entry routine to Pei Core, invoked by PeiMain during transition\r
191 from SEC to PEI. After switching stack in the PEI core, it will restart\r
192 with the old core data.\r
193\r
194Arguments:\r
195\r
196 PeiStartupDescriptor - Information and services provided by SEC phase.\r
197 OldCoreData - Pointer to old core data that is used to initialize the\r
198 core's data areas.\r
199\r
200Returns:\r
201\r
202 This function never returns\r
203 EFI_NOT_FOUND - Never reach\r
204\r
205--*/\r
206;\r
207\r
208//\r
209// Dispatcher support functions\r
210//\r
211\r
b0d803fe 212BOOLEAN\r
192f6d4c 213PeimDispatchReadiness (\r
214 IN EFI_PEI_SERVICES **PeiServices,\r
b0d803fe 215 IN VOID *DependencyExpression\r
192f6d4c 216 )\r
217/*++\r
218\r
219Routine Description:\r
220\r
221 This is the POSTFIX version of the dependency evaluator. When a\r
222 PUSH [PPI GUID] is encountered, a pointer to the GUID is stored on\r
223 the evaluation stack. When that entry is poped from the evaluation\r
224 stack, the PPI is checked if it is installed. This method allows\r
225 some time savings as not all PPIs must be checked for certain\r
226 operation types (AND, OR).\r
227\r
228Arguments:\r
229\r
230 PeiServices - Calling context.\r
231\r
232 DependencyExpression - Pointer to a dependency expression. The Grammar adheres to\r
233 the BNF described above and is stored in postfix notation.\r
234 Runnable - is True if the driver can be scheduled and False if the driver\r
235 cannot be scheduled. This is the value that the schedulers\r
236 should use for deciding the state of the driver.\r
237\r
238Returns:\r
239\r
240 Status = EFI_SUCCESS if it is a well-formed Grammar\r
241 EFI_INVALID_PARAMETER if the dependency expression overflows\r
242 the evaluation stack\r
243 EFI_INVALID_PARAMETER if the dependency expression underflows\r
244 the evaluation stack\r
245 EFI_INVALID_PARAMETER if the dependency expression is not a\r
246 well-formed Grammar.\r
247--*/\r
248;\r
249\r
250\r
b0d803fe 251VOID\r
192f6d4c 252PeiDispatcher (\r
5aae0aa7 253 IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,\r
b0d803fe 254 IN PEI_CORE_INSTANCE *PrivateData\r
192f6d4c 255 )\r
256\r
257/*++\r
258\r
259Routine Description:\r
260\r
261 Conduct PEIM dispatch.\r
262\r
263Arguments:\r
264\r
265 PeiStartupDescriptor - Pointer to IN EFI_PEI_STARTUP_DESCRIPTOR\r
266 PrivateData - Pointer to the private data passed in from caller\r
267 DispatchData - Pointer to PEI_CORE_DISPATCH_DATA data.\r
268\r
269Returns:\r
270\r
271 EFI_SUCCESS - Successfully dispatched PEIM.\r
272 EFI_NOT_FOUND - The dispatch failed.\r
273\r
274--*/\r
275;\r
276\r
277\r
278VOID\r
279InitializeDispatcherData (\r
b0d803fe 280 IN PEI_CORE_INSTANCE *PrivateData,\r
192f6d4c 281 IN PEI_CORE_INSTANCE *OldCoreData,\r
5aae0aa7 282 IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData\r
192f6d4c 283 )\r
284/*++\r
285\r
286Routine Description:\r
287\r
288 Initialize the Dispatcher's data members\r
289\r
290Arguments:\r
291\r
292 PeiServices - The PEI core services table.\r
293 OldCoreData - Pointer to old core data (before switching stack).\r
294 NULL if being run in non-permament memory mode.\r
295 PeiStartupDescriptor - Information and services provided by SEC phase.\r
296\r
297\r
298Returns:\r
299\r
300 None\r
301\r
302--*/\r
303;\r
304\r
305\r
306EFI_STATUS\r
307FindNextPeim (\r
308 IN EFI_PEI_SERVICES **PeiServices,\r
309 IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
310 IN OUT EFI_FFS_FILE_HEADER **PeimFileHeader\r
311 )\r
312/*++\r
313\r
314Routine Description:\r
315 Given the input file pointer, search for the next matching file in the\r
316 FFS volume. The search starts from FileHeader inside\r
317 the Firmware Volume defined by FwVolHeader.\r
318\r
319Arguments:\r
320 PeiServices - Pointer to the PEI Core Services Table.\r
321\r
322 FwVolHeader - Pointer to the FV header of the volume to search.\r
323 This parameter must point to a valid FFS volume.\r
324\r
325 PeimFileHeader - Pointer to the current file from which to begin searching.\r
326 This pointer will be updated upon return to reflect the file found.\r
327\r
328Returns:\r
329 EFI_NOT_FOUND - No files matching the search criteria were found\r
330 EFI_SUCCESS\r
331\r
332--*/\r
333;\r
334\r
335BOOLEAN\r
336Dispatched (\r
337 IN UINT8 CurrentPeim,\r
338 IN UINT32 DispatchedPeimBitMap\r
339 )\r
340/*++\r
341\r
342Routine Description:\r
343\r
344 This routine checks to see if a particular PEIM has been dispatched during\r
345 the PEI core dispatch.\r
346\r
347Arguments:\r
348 CurrentPeim - The PEIM/FV in the bit array to check.\r
349 DispatchedPeimBitMap - Bit array, each bit corresponds to a PEIM/FV.\r
350\r
351Returns:\r
352 TRUE if PEIM already dispatched\r
353 FALSE if not\r
354\r
355--*/\r
356;\r
357\r
358VOID\r
359SetDispatched (\r
360 IN EFI_PEI_SERVICES **PeiServices,\r
361 IN UINT8 CurrentPeim,\r
362 OUT UINT32 *DispatchedPeimBitMap\r
363 )\r
364/*++\r
365\r
366Routine Description:\r
367\r
368 This routine sets a PEIM as having been dispatched once its entry\r
369 point has been invoked.\r
370\r
371Arguments:\r
372\r
373 PeiServices - The PEI core services table.\r
374 CurrentPeim - The PEIM/FV in the bit array to check.\r
375 DispatchedPeimBitMap - Bit array, each bit corresponds to a PEIM/FV.\r
376\r
377Returns:\r
378 None\r
379\r
380--*/\r
381;\r
382\r
383BOOLEAN\r
384DepexSatisfied (\r
b0d803fe 385 IN PEI_CORE_INSTANCE *Private,\r
386 IN EFI_PEI_FILE_HANDLE FileHandle,\r
387 IN UINTN PeimCount\r
192f6d4c 388 )\r
389/*++\r
390\r
391Routine Description:\r
392\r
393 This routine parses the Dependency Expression, if available, and\r
394 decides if the module can be executed.\r
395\r
396Arguments:\r
397 PeiServices - The PEI Service Table\r
398 CurrentPeimAddress - Address of the PEIM Firmware File under investigation\r
399\r
400Returns:\r
401 TRUE - Can be dispatched\r
402 FALSE - Cannot be dispatched\r
403\r
404--*/\r
405;\r
406\r
407#if defined (MDE_CPU_IPF)\r
408 //\r
409 // In Ipf we should make special changes for the PHIT pointers to support\r
410 // recovery boot in cache mode.\r
411 //\r
412#define SWITCH_TO_CACHE_MODE(CoreData) SwitchToCacheMode(CoreData)\r
413#define CACHE_MODE_ADDRESS_MASK 0x7FFFFFFFFFFFFFFFULL\r
414VOID\r
415SwitchToCacheMode (\r
416 IN PEI_CORE_INSTANCE *CoreData\r
417)\r
418/*++\r
419\r
420Routine Description:\r
421\r
422 Switch the PHIT pointers to cache mode after InstallPeiMemory in CAR.\r
423\r
424Arguments:\r
425\r
426 CoreData - The PEI core Private Data\r
427\r
428Returns:\r
429\r
430--*/\r
431;\r
432\r
433#else\r
434\r
435#define SWITCH_TO_CACHE_MODE(CoreData)\r
436\r
437#endif\r
438\r
439//\r
440// PPI support functions\r
441//\r
442VOID\r
443InitializePpiServices (\r
b0d803fe 444 IN PEI_CORE_INSTANCE *PrivateData,\r
192f6d4c 445 IN PEI_CORE_INSTANCE *OldCoreData\r
446 )\r
447/*++\r
448\r
449Routine Description:\r
450\r
451 Initialize PPI services.\r
452\r
453Arguments:\r
454\r
455 PeiServices - The PEI core services table.\r
456 OldCoreData - Pointer to the PEI Core data.\r
457 NULL if being run in non-permament memory mode.\r
458\r
459Returns:\r
460 Nothing\r
461\r
462--*/\r
463;\r
464\r
465VOID\r
466ConvertPpiPointers (\r
0c2b5da8 467 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 468 IN EFI_HOB_HANDOFF_INFO_TABLE *OldHandOffHob,\r
469 IN EFI_HOB_HANDOFF_INFO_TABLE *NewHandOffHob\r
470 )\r
471/*++\r
472\r
473Routine Description:\r
474\r
475 Migrate the Hob list from the CAR stack to PEI installed memory.\r
476\r
477Arguments:\r
478\r
479 PeiServices - The PEI core services table.\r
480 OldHandOffHob - The old handoff HOB list.\r
481 NewHandOffHob - The new handoff HOB list.\r
482\r
483Returns:\r
484\r
485--*/\r
486;\r
487\r
488EFI_STATUS\r
489EFIAPI\r
490PeiInstallPpi (\r
0c2b5da8 491 IN CONST EFI_PEI_SERVICES **PeiServices,\r
492 IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList\r
192f6d4c 493 )\r
494/*++\r
495\r
496Routine Description:\r
497\r
498 Install PPI services.\r
499\r
500Arguments:\r
501\r
502 PeiServices - Pointer to the PEI Service Table\r
503 PpiList - Pointer to a list of PEI PPI Descriptors.\r
504\r
505Returns:\r
506\r
507 EFI_SUCCESS - if all PPIs in PpiList are successfully installed.\r
508 EFI_INVALID_PARAMETER - if PpiList is NULL pointer\r
509 EFI_INVALID_PARAMETER - if any PPI in PpiList is not valid\r
510 EFI_OUT_OF_RESOURCES - if there is no more memory resource to install PPI\r
511\r
512--*/\r
513;\r
514\r
515EFI_STATUS\r
516EFIAPI\r
517PeiReInstallPpi (\r
0c2b5da8 518 IN CONST EFI_PEI_SERVICES **PeiServices,\r
519 IN CONST EFI_PEI_PPI_DESCRIPTOR *OldPpi,\r
520 IN CONST EFI_PEI_PPI_DESCRIPTOR *NewPpi\r
192f6d4c 521 )\r
522/*++\r
523\r
524Routine Description:\r
525\r
526 Re-Install PPI services.\r
527\r
528Arguments:\r
529\r
530 PeiServices - Pointer to the PEI Service Table\r
531 OldPpi - Pointer to the old PEI PPI Descriptors.\r
532 NewPpi - Pointer to the new PEI PPI Descriptors.\r
533\r
534Returns:\r
535\r
536 EFI_SUCCESS - if the operation was successful\r
537 EFI_INVALID_PARAMETER - if OldPpi or NewPpi is NULL\r
538 EFI_INVALID_PARAMETER - if NewPpi is not valid\r
539 EFI_NOT_FOUND - if the PPI was not in the database\r
540\r
541--*/\r
542;\r
543\r
544EFI_STATUS\r
545EFIAPI\r
546PeiLocatePpi (\r
0c2b5da8 547 IN CONST EFI_PEI_SERVICES **PeiServices,\r
548 IN CONST EFI_GUID *Guid,\r
192f6d4c 549 IN UINTN Instance,\r
550 IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,\r
551 IN OUT VOID **Ppi\r
552 )\r
553/*++\r
554\r
555Routine Description:\r
556\r
557 Locate a given named PPI.\r
558\r
559Arguments:\r
560\r
561 PeiServices - Pointer to the PEI Service Table\r
562 Guid - Pointer to GUID of the PPI.\r
563 Instance - Instance Number to discover.\r
564 PpiDescriptor - Pointer to reference the found descriptor. If not NULL,\r
565 returns a pointer to the descriptor (includes flags, etc)\r
566 Ppi - Pointer to reference the found PPI\r
567\r
568Returns:\r
569\r
570 Status - EFI_SUCCESS if the PPI is in the database\r
571 EFI_NOT_FOUND if the PPI is not in the database\r
572--*/\r
573;\r
574\r
575EFI_STATUS\r
576EFIAPI\r
577PeiNotifyPpi (\r
0c2b5da8 578 IN CONST EFI_PEI_SERVICES **PeiServices,\r
579 IN CONST EFI_PEI_NOTIFY_DESCRIPTOR *NotifyList\r
192f6d4c 580 )\r
581/*++\r
582\r
583Routine Description:\r
584\r
585 Install a notification for a given PPI.\r
586\r
587Arguments:\r
588\r
589 PeiServices - Pointer to the PEI Service Table\r
590 NotifyList - Pointer to list of Descriptors to notify upon.\r
591\r
592Returns:\r
593\r
594 Status - EFI_SUCCESS if successful\r
595 EFI_OUT_OF_RESOURCES if no space in the database\r
596 EFI_INVALID_PARAMETER if not a good decriptor\r
597\r
598--*/\r
599;\r
600\r
601VOID\r
602ProcessNotifyList (\r
b0d803fe 603 IN PEI_CORE_INSTANCE *PrivateData\r
192f6d4c 604 )\r
605/*++\r
606\r
607Routine Description:\r
608\r
609 Process the Notify List at dispatch level.\r
610\r
611Arguments:\r
612\r
613 PeiServices - Pointer to the PEI Service Table\r
614\r
615Returns:\r
616\r
617--*/\r
618;\r
619\r
620VOID\r
621DispatchNotify (\r
b0d803fe 622 IN PEI_CORE_INSTANCE *PrivateData,\r
192f6d4c 623 IN UINTN NotifyType,\r
624 IN INTN InstallStartIndex,\r
625 IN INTN InstallStopIndex,\r
626 IN INTN NotifyStartIndex,\r
627 IN INTN NotifyStopIndex\r
628 )\r
629/*++\r
630\r
631Routine Description:\r
632\r
633 Dispatch notifications.\r
634\r
635Arguments:\r
636\r
637 PeiServices - Pointer to the PEI Service Table\r
638 NotifyType - Type of notify to fire.\r
639 InstallStartIndex - Install Beginning index.\r
640 InstallStopIndex - Install Ending index.\r
641 NotifyStartIndex - Notify Beginning index.\r
642 NotifyStopIndex - Notify Ending index.\r
643\r
644Returns: None\r
645\r
646--*/\r
647;\r
648\r
649//\r
650// Boot mode support functions\r
651//\r
652EFI_STATUS\r
653EFIAPI\r
654PeiGetBootMode (\r
0c2b5da8 655 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 656 IN OUT EFI_BOOT_MODE *BootMode\r
657 )\r
658/*++\r
659\r
660Routine Description:\r
661\r
662 This service enables PEIMs to ascertain the present value of the boot mode.\r
663\r
664Arguments:\r
665\r
666 PeiServices - The PEI core services table.\r
667 BootMode - A pointer to contain the value of the boot mode.\r
668\r
669Returns:\r
670\r
671 EFI_SUCCESS - The boot mode was returned successfully.\r
672 EFI_INVALID_PARAMETER - BootMode is NULL.\r
673\r
674--*/\r
675;\r
676\r
677EFI_STATUS\r
678EFIAPI\r
679PeiSetBootMode (\r
0c2b5da8 680 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 681 IN EFI_BOOT_MODE BootMode\r
682 )\r
683/*++\r
684\r
685Routine Description:\r
686\r
687 This service enables PEIMs to update the boot mode variable.\r
688\r
689Arguments:\r
690\r
691 PeiServices - The PEI core services table.\r
692 BootMode - The value of the boot mode to set.\r
693\r
694Returns:\r
695\r
696 EFI_SUCCESS - The value was successfully updated\r
697\r
698--*/\r
699;\r
700\r
701//\r
702// Security support functions\r
703//\r
704VOID\r
705InitializeSecurityServices (\r
706 IN EFI_PEI_SERVICES **PeiServices,\r
707 IN PEI_CORE_INSTANCE *OldCoreData\r
708 )\r
709/*++\r
710\r
711Routine Description:\r
712\r
713 Initialize the security services.\r
714\r
715Arguments:\r
716\r
717 PeiServices - The PEI core services table.\r
718 OldCoreData - Pointer to the old core data.\r
719 NULL if being run in non-permament memory mode.\r
720Returns:\r
721\r
722 None\r
723\r
724--*/\r
725;\r
726\r
727EFI_STATUS\r
728VerifyFv (\r
729 IN EFI_FIRMWARE_VOLUME_HEADER *CurrentFvAddress\r
730 )\r
731/*++\r
732\r
733Routine Description:\r
734\r
735 Provide a callout to the OEM FV verification service.\r
736\r
737Arguments:\r
738\r
739 CurrentFvAddress - Pointer to the FV under investigation.\r
740\r
741Returns:\r
742\r
743 Status - EFI_SUCCESS\r
744\r
745--*/\r
746;\r
747\r
748\r
749EFI_STATUS\r
750VerifyPeim (\r
b0d803fe 751 IN PEI_CORE_INSTANCE *PrivateData,\r
752 IN EFI_PEI_FV_HANDLE VolumeHandle,\r
753 IN EFI_PEI_FILE_HANDLE FileHandle\r
192f6d4c 754 )\r
755/*++\r
756\r
757Routine Description:\r
758\r
759 Provide a callout to the security verification service.\r
760\r
761Arguments:\r
762\r
763 PeiServices - The PEI core services table.\r
764 CurrentPeimAddress - Pointer to the Firmware File under investigation.\r
765\r
766Returns:\r
767\r
768 EFI_SUCCESS - Image is OK\r
769 EFI_SECURITY_VIOLATION - Image is illegal\r
770\r
771--*/\r
772;\r
773\r
774\r
775EFI_STATUS\r
776EFIAPI\r
777PeiGetHobList (\r
0c2b5da8 778 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 779 IN OUT VOID **HobList\r
780 )\r
781/*++\r
782\r
783Routine Description:\r
784\r
785 Gets the pointer to the HOB List.\r
786\r
787Arguments:\r
788\r
789 PeiServices - The PEI core services table.\r
790 HobList - Pointer to the HOB List.\r
791\r
792Returns:\r
793\r
794 EFI_SUCCESS - Get the pointer of HOB List\r
795 EFI_NOT_AVAILABLE_YET - the HOB List is not yet published\r
796 EFI_INVALID_PARAMETER - HobList is NULL (in debug mode)\r
797\r
798--*/\r
799;\r
800\r
801EFI_STATUS\r
802EFIAPI\r
803PeiCreateHob (\r
0c2b5da8 804 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 805 IN UINT16 Type,\r
806 IN UINT16 Length,\r
807 IN OUT VOID **Hob\r
808 )\r
809/*++\r
810\r
811Routine Description:\r
812\r
813 Add a new HOB to the HOB List.\r
814\r
815Arguments:\r
816\r
817 PeiServices - The PEI core services table.\r
818 Type - Type of the new HOB.\r
819 Length - Length of the new HOB to allocate.\r
820 Hob - Pointer to the new HOB.\r
821\r
822Returns:\r
823\r
824 Status - EFI_SUCCESS\r
825 - EFI_INVALID_PARAMETER if Hob is NULL\r
826 - EFI_NOT_AVAILABLE_YET if HobList is still not available.\r
827 - EFI_OUT_OF_RESOURCES if there is no more memory to grow the Hoblist.\r
828\r
829--*/\r
830;\r
831\r
832EFI_STATUS\r
833PeiCoreBuildHobHandoffInfoTable (\r
834 IN EFI_BOOT_MODE BootMode,\r
835 IN EFI_PHYSICAL_ADDRESS MemoryBegin,\r
836 IN UINT64 MemoryLength\r
837 )\r
838/*++\r
839\r
840Routine Description:\r
841\r
842 Builds a Handoff Information Table HOB\r
843\r
844Arguments:\r
845\r
846 BootMode - Current Bootmode\r
847 MemoryBegin - Start Memory Address.\r
848 MemoryLength - Length of Memory.\r
849\r
850Returns:\r
851\r
852 EFI_SUCCESS\r
853\r
854--*/\r
855;\r
856\r
857\r
858//\r
859// FFS Fw Volume support functions\r
860//\r
861EFI_STATUS\r
862EFIAPI\r
863PeiFfsFindNextFile (\r
0c2b5da8 864 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 865 IN UINT8 SearchType,\r
0c2b5da8 866 IN EFI_PEI_FV_HANDLE FwVolHeader,\r
867 IN OUT EFI_PEI_FILE_HANDLE *FileHeader\r
192f6d4c 868 )\r
869/*++\r
870\r
871Routine Description:\r
872 Given the input file pointer, search for the next matching file in the\r
873 FFS volume as defined by SearchType. The search starts from FileHeader inside\r
874 the Firmware Volume defined by FwVolHeader.\r
875\r
876Arguments:\r
877 PeiServices - Pointer to the PEI Core Services Table.\r
878\r
879 SearchType - Filter to find only files of this type.\r
880 Type EFI_FV_FILETYPE_ALL causes no filtering to be done.\r
881\r
882 FwVolHeader - Pointer to the FV header of the volume to search.\r
883 This parameter must point to a valid FFS volume.\r
884\r
885 FileHeader - Pointer to the current file from which to begin searching.\r
886 This pointer will be updated upon return to reflect the file found.\r
887\r
888Returns:\r
889 EFI_NOT_FOUND - No files matching the search criteria were found\r
890 EFI_SUCCESS\r
891\r
892--*/\r
893;\r
894\r
895EFI_STATUS\r
896EFIAPI\r
897PeiFfsFindSectionData (\r
b0d803fe 898 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 899 IN EFI_SECTION_TYPE SectionType,\r
0c2b5da8 900 IN EFI_PEI_FILE_HANDLE FfsFileHeader,\r
192f6d4c 901 IN OUT VOID **SectionData\r
902 )\r
903/*++\r
904\r
905Routine Description:\r
906 Given the input file pointer, search for the next matching section in the\r
907 FFS volume.\r
908\r
909Arguments:\r
910 PeiServices - Pointer to the PEI Core Services Table.\r
911 SearchType - Filter to find only sections of this type.\r
912 FfsFileHeader - Pointer to the current file to search.\r
913 SectionData - Pointer to the Section matching SectionType in FfsFileHeader.\r
914 - NULL if section not found\r
915\r
916Returns:\r
917 EFI_NOT_FOUND - No files matching the search criteria were found\r
918 EFI_SUCCESS\r
919\r
920--*/\r
921;\r
922\r
923EFI_STATUS\r
924EFIAPI\r
925PeiFvFindNextVolume (\r
0c2b5da8 926 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 927 IN UINTN Instance,\r
0c2b5da8 928 IN OUT EFI_PEI_FV_HANDLE *FwVolHeader\r
192f6d4c 929 )\r
930/*++\r
931\r
932Routine Description:\r
933\r
934 Return the BFV location\r
935\r
936 BugBug -- Move this to the location of this code to where the\r
937 other FV and FFS support code lives.\r
938 Also, update to use FindFV for instances #'s >= 1.\r
939\r
940Arguments:\r
941\r
942 PeiServices - The PEI core services table.\r
943 Instance - Instance of FV to find\r
944 FwVolHeader - Pointer to contain the data to return\r
945\r
946Returns:\r
947 Pointer to the Firmware Volume instance requested\r
948\r
949 EFI_INVALID_PARAMETER - FwVolHeader is NULL\r
950\r
951 EFI_SUCCESS - Firmware volume instance successfully found.\r
952\r
953--*/\r
954;\r
955\r
956//\r
957// Memory support functions\r
958//\r
959VOID\r
960InitializeMemoryServices (\r
b0d803fe 961 IN PEI_CORE_INSTANCE *PrivateData,\r
5aae0aa7 962 IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,\r
192f6d4c 963 IN PEI_CORE_INSTANCE *OldCoreData\r
964 )\r
965/*++\r
966\r
967Routine Description:\r
968\r
969 Initialize the memory services.\r
970\r
971Arguments:\r
972\r
973 PeiServices - The PEI core services table.\r
974 PeiStartupDescriptor - Information and services provided by SEC phase.\r
975 OldCoreData - Pointer to the PEI Core data.\r
976 NULL if being run in non-permament memory mode.\r
977\r
978Returns:\r
979\r
980 None\r
981\r
982--*/\r
983;\r
984\r
985EFI_STATUS\r
986EFIAPI\r
987PeiInstallPeiMemory (\r
0c2b5da8 988 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 989 IN EFI_PHYSICAL_ADDRESS MemoryBegin,\r
990 IN UINT64 MemoryLength\r
991 )\r
992/*++\r
993\r
994Routine Description:\r
995\r
996 Install the permanent memory is now available.\r
997 Creates HOB (PHIT and Stack).\r
998\r
999Arguments:\r
1000\r
1001 PeiServices - The PEI core services table.\r
1002 MemoryBegin - Start of memory address.\r
1003 MemoryLength - Length of memory.\r
1004\r
1005Returns:\r
1006\r
1007 Status - EFI_SUCCESS\r
1008\r
1009--*/\r
1010;\r
1011\r
1012EFI_STATUS\r
1013EFIAPI\r
1014PeiAllocatePages (\r
0c2b5da8 1015 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 1016 IN EFI_MEMORY_TYPE MemoryType,\r
1017 IN UINTN Pages,\r
1018 OUT EFI_PHYSICAL_ADDRESS *Memory\r
1019 )\r
1020/*++\r
1021\r
1022Routine Description:\r
1023\r
1024 Memory allocation service on permanent memory,\r
1025 not usable prior to the memory installation.\r
1026\r
1027Arguments:\r
1028\r
1029 PeiServices - The PEI core services table.\r
1030 Type - Type of allocation.\r
1031 MemoryType - Type of memory to allocate.\r
1032 Pages - Number of pages to allocate.\r
1033 Memory - Pointer of memory allocated.\r
1034\r
1035Returns:\r
1036\r
1037 Status - EFI_SUCCESS The allocation was successful\r
1038 EFI_INVALID_PARAMETER Only AllocateAnyAddress is supported.\r
1039 EFI_NOT_AVAILABLE_YET Called with permanent memory not available\r
1040 EFI_OUT_OF_RESOURCES There is not enough HOB heap to satisfy the requirement\r
1041 to allocate the number of pages.\r
1042\r
1043--*/\r
1044;\r
1045\r
1046EFI_STATUS\r
1047EFIAPI\r
1048PeiAllocatePool (\r
0c2b5da8 1049 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 1050 IN UINTN Size,\r
1051 OUT VOID **Buffer\r
1052 )\r
1053/*++\r
1054\r
1055Routine Description:\r
1056\r
1057 Memory allocation service on the CAR.\r
1058\r
1059Arguments:\r
1060\r
1061 PeiServices - The PEI core services table.\r
1062\r
1063 Size - Amount of memory required\r
1064\r
1065 Buffer - Address of pointer to the buffer\r
1066\r
1067Returns:\r
1068\r
1069 Status - EFI_SUCCESS The allocation was successful\r
1070 EFI_OUT_OF_RESOURCES There is not enough heap to satisfy the requirement\r
1071 to allocate the requested size.\r
1072\r
1073--*/\r
1074;\r
1075\r
1076EFI_STATUS\r
1077PeiLoadImage (\r
1078 IN EFI_PEI_SERVICES **PeiServices,\r
b0d803fe 1079 IN EFI_PEI_FILE_HANDLE FileHandle,\r
1080 OUT EFI_PHYSICAL_ADDRESS *EntryPoint,\r
1081 OUT UINT32 *AuthenticationState\r
192f6d4c 1082 )\r
1083/*++\r
1084\r
1085Routine Description:\r
1086\r
1087 Get entry point of a Peim file.\r
1088\r
1089Arguments:\r
1090\r
1091 PeiServices - Calling context.\r
1092\r
1093 PeimFileHeader - Peim file's header.\r
1094\r
1095 EntryPoint - Entry point of that Peim file.\r
1096\r
1097Returns:\r
1098\r
1099 Status code.\r
1100\r
1101--*/\r
1102;\r
1103\r
1104\r
1105EFI_STATUS\r
1106EFIAPI\r
1107PeiReportStatusCode (\r
0c2b5da8 1108 IN CONST EFI_PEI_SERVICES **PeiServices,\r
192f6d4c 1109 IN EFI_STATUS_CODE_TYPE CodeType,\r
1110 IN EFI_STATUS_CODE_VALUE Value,\r
1111 IN UINT32 Instance,\r
0c2b5da8 1112 IN CONST EFI_GUID *CallerId,\r
1113 IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL\r
192f6d4c 1114 )\r
1115/*++\r
1116\r
1117Routine Description:\r
1118\r
1119 Core version of the Status Code reporter\r
1120\r
1121Arguments:\r
1122\r
1123 PeiServices - The PEI core services table.\r
1124\r
1125 CodeType - Type of Status Code.\r
1126\r
1127 Value - Value to output for Status Code.\r
1128\r
1129 Instance - Instance Number of this status code.\r
1130\r
1131 CallerId - ID of the caller of this status code.\r
1132\r
1133 Data - Optional data associated with this status code.\r
1134\r
1135Returns:\r
1136\r
1137 Status - EFI_SUCCESS if status code is successfully reported\r
1138 - EFI_NOT_AVAILABLE_YET if StatusCodePpi has not been installed\r
1139\r
1140--*/\r
1141;\r
1142\r
1143\r
1144EFI_STATUS\r
1145EFIAPI\r
1146PeiResetSystem (\r
b0d803fe 1147 IN CONST EFI_PEI_SERVICES **PeiServices\r
192f6d4c 1148 )\r
1149/*++\r
1150\r
1151Routine Description:\r
1152\r
1153 Core version of the Reset System\r
1154\r
1155Arguments:\r
1156\r
1157 PeiServices - The PEI core services table.\r
1158\r
1159Returns:\r
1160\r
1161 Status - EFI_NOT_AVAILABLE_YET. PPI not available yet.\r
1162 - EFI_DEVICE_ERROR. Did not reset system.\r
1163\r
1164 Otherwise, resets the system.\r
1165\r
1166--*/\r
1167;\r
1168\r
b0d803fe 1169VOID \r
1170PeiInitializeFv (\r
1171 IN PEI_CORE_INSTANCE *PrivateData,\r
1172 IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData\r
1173 )\r
1174/*++\r
1175\r
1176Routine Description:\r
1177\r
1178 Initialize PeiCore Fv List.\r
1179\r
1180Arguments:\r
1181 PrivateData - Pointer to PEI_CORE_INSTANCE.\r
1182 SecCoreData - Pointer to EFI_SEC_PEI_HAND_OFF.\r
1183\r
1184Returns:\r
1185 NONE \r
1186 \r
1187--*/ \r
1188;\r
1189\r
1190EFI_STATUS\r
1191EFIAPI\r
1192FirmwareVolmeInfoPpiNotifyCallback (\r
1193 IN EFI_PEI_SERVICES **PeiServices,\r
1194 IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,\r
1195 IN VOID *Ppi\r
1196 )\r
1197/*++\r
1198\r
1199Routine Description:\r
1200\r
1201 Process Firmware Volum Information once FvInfoPPI install.\r
1202\r
1203Arguments:\r
1204\r
1205 PeiServices - General purpose services available to every PEIM.\r
1206 \r
1207Returns:\r
1208\r
1209 Status - EFI_SUCCESS if the interface could be successfully\r
1210 installed\r
1211\r
1212--*/\r
1213;\r
1214\r
1215\r
1216EFI_STATUS\r
1217EFIAPI \r
1218PeiFfsFindFileByName (\r
1219 IN CONST EFI_GUID *FileName,\r
1220 IN EFI_PEI_FV_HANDLE VolumeHandle,\r
1221 OUT EFI_PEI_FILE_HANDLE *FileHandle\r
1222 )\r
1223/*++\r
1224\r
1225Routine Description:\r
1226\r
1227 Given the input VolumeHandle, search for the next matching name file.\r
1228\r
1229Arguments:\r
1230\r
1231 FileName - File name to search.\r
1232 VolumeHandle - The current FV to search.\r
1233 FileHandle - Pointer to the file matching name in VolumeHandle.\r
1234 - NULL if file not found\r
1235Returns:\r
1236 EFI_STATUS\r
1237 \r
1238--*/ \r
1239;\r
1240\r
1241\r
1242EFI_STATUS\r
1243EFIAPI \r
1244PeiFfsGetFileInfo (\r
1245 IN EFI_PEI_FILE_HANDLE FileHandle,\r
1246 OUT EFI_FV_FILE_INFO *FileInfo\r
1247 )\r
1248/*++\r
1249\r
1250Routine Description:\r
1251\r
1252 Collect information of given file.\r
1253\r
1254Arguments:\r
1255 FileHandle - The handle to file.\r
1256 FileInfo - Pointer to the file information.\r
1257\r
1258Returns:\r
1259 EFI_STATUS\r
1260 \r
1261--*/ \r
1262;\r
1263\r
1264EFI_STATUS\r
1265EFIAPI \r
1266PeiFfsGetVolumeInfo (\r
1267 IN EFI_PEI_FV_HANDLE VolumeHandle,\r
1268 OUT EFI_FV_INFO *VolumeInfo\r
1269 )\r
1270/*++\r
1271\r
1272Routine Description:\r
1273\r
1274 Collect information of given Fv Volume.\r
1275\r
1276Arguments:\r
1277 VolumeHandle - The handle to Fv Volume.\r
1278 VolumeInfo - The pointer to volume information.\r
1279 \r
1280Returns:\r
1281 EFI_STATUS\r
1282 \r
1283--*/ \r
1284;\r
1285\r
1286\r
1287EFI_STATUS\r
1288EFIAPI\r
1289PeiRegisterForShadow (\r
1290 IN EFI_PEI_FILE_HANDLE FileHandle\r
1291 )\r
1292/*++\r
1293\r
1294Routine Description:\r
1295\r
1296 This routine enable a PEIM to register itself to shadow when PEI Foundation\r
1297 discovery permanent memory.\r
1298\r
1299Arguments:\r
1300 FileHandle - File handle of a PEIM.\r
1301 \r
1302Returns:\r
1303 EFI_NOT_FOUND - The file handle doesn't point to PEIM itself.\r
1304 EFI_ALREADY_STARTED - Indicate that the PEIM has been registered itself.\r
1305 EFI_SUCCESS - Successfully to register itself.\r
1306\r
1307--*/ \r
1308;\r
1309\r
1310\r
14e8823a 1311/**\r
1312 This routine enable a PEIM to register itself to shadow when PEI Foundation\r
1313 discovery permanent memory.\r
1314\r
1315 @param FileHandle File handle of a PEIM.\r
1316 \r
1317 @retval EFI_NOT_FOUND The file handle doesn't point to PEIM itself.\r
1318 @retval EFI_ALREADY_STARTED Indicate that the PEIM has been registered itself.\r
1319 @retval EFI_SUCCESS Successfully to register itself.\r
1320\r
1321**/ \r
1322EFI_STATUS\r
1323EFIAPI\r
1324PeiRegisterForShadow (\r
1325 IN EFI_PEI_FILE_HANDLE FileHandle\r
1326 )\r
1327;\r
1328\r
192f6d4c 1329/**\r
1330 Transfers control to a function starting with a new stack.\r
1331\r
1332 Transfers control to the function specified by EntryPoint using the new stack\r
1333 specified by NewStack and passing in the parameters specified by Context1 and\r
1334 Context2. Context1 and Context2 are optional and may be NULL. The function\r
1335 EntryPoint must never return.\r
1336\r
1337 If EntryPoint is NULL, then ASSERT().\r
1338 If NewStack is NULL, then ASSERT().\r
1339\r
1340 @param EntryPoint A pointer to function to call with the new stack.\r
1341 @param Context1 A pointer to the context to pass into the EntryPoint\r
1342 function.\r
1343 @param Context2 A pointer to the context to pass into the EntryPoint\r
1344 function.\r
1345 @param NewStack A pointer to the new stack to use for the EntryPoint\r
1346 function.\r
1347 @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's\r
1348 Reserved on other architectures.\r
1349\r
1350**/\r
1351VOID\r
1352EFIAPI\r
1353PeiSwitchStacks (\r
1354 IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
1355 IN VOID *Context1, OPTIONAL\r
1356 IN VOID *Context2, OPTIONAL\r
1357 IN VOID *NewStack,\r
1358 IN VOID *NewBsp\r
1359 );\r
1360\r
b0d803fe 1361EFI_STATUS\r
1362PeiFindFileEx (\r
1363 IN CONST EFI_PEI_FV_HANDLE FvHandle,\r
1364 IN CONST EFI_GUID *FileName, OPTIONAL\r
1365 IN EFI_FV_FILETYPE SearchType,\r
1366 IN OUT EFI_PEI_FILE_HANDLE *FileHandle,\r
1367 IN OUT EFI_PEI_FV_HANDLE *AprioriFile OPTIONAL\r
1368 )\r
1369/*++\r
1370\r
1371Routine Description:\r
1372 Given the input file pointer, search for the next matching file in the\r
1373 FFS volume as defined by SearchType. The search starts from FileHeader inside\r
1374 the Firmware Volume defined by FwVolHeader.\r
1375\r
1376Arguments:\r
1377 PeiServices - Pointer to the PEI Core Services Table.\r
1378 SearchType - Filter to find only files of this type.\r
1379 Type EFI_FV_FILETYPE_ALL causes no filtering to be done.\r
1380 FwVolHeader - Pointer to the FV header of the volume to search.\r
1381 This parameter must point to a valid FFS volume.\r
1382 FileHeader - Pointer to the current file from which to begin searching.\r
1383 This pointer will be updated upon return to reflect the file found.\r
1384 Flag - Indicator for if this is for PEI Dispath search \r
1385 \r
1386Returns:\r
1387 EFI_NOT_FOUND - No files matching the search criteria were found\r
1388 EFI_SUCCESS\r
1389\r
1390--*/\r
1391;\r
1392\r
1393VOID\r
1394InitializeImageServices (\r
1395 IN PEI_CORE_INSTANCE *PrivateData,\r
1396 IN PEI_CORE_INSTANCE *OldCoreData\r
1397 )\r
1398/*++\r
1399\r
1400Routine Description:\r
1401\r
c58cf83d 1402 Install Pei Load File PPI.\r
b0d803fe 1403\r
1404Arguments:\r
1405\r
1406 PrivateData - Pointer to PEI_CORE_INSTANCE.\r
1407 OldCoreData - Pointer to PEI_CORE_INSTANCE.\r
1408\r
1409Returns:\r
1410\r
1411 NONE.\r
1412 \r
1413--*/ \r
1414;\r
1415\r
192f6d4c 1416#endif\r