From 729675ae6363cda914a6a28d07a21e2cf330967d Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Thu, 13 Nov 2008 08:59:25 +0000 Subject: Add PeiServicesInstallFvInfoPpi(). It is formerly PiLibInstallFvInfoPpi() in PeiPiLib git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6510 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/PeiServicesLib/PeiServicesLib.c | 73 ++++++++++++++++++++++++ MdePkg/Library/PeiServicesLib/PeiServicesLib.inf | 11 +++- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/MdePkg/Library/PeiServicesLib/PeiServicesLib.c b/MdePkg/Library/PeiServicesLib/PeiServicesLib.c index f3ef83a8a8..599eb2e3e1 100644 --- a/MdePkg/Library/PeiServicesLib/PeiServicesLib.c +++ b/MdePkg/Library/PeiServicesLib/PeiServicesLib.c @@ -15,9 +15,23 @@ #include +#include +#include #include #include +#include +#include +#include + + +GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_PEI_PPI_DESCRIPTOR mPpiListTemplate [] = { + { + (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), + &gEfiPeiFirmwareVolumeInfoPpiGuid, + NULL + } +}; /** This service enables a given PEIM to register an interface into the PEI Foundation. @@ -505,3 +519,62 @@ PeiServicesFfsGetVolumeInfo ( return (*GetPeiServicesTablePointer())->FfsGetVolumeInfo (VolumeHandle, VolumeInfo); } +/** + Install a EFI_PEI_FIRMWARE_VOLUME_INFO PPI to inform PEI core about the existence of a new Firmware Volume. + + The function allocate the EFI_PEI_PPI_DESCRIPTOR structure and update the fields accordingly to parameter passed + in and install the PPI. + + @param FvFormat Unique identifier of the format of the memory-mapped firmware volume. + If NULL is specified, EFI_FIRMWARE_FILE_SYSTEM2_GUID is used as the Format GUID. + @param FvInfo Points to a buffer which allows the EFI_PEI_FIRMWARE_VOLUME_PPI to + process the volume. The format of this buffer is specific to the FvFormat. For + memory-mapped firmware volumes, this typically points to the first byte of the + firmware volume. + @param FvInfoSize Size of the data provided by FvInfo. For memory-mapped firmware volumes, this is + typically the size of the firmware volume. + @param ParentFvName If the firmware volume originally came from a firmware file, then these point to the + parent firmware volume name. If it did not originally come from a firmware file, + these should be NULL. + @param ParentFileName If the firmware volume originally came from a firmware file, then these point to the + firmware volume file. If it did not originally come from a firmware file, + these should be NULL. + +**/ +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 Status; + EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *FvInfoPpi; + EFI_PEI_PPI_DESCRIPTOR *FvInfoPpiDescriptor; + + FvInfoPpi = AllocateZeroPool (sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI)); + ASSERT( FvInfoPpi != NULL); + + if (FvFormat != NULL) { + CopyGuid (&FvInfoPpi->FvFormat, FvFormat); + } else { + CopyGuid (&FvInfoPpi->FvFormat, &gEfiFirmwareFileSystem2Guid); + } + FvInfoPpi->FvInfo = (VOID *) FvInfo; + FvInfoPpi->FvInfoSize = FvInfoSize; + FvInfoPpi->ParentFvName = (EFI_GUID *) ParentFvName; + FvInfoPpi->ParentFileName = (EFI_GUID *) ParentFileName; + + + FvInfoPpiDescriptor = AllocateCopyPool (sizeof(EFI_PEI_PPI_DESCRIPTOR), mPpiListTemplate); + ASSERT (FvInfoPpiDescriptor != NULL); + + FvInfoPpiDescriptor->Ppi = (VOID *) FvInfoPpi; + Status = PeiServicesInstallPpi (FvInfoPpiDescriptor); + ASSERT_EFI_ERROR (Status); + +} + diff --git a/MdePkg/Library/PeiServicesLib/PeiServicesLib.inf b/MdePkg/Library/PeiServicesLib/PeiServicesLib.inf index fb58f02b1e..5e52286290 100644 --- a/MdePkg/Library/PeiServicesLib/PeiServicesLib.inf +++ b/MdePkg/Library/PeiServicesLib/PeiServicesLib.inf @@ -34,7 +34,16 @@ [Packages] MdePkg/MdePkg.dec - [LibraryClasses] PeiServicesTablePointerLib + MemoryAllocationLib + DebugLib + +[Guids] + gEfiFirmwareFileSystem2Guid + +[Ppis] + gEfiPeiFirmwareVolumeInfoPpiGuid + + -- cgit v1.2.3