TianoCore EDK2 master
Loading...
Searching...
No Matches
PeiServicesLib.c
Go to the documentation of this file.
1
9#include <PiPei.h>
10
14
17#include <Library/DebugLib.h>
20
34EFIAPI
37 )
38{
39 CONST EFI_PEI_SERVICES **PeiServices;
40
41 PeiServices = GetPeiServicesTablePointer ();
42 return (*PeiServices)->InstallPpi (PeiServices, PpiList);
43}
44
61EFIAPI
65 )
66{
67 CONST EFI_PEI_SERVICES **PeiServices;
68
69 PeiServices = GetPeiServicesTablePointer ();
70 return (*PeiServices)->ReInstallPpi (PeiServices, OldPpi, NewPpi);
71}
72
87EFIAPI
89 IN CONST EFI_GUID *Guid,
90 IN UINTN Instance,
91 IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor OPTIONAL,
92 IN OUT VOID **Ppi
93 )
94{
95 CONST EFI_PEI_SERVICES **PeiServices;
96
97 PeiServices = GetPeiServicesTablePointer ();
98 return (*PeiServices)->LocatePpi (PeiServices, Guid, Instance, PpiDescriptor, Ppi);
99}
100
117EFIAPI
120 )
121{
122 CONST EFI_PEI_SERVICES **PeiServices;
123
124 PeiServices = GetPeiServicesTablePointer ();
125 return (*PeiServices)->NotifyPpi (PeiServices, NotifyList);
126}
127
138EFIAPI
140 OUT EFI_BOOT_MODE *BootMode
141 )
142{
143 CONST EFI_PEI_SERVICES **PeiServices;
144
145 PeiServices = GetPeiServicesTablePointer ();
146 return (*PeiServices)->GetBootMode (PeiServices, BootMode);
147}
148
158EFIAPI
160 IN EFI_BOOT_MODE BootMode
161 )
162{
163 CONST EFI_PEI_SERVICES **PeiServices;
164
165 PeiServices = GetPeiServicesTablePointer ();
166 return (*PeiServices)->SetBootMode (PeiServices, BootMode);
167}
168
180EFIAPI
182 OUT VOID **HobList
183 )
184{
185 CONST EFI_PEI_SERVICES **PeiServices;
186
187 PeiServices = GetPeiServicesTablePointer ();
188 return (*PeiServices)->GetHobList (PeiServices, HobList);
189}
190
204EFIAPI
206 IN UINT16 Type,
207 IN UINT16 Length,
208 OUT VOID **Hob
209 )
210{
211 CONST EFI_PEI_SERVICES **PeiServices;
212
213 PeiServices = GetPeiServicesTablePointer ();
214 return (*PeiServices)->CreateHob (PeiServices, Type, Length, Hob);
215}
216
231EFIAPI
233 IN UINTN Instance,
234 IN OUT EFI_PEI_FV_HANDLE *VolumeHandle
235 )
236{
237 CONST EFI_PEI_SERVICES **PeiServices;
238
239 PeiServices = GetPeiServicesTablePointer ();
240 return (*PeiServices)->FfsFindNextVolume (PeiServices, Instance, VolumeHandle);
241}
242
258EFIAPI
260 IN EFI_FV_FILETYPE SearchType,
261 IN EFI_PEI_FV_HANDLE VolumeHandle,
262 IN OUT EFI_PEI_FILE_HANDLE *FileHandle
263 )
264{
265 CONST EFI_PEI_SERVICES **PeiServices;
266
267 PeiServices = GetPeiServicesTablePointer ();
268 return (*PeiServices)->FfsFindNextFile (PeiServices, SearchType, VolumeHandle, FileHandle);
269}
270
284EFIAPI
286 IN EFI_SECTION_TYPE SectionType,
287 IN EFI_PEI_FILE_HANDLE FileHandle,
288 OUT VOID **SectionData
289 )
290{
291 CONST EFI_PEI_SERVICES **PeiServices;
292
293 PeiServices = GetPeiServicesTablePointer ();
294 return (*PeiServices)->FfsFindSectionData (PeiServices, SectionType, FileHandle, SectionData);
295}
296
312EFIAPI
314 IN EFI_SECTION_TYPE SectionType,
315 IN UINTN SectionInstance,
316 IN EFI_PEI_FILE_HANDLE FileHandle,
317 OUT VOID **SectionData,
318 OUT UINT32 *AuthenticationStatus
319 )
320{
321 CONST EFI_PEI_SERVICES **PeiServices;
322
323 PeiServices = GetPeiServicesTablePointer ();
324 return (*PeiServices)->FindSectionData3 (PeiServices, SectionType, SectionInstance, FileHandle, SectionData, AuthenticationStatus);
325}
326
340EFIAPI
342 IN EFI_PHYSICAL_ADDRESS MemoryBegin,
343 IN UINT64 MemoryLength
344 )
345{
346 CONST EFI_PEI_SERVICES **PeiServices;
347
348 PeiServices = GetPeiServicesTablePointer ();
349 return (*PeiServices)->InstallPeiMemory (PeiServices, MemoryBegin, MemoryLength);
350}
351
367EFIAPI
369 IN EFI_MEMORY_TYPE MemoryType,
370 IN UINTN Pages,
372 )
373{
374 CONST EFI_PEI_SERVICES **PeiServices;
375
376 PeiServices = GetPeiServicesTablePointer ();
377 return (*PeiServices)->AllocatePages (PeiServices, MemoryType, Pages, Memory);
378}
379
393EFIAPI
396 IN UINTN Pages
397 )
398{
399 CONST EFI_PEI_SERVICES **PeiServices;
400
401 PeiServices = GetPeiServicesTablePointer ();
402 return (*PeiServices)->FreePages (PeiServices, Memory, Pages);
403}
404
417EFIAPI
419 IN UINTN Size,
420 OUT VOID **Buffer
421 )
422{
423 CONST EFI_PEI_SERVICES **PeiServices;
424
425 PeiServices = GetPeiServicesTablePointer ();
426 return (*PeiServices)->AllocatePool (PeiServices, Size, Buffer);
427}
428
437EFIAPI
439 VOID
440 )
441{
442 CONST EFI_PEI_SERVICES **PeiServices;
443
444 PeiServices = GetPeiServicesTablePointer ();
445 return (*PeiServices)->ResetSystem (PeiServices);
446}
447
466EFIAPI
468 IN EFI_PEI_FILE_HANDLE FileHandle
469 )
470{
471 return (*GetPeiServicesTablePointer ())->RegisterForShadow (FileHandle);
472}
473
493EFIAPI
495 IN CONST EFI_PEI_FILE_HANDLE FileHandle,
497 )
498{
499 return (*GetPeiServicesTablePointer ())->FfsGetFileInfo (FileHandle, FileInfo);
500}
501
518EFIAPI
520 IN CONST EFI_PEI_FILE_HANDLE FileHandle,
522 )
523{
524 return (*GetPeiServicesTablePointer ())->FfsGetFileInfo2 (FileHandle, FileInfo);
525}
526
549EFIAPI
551 IN CONST EFI_GUID *FileName,
552 IN CONST EFI_PEI_FV_HANDLE VolumeHandle,
553 OUT EFI_PEI_FILE_HANDLE *FileHandle
554 )
555{
556 return (*GetPeiServicesTablePointer ())->FfsFindFileByName (FileName, VolumeHandle, FileHandle);
557}
558
578EFIAPI
580 IN EFI_PEI_FV_HANDLE VolumeHandle,
581 OUT EFI_FV_INFO *VolumeInfo
582 )
583{
584 return (*GetPeiServicesTablePointer ())->FfsGetVolumeInfo (VolumeHandle, VolumeInfo);
585}
586
619VOID
620EFIAPI
622 IN BOOLEAN InstallFvInfoPpi,
623 IN CONST EFI_GUID *FvFormat OPTIONAL,
624 IN CONST VOID *FvInfo,
625 IN UINT32 FvInfoSize,
626 IN CONST EFI_GUID *ParentFvName OPTIONAL,
627 IN CONST EFI_GUID *ParentFileName OPTIONAL,
628 IN UINT32 AuthenticationStatus
629 )
630{
631 EFI_STATUS Status;
633 EFI_PEI_PPI_DESCRIPTOR *FvInfoPpiDescriptor;
634 EFI_GUID *ParentFvNameValue;
635 EFI_GUID *ParentFileNameValue;
636 EFI_GUID *PpiGuid;
637
638 ParentFvNameValue = NULL;
639 ParentFileNameValue = NULL;
640 if (InstallFvInfoPpi) {
641 //
642 // To install FvInfo Ppi.
643 //
645 ASSERT (FvInfoPpi != NULL);
646 PpiGuid = &gEfiPeiFirmwareVolumeInfoPpiGuid;
647 } else {
648 //
649 // To install FvInfo2 Ppi.
650 //
652 ASSERT (FvInfoPpi != NULL);
653 ((EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI *)FvInfoPpi)->AuthenticationStatus = AuthenticationStatus;
654 PpiGuid = &gEfiPeiFirmwareVolumeInfo2PpiGuid;
655 }
656
657 if (FvFormat != NULL) {
658 CopyGuid (&FvInfoPpi->FvFormat, FvFormat);
659 } else {
660 CopyGuid (&FvInfoPpi->FvFormat, &gEfiFirmwareFileSystem2Guid);
661 //
662 // Since the EFI_FIRMWARE_FILE_SYSTEM2_GUID format is assumed if NULL is specified for FvFormat,
663 // check the FileSystemGuid pointed by FvInfo against EFI_FIRMWARE_FILE_SYSTEM2_GUID to make sure
664 // FvInfo has the firmware file system 2 format.
665 // If the ASSERT really appears, FvFormat needs to be specified correctly, for example,
666 // EFI_FIRMWARE_FILE_SYSTEM3_GUID can be used for firmware file system 3 format, or
667 // ((EFI_FIRMWARE_VOLUME_HEADER *) FvInfo)->FileSystemGuid can be just used for both
668 // firmware file system 2 and 3 format.
669 //
670 ASSERT (CompareGuid (&(((EFI_FIRMWARE_VOLUME_HEADER *)FvInfo)->FileSystemGuid), &gEfiFirmwareFileSystem2Guid));
671 }
672
673 FvInfoPpi->FvInfo = (VOID *)FvInfo;
674 FvInfoPpi->FvInfoSize = FvInfoSize;
675 if (ParentFvName != NULL) {
676 ParentFvNameValue = AllocateCopyPool (sizeof (EFI_GUID), ParentFvName);
677 ASSERT (ParentFvNameValue != NULL);
678 FvInfoPpi->ParentFvName = ParentFvNameValue;
679 }
680
681 if (ParentFileName != NULL) {
682 ParentFileNameValue = AllocateCopyPool (sizeof (EFI_GUID), ParentFileName);
683 ASSERT (ParentFileNameValue != NULL);
684 FvInfoPpi->ParentFileName = ParentFileNameValue;
685 }
686
687 FvInfoPpiDescriptor = AllocatePool (sizeof (EFI_PEI_PPI_DESCRIPTOR));
688 if (FvInfoPpiDescriptor == NULL) {
689 ASSERT (FvInfoPpiDescriptor != NULL);
690 // Need to return here, FV may not be published, but we are out of resources anyway...
691 return;
692 }
693
694 FvInfoPpiDescriptor->Guid = PpiGuid;
695 FvInfoPpiDescriptor->Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
696 FvInfoPpiDescriptor->Ppi = (VOID *)FvInfoPpi;
697 Status = PeiServicesInstallPpi (FvInfoPpiDescriptor);
698 ASSERT_EFI_ERROR (Status);
699}
700
731VOID
732EFIAPI
734 IN CONST EFI_GUID *FvFormat OPTIONAL,
735 IN CONST VOID *FvInfo,
736 IN UINT32 FvInfoSize,
737 IN CONST EFI_GUID *ParentFvName OPTIONAL,
738 IN CONST EFI_GUID *ParentFileName OPTIONAL
739 )
740{
741 InternalPeiServicesInstallFvInfoPpi (TRUE, FvFormat, FvInfo, FvInfoSize, ParentFvName, ParentFileName, 0);
742}
743
775VOID
776EFIAPI
778 IN CONST EFI_GUID *FvFormat OPTIONAL,
779 IN CONST VOID *FvInfo,
780 IN UINT32 FvInfoSize,
781 IN CONST EFI_GUID *ParentFvName OPTIONAL,
782 IN CONST EFI_GUID *ParentFileName OPTIONAL,
783 IN UINT32 AuthenticationStatus
784 )
785{
786 InternalPeiServicesInstallFvInfoPpi (FALSE, FvFormat, FvInfo, FvInfoSize, ParentFvName, ParentFileName, AuthenticationStatus);
787}
788
802VOID
803EFIAPI
805 IN EFI_RESET_TYPE ResetType,
806 IN EFI_STATUS ResetStatus,
807 IN UINTN DataSize,
808 IN VOID *ResetData OPTIONAL
809 )
810{
811 (*GetPeiServicesTablePointer ())->ResetSystem2 (ResetType, ResetStatus, DataSize, ResetData);
812}
UINT64 UINTN
CONST EFI_PEI_SERVICES **EFIAPI GetPeiServicesTablePointer(VOID)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
Definition: MemLibGuid.c:73
GUID *EFIAPI CopyGuid(OUT GUID *DestinationGuid, IN CONST GUID *SourceGuid)
Definition: MemLibGuid.c:39
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID *EFIAPI AllocateCopyPool(IN UINTN AllocationSize, IN CONST VOID *Buffer)
EFI_STATUS EFIAPI PeiServicesFfsGetFileInfo(IN CONST EFI_PEI_FILE_HANDLE FileHandle, OUT EFI_FV_FILE_INFO *FileInfo)
EFI_STATUS EFIAPI PeiServicesFfsFindSectionData(IN EFI_SECTION_TYPE SectionType, IN EFI_PEI_FILE_HANDLE FileHandle, OUT VOID **SectionData)
EFI_STATUS EFIAPI PeiServicesFfsFindNextVolume(IN UINTN Instance, IN OUT EFI_PEI_FV_HANDLE *VolumeHandle)
EFI_STATUS EFIAPI PeiServicesGetBootMode(OUT EFI_BOOT_MODE *BootMode)
EFI_STATUS EFIAPI PeiServicesGetHobList(OUT VOID **HobList)
EFI_STATUS EFIAPI PeiServicesAllocatePool(IN UINTN Size, OUT VOID **Buffer)
EFI_STATUS EFIAPI PeiServicesCreateHob(IN UINT16 Type, IN UINT16 Length, OUT VOID **Hob)
EFI_STATUS EFIAPI PeiServicesFfsFindNextFile(IN EFI_FV_FILETYPE SearchType, IN EFI_PEI_FV_HANDLE VolumeHandle, IN OUT EFI_PEI_FILE_HANDLE *FileHandle)
VOID EFIAPI PeiServicesInstallFvInfoPpi(IN CONST EFI_GUID *FvFormat OPTIONAL, IN CONST VOID *FvInfo, IN UINT32 FvInfoSize, IN CONST EFI_GUID *ParentFvName OPTIONAL, IN CONST EFI_GUID *ParentFileName OPTIONAL)
EFI_STATUS EFIAPI PeiServicesLocatePpi(IN CONST EFI_GUID *Guid, IN UINTN Instance, IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor, IN OUT VOID **Ppi)
EFI_STATUS EFIAPI PeiServicesFfsFindFileByName(IN CONST EFI_GUID *FileName, IN CONST EFI_PEI_FV_HANDLE VolumeHandle, OUT EFI_PEI_FILE_HANDLE *FileHandle)
EFI_STATUS EFIAPI PeiServicesResetSystem(VOID)
EFI_STATUS EFIAPI PeiServicesInstallPeiMemory(IN EFI_PHYSICAL_ADDRESS MemoryBegin, IN UINT64 MemoryLength)
EFI_STATUS EFIAPI PeiServicesNotifyPpi(IN CONST EFI_PEI_NOTIFY_DESCRIPTOR *NotifyList)
EFI_STATUS EFIAPI PeiServicesAllocatePages(IN EFI_MEMORY_TYPE MemoryType, IN UINTN Pages, OUT EFI_PHYSICAL_ADDRESS *Memory)
EFI_STATUS EFIAPI PeiServicesInstallPpi(IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList)
EFI_STATUS EFIAPI PeiServicesReInstallPpi(IN CONST EFI_PEI_PPI_DESCRIPTOR *OldPpi, IN CONST EFI_PEI_PPI_DESCRIPTOR *NewPpi)
EFI_STATUS EFIAPI PeiServicesSetBootMode(IN EFI_BOOT_MODE BootMode)
EFI_STATUS EFIAPI PeiServicesRegisterForShadow(IN EFI_PEI_FILE_HANDLE FileHandle)
EFI_STATUS EFIAPI PeiServicesFfsGetVolumeInfo(IN EFI_PEI_FV_HANDLE VolumeHandle, OUT EFI_FV_INFO *VolumeInfo)
#define NULL
Definition: Base.h:319
#define CONST
Definition: Base.h:259
#define TRUE
Definition: Base.h:301
#define FALSE
Definition: Base.h:307
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
#define ASSERT_EFI_ERROR(StatusParameter)
Definition: DebugLib.h:462
EFI_STATUS EFIAPI PeiServicesFfsGetFileInfo2(IN CONST EFI_PEI_FILE_HANDLE FileHandle, OUT EFI_FV_FILE_INFO2 *FileInfo)
EFI_STATUS EFIAPI PeiServicesFreePages(IN EFI_PHYSICAL_ADDRESS Memory, IN UINTN Pages)
VOID EFIAPI PeiServicesInstallFvInfo2Ppi(IN CONST EFI_GUID *FvFormat OPTIONAL, IN CONST VOID *FvInfo, IN UINT32 FvInfoSize, IN CONST EFI_GUID *ParentFvName OPTIONAL, IN CONST EFI_GUID *ParentFileName OPTIONAL, IN UINT32 AuthenticationStatus)
VOID EFIAPI InternalPeiServicesInstallFvInfoPpi(IN BOOLEAN InstallFvInfoPpi, IN CONST EFI_GUID *FvFormat OPTIONAL, IN CONST VOID *FvInfo, IN UINT32 FvInfoSize, IN CONST EFI_GUID *ParentFvName OPTIONAL, IN CONST EFI_GUID *ParentFileName OPTIONAL, IN UINT32 AuthenticationStatus)
VOID EFIAPI PeiServicesResetSystem2(IN EFI_RESET_TYPE ResetType, IN EFI_STATUS ResetStatus, IN UINTN DataSize, IN VOID *ResetData OPTIONAL)
EFI_STATUS EFIAPI PeiServicesFfsFindSectionData3(IN EFI_SECTION_TYPE SectionType, IN UINTN SectionInstance, IN EFI_PEI_FILE_HANDLE FileHandle, OUT VOID **SectionData, OUT UINT32 *AuthenticationStatus)
UINT32 EFI_BOOT_MODE
Definition: PiBootMode.h:18
VOID * EFI_PEI_FILE_HANDLE
Definition: PiPeiCis.h:26
VOID * EFI_PEI_FV_HANDLE
Definition: PiPeiCis.h:21
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
EFI_FILE_INFO * FileInfo(IN EFI_FILE_HANDLE FHand)
VOID EFIAPI ResetSystem2(IN EFI_RESET_TYPE ResetType, IN EFI_STATUS ResetStatus, IN UINTN DataSize, IN VOID *ResetData OPTIONAL)
Definition: ResetSystem.c:278
UINT64 EFI_PHYSICAL_ADDRESS
Definition: UefiBaseType.h:50
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
EFI_MEMORY_TYPE
EFI_RESET_TYPE
Definition: Base.h:213