]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/PeiServicesLib/PeiServicesLib.c
Remove extra blank for array
[mirror_edk2.git] / MdePkg / Library / PeiServicesLib / PeiServicesLib.c
index c525195877fe4470579100441dfe3a2ff970a517..a6f7de2a865170a098a094680be1795caafa7c06 100644 (file)
 \r
 #include <PiPei.h>\r
 \r
+#include <Ppi/FirmwareVolumeInfo.h>\r
+#include <Guid/FirmwareFileSystem2.h>\r
 \r
 #include <Library/PeiServicesLib.h>\r
 #include <Library/PeiServicesTablePointerLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+\r
+\r
+GLOBAL_REMOVE_IF_UNREFERENCED 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
   This service enables a given PEIM to register an interface into the PEI Foundation.\r
@@ -137,7 +151,7 @@ PeiServicesNotifyPpi (
 EFI_STATUS\r
 EFIAPI\r
 PeiServicesGetBootMode (\r
-  IN OUT EFI_BOOT_MODE          *BootMode\r
+  OUT EFI_BOOT_MODE          *BootMode\r
   )\r
 {\r
   CONST EFI_PEI_SERVICES **PeiServices;\r
@@ -178,7 +192,7 @@ PeiServicesSetBootMode (
 EFI_STATUS\r
 EFIAPI\r
 PeiServicesGetHobList (\r
-  IN OUT VOID                   **HobList\r
+  OUT VOID                      **HobList\r
   )\r
 {\r
   CONST EFI_PEI_SERVICES **PeiServices;\r
@@ -203,7 +217,7 @@ EFIAPI
 PeiServicesCreateHob (\r
   IN UINT16                     Type,\r
   IN UINT16                     Length,\r
-  IN OUT VOID                   **Hob\r
+  OUT VOID                      **Hob\r
   )\r
 {\r
   CONST EFI_PEI_SERVICES **PeiServices;\r
@@ -268,7 +282,7 @@ PeiServicesFfsFindNextFile (
   This service enables PEIMs to discover sections of a given type within a valid FFS file.\r
 \r
   @param  SectionType           The value of the section type to find.\r
-  @param  FfsFileHeader         A pointer to the file header that contains the set of sections to\r
+  @param  FileHandle            A pointer to the file header that contains the set of sections to\r
                                 be searched.\r
   @param  SectionData           A pointer to the discovered section, if successful.\r
 \r
@@ -280,14 +294,14 @@ EFI_STATUS
 EFIAPI\r
 PeiServicesFfsFindSectionData (\r
   IN EFI_SECTION_TYPE           SectionType,\r
-  IN EFI_PEI_FILE_HANDLE        FfsFileHeader,\r
+  IN EFI_PEI_FILE_HANDLE        FileHandle,\r
   OUT VOID                      **SectionData\r
   )\r
 {\r
   CONST EFI_PEI_SERVICES **PeiServices;\r
 \r
   PeiServices = GetPeiServicesTablePointer ();\r
-  return (*PeiServices)->FfsFindSectionData (PeiServices, SectionType, FfsFileHeader, SectionData);\r
+  return (*PeiServices)->FfsFindSectionData (PeiServices, SectionType, FileHandle, SectionData);\r
 }\r
 \r
 /**\r
@@ -370,8 +384,6 @@ PeiServicesAllocatePool (
 /**\r
   Resets the entire platform.\r
 \r
-  @param  VOID\r
-\r
   @retval EFI_SUCCESS           The function completed successfully.\r
   @retval EFI_NOT_AVAILABLE_YET The service has not been installed yet.\r
 \r
@@ -411,10 +423,7 @@ PeiServicesRegisterForShadow (
   IN  EFI_PEI_FILE_HANDLE FileHandle\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES **PeiServices;\r
-\r
-  PeiServices = GetPeiServicesTablePointer ();\r
-  return (*PeiServices)->RegisterForShadow (FileHandle);\r
+  return (*GetPeiServicesTablePointer())->RegisterForShadow (FileHandle);\r
 }\r
 \r
 /**\r
@@ -436,16 +445,13 @@ PeiServicesRegisterForShadow (
   \r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
+EFIAPI \r
 PeiServicesFfsGetFileInfo (\r
   IN CONST  EFI_PEI_FILE_HANDLE   FileHandle,\r
   OUT EFI_FV_FILE_INFO            *FileInfo\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES **PeiServices;\r
-\r
-  PeiServices = GetPeiServicesTablePointer ();\r
-  return (*PeiServices)->FfsGetFileInfo (FileHandle, FileInfo);\r
+  return (*GetPeiServicesTablePointer())->FfsGetFileInfo (FileHandle, FileInfo);\r
 }\r
 \r
 \r
@@ -460,8 +466,7 @@ PeiServicesFfsGetFileInfo (
   @param VolumeHandle   The firmware volume to search FileHandle\r
                         Upon exit, points to the found file's\r
                         handle or NULL if it could not be found.\r
-\r
-  @param FileHandle     The filehandle found in volume.\r
+  @param FileHandle     Pointer to found file handle \r
 \r
   @retval EFI_SUCCESS             File was found.\r
 \r
@@ -511,3 +516,64 @@ PeiServicesFfsGetVolumeInfo (
   return (*GetPeiServicesTablePointer())->FfsGetVolumeInfo (VolumeHandle, VolumeInfo);\r
 }\r
 \r
+/**\r
+  Install a EFI_PEI_FIRMWARE_VOLUME_INFO_PPI instance so the PEI Core will be notified about a new firmware volume.\r
+  \r
+  This function allocates, initializes, and installs a new EFI_PEI_FIRMWARE_VOLUME_INFO_PPI using \r
+  the parameters passed in to initialize the fields of the EFI_PEI_FIRMWARE_VOLUME_INFO_PPI instance.\r
+  If the resources can not be allocated for EFI_PEI_FIRMWARE_VOLUME_INFO_PPI, then ASSERT().\r
+  If the EFI_PEI_FIRMWARE_VOLUME_INFO_PPI can not be installed, then ASSERT().\r
+\r
+  \r
+  @param  FvFormat             Unique identifier of the format of the memory-mapped firmware volume.\r
+                               This parameter is optional and may be NULL.  \r
+                               If NULL is specified, the EFI_FIRMWARE_FILE_SYSTEM2_GUID format is assumed.\r
+  @param  FvInfo               Points to a buffer which allows the EFI_PEI_FIRMWARE_VOLUME_PPI to process the volume. \r
+                               The format of this buffer is specific to the FvFormat. For memory-mapped firmware volumes, \r
+                               this typically points to the first byte of the firmware volume.\r
+  @param  FvInfoSize           The size, in bytes, of FvInfo. For memory-mapped firmware volumes, \r
+                               this is typically the size of the firmware volume.\r
+  @param  ParentFvName         If the new firmware volume originated from a file in a different firmware volume, \r
+                               then this parameter specifies the GUID name of the originating firmware volume.\r
+                               Otherwise, this parameter must be NULL.\r
+  @param  ParentFileName       If the new firmware volume originated from a file in a different firmware volume, \r
+                               then this parameter specifies the GUID file name of the originating firmware file.\r
+                               Otherwise, this parameter must be NULL.\r
+**/\r
+VOID\r
+EFIAPI\r
+PeiServicesInstallFvInfoPpi (\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