-/** @file\r
- MDE PI library functions and macros for PEI phase\r
-\r
- Copyright (c) 2007 - 2008, Intel Corporation \r
- All rights reserved. This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
- http://opensource.org/licenses/bsd-license.php \r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
-**/\r
-\r
-#include <PiPei.h>\r
-#include <Ppi/FirmwareVolumeInfo.h>\r
-#include <Guid/FirmwareFileSystem2.h>\r
-\r
-\r
-#include <Library/DebugLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/PeiServicesLib.h>\r
-#include <Library/PeiPiLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-\r
-CONST EFI_PEI_PPI_DESCRIPTOR mPpiListTemplate [] = {\r
- {\r
- (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
- &gEfiPeiFirmwareVolumeInfoPpiGuid,\r
- NULL\r
- }\r
-};\r
-\r
-/**\r
- Install a EFI_PEI_FIRMWARE_VOLUME_INFO PPI to inform PEI core about the existence of a new Firmware Volume.\r
- \r
- The function allocate the EFI_PEI_PPI_DESCRIPTOR structure and update the fields accordingly to parameter passed\r
- in and install the PPI.\r
- \r
- @param FvFormat Unique identifier of the format of the memory-mapped firmware volume. \r
- If NULL is specified, EFI_FIRMWARE_FILE_SYSTEM2_GUID is used as the Format GUID.\r
- @param FvInfo Points to a buffer which allows the EFI_PEI_FIRMWARE_VOLUME_PPI to\r
- process the volume. The format of this buffer is specific to the FvFormat. For\r
- memory-mapped firmware volumes, this typically points to the first byte of the\r
- firmware volume.\r
- @param FvInfoSize Size of the data provided by FvInfo. For memory-mapped firmware volumes, this is\r
- typically the size of the firmware volume.\r
- @param ParentFvName If the firmware volume originally came from a firmware file, then these point to the\r
- parent firmware volume name. If it did not originally come from a firmware file, \r
- these should be NULL.\r
- @param ParentFileName If the firmware volume originally came from a firmware file, then these point to the\r
- firmware volume file. If it did not originally come from a firmware file, \r
- these should be NULL.\r
- \r
-**/\r
-VOID\r
-EFIAPI\r
-PiLibInstallFvInfoPpi (\r
- IN CONST EFI_GUID *FvFormat, OPTIONAL\r
- IN CONST VOID *FvInfo,\r
- IN UINT32 FvInfoSize,\r
- IN CONST EFI_GUID *ParentFvName, OPTIONAL\r
- IN CONST EFI_GUID *ParentFileName OPTIONAL\r
- )\r
-{\r
- EFI_STATUS Status; \r
- EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *FvInfoPpi;\r
- EFI_PEI_PPI_DESCRIPTOR *FvInfoPpiDescriptor;\r
-\r
- FvInfoPpi = AllocateZeroPool (sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI));\r
- ASSERT( FvInfoPpi != NULL);\r
-\r
- if (FvFormat != NULL) {\r
- CopyGuid (&FvInfoPpi->FvFormat, FvFormat);\r
- } else {\r
- CopyGuid (&FvInfoPpi->FvFormat, &gEfiFirmwareFileSystem2Guid);\r
- }\r
- FvInfoPpi->FvInfo = (VOID *) FvInfo;\r
- FvInfoPpi->FvInfoSize = FvInfoSize;\r
- FvInfoPpi->ParentFvName = (EFI_GUID *) ParentFvName;\r
- FvInfoPpi->ParentFileName = (EFI_GUID *) ParentFileName;\r
-\r
-\r
- FvInfoPpiDescriptor = AllocateCopyPool (sizeof(EFI_PEI_PPI_DESCRIPTOR), mPpiListTemplate);\r
- ASSERT (FvInfoPpiDescriptor != NULL);\r
-\r
- FvInfoPpiDescriptor->Ppi = (VOID *) FvInfoPpi;\r
- Status = PeiServicesInstallPpi (FvInfoPpiDescriptor);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
-}\r
-\r