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