]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/PeiServicesLib/PeiServicesLib.c
Fix ECC issue.
[mirror_edk2.git] / MdePkg / Library / PeiServicesLib / PeiServicesLib.c
index e64618de21845511974914f7dc6f64b684e16064..d099d3592852eade89eca917d87b6a2fb28df7cc 100644 (file)
@@ -1,21 +1,26 @@
 /** @file\r
   Implementation for PEI Services Library.\r
 \r
-  Copyright (c) 2006, Intel Corporation<BR>\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
+  Copyright (c) 2006 - 2008, Intel Corporation<BR>\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
-  Module Name:  PeiServicesLib.c\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
+\r
+#include <PiPei.h>\r
+\r
+\r
+#include <Library/PeiServicesLib.h>\r
+#include <Library/PeiServicesTablePointerLib.h>\r
+\r
 /**\r
-  This service enables a given PEIM to register an interface into the PEI Foundation. \r
+  This service enables a given PEIM to register an interface into the PEI Foundation.\r
 \r
   @param  PpiList               A pointer to the list of interfaces that the caller shall install.\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 PeiServicesInstallPpi (\r
-  IN EFI_PEI_PPI_DESCRIPTOR     *PpiList\r
+  IN CONST EFI_PEI_PPI_DESCRIPTOR     *PpiList\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->InstallPpi (PeiServices, PpiList);\r
 }\r
@@ -56,12 +61,12 @@ PeiServicesInstallPpi (
 EFI_STATUS\r
 EFIAPI\r
 PeiServicesReInstallPpi (\r
-  IN EFI_PEI_PPI_DESCRIPTOR     *OldPpi,\r
-  IN EFI_PEI_PPI_DESCRIPTOR     *NewPpi\r
+  IN CONST EFI_PEI_PPI_DESCRIPTOR     *OldPpi,\r
+  IN CONST EFI_PEI_PPI_DESCRIPTOR     *NewPpi\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->ReInstallPpi (PeiServices, OldPpi, NewPpi);\r
 }\r
@@ -82,14 +87,14 @@ PeiServicesReInstallPpi (
 EFI_STATUS\r
 EFIAPI\r
 PeiServicesLocatePpi (\r
-  IN EFI_GUID                   *Guid,\r
+  IN CONST EFI_GUID                   *Guid,\r
   IN UINTN                      Instance,\r
   IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,\r
   IN OUT VOID                   **Ppi\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->LocatePpi (PeiServices, Guid, Instance, PpiDescriptor, Ppi);\r
 }\r
@@ -111,17 +116,17 @@ PeiServicesLocatePpi (
 EFI_STATUS\r
 EFIAPI\r
 PeiServicesNotifyPpi (\r
-  IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyList\r
+  IN CONST EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyList\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->NotifyPpi (PeiServices, NotifyList);\r
 }\r
 \r
 /**\r
-  This service enables PEIMs to ascertain the present value of the boot mode.  \r
+  This service enables PEIMs to ascertain the present value of the boot mode.\r
 \r
   @param  BootMode              A pointer to contain the value of the boot mode.\r
 \r
@@ -135,14 +140,14 @@ PeiServicesGetBootMode (
   IN OUT EFI_BOOT_MODE          *BootMode\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->GetBootMode (PeiServices, BootMode);\r
 }\r
 \r
 /**\r
-  This service enables PEIMs to update the boot mode variable.    \r
+  This service enables PEIMs to update the boot mode variable.\r
 \r
   @param  BootMode              The value of the boot mode to set.\r
 \r
@@ -155,8 +160,8 @@ PeiServicesSetBootMode (
   IN EFI_BOOT_MODE              BootMode\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->SetBootMode (PeiServices, BootMode);\r
 }\r
@@ -173,11 +178,11 @@ PeiServicesSetBootMode (
 EFI_STATUS\r
 EFIAPI\r
 PeiServicesGetHobList (\r
-  IN OUT VOID                   **HobList\r
+  OUT VOID                   **HobList\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->GetHobList (PeiServices, HobList);\r
 }\r
@@ -198,11 +203,11 @@ EFIAPI
 PeiServicesCreateHob (\r
   IN UINT16                     Type,\r
   IN UINT16                     Length,\r
-  IN OUT VOID                   **Hob\r
+  OUT VOID                      **Hob\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->CreateHob (PeiServices, Type, Length, Hob);\r
 }\r
@@ -212,7 +217,7 @@ PeiServicesCreateHob (
 \r
   @param  Instance              This instance of the firmware volume to find.  The value 0 is the\r
                                 Boot Firmware Volume (BFV).\r
-  @param  FwVolHeader           Pointer to the firmware volume header of the volume to return.\r
+  @param  VolumeHandle          Handle of the firmware volume header of the volume to return.\r
 \r
   @retval EFI_SUCCESS           The volume was found.\r
   @retval EFI_NOT_FOUND         The volume was not found.\r
@@ -223,22 +228,22 @@ EFI_STATUS
 EFIAPI\r
 PeiServicesFfsFindNextVolume (\r
   IN UINTN                          Instance,\r
-  IN OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader\r
+  IN OUT EFI_PEI_FV_HANDLE          *VolumeHandle\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
-  return (*PeiServices)->FfsFindNextVolume (PeiServices, Instance, FwVolHeader);\r
+  return (*PeiServices)->FfsFindNextVolume (PeiServices, Instance, VolumeHandle);\r
 }\r
 \r
 /**\r
   This service enables PEIMs to discover additional firmware files.\r
 \r
   @param  SearchType            A filter to find files only of this type.\r
-  @param  FwVolHeader           Pointer to the firmware volume header of the volume to search.\r
+  @param  VolumeHandle          Pointer to the firmware volume header of the volume to search.\r
                                 This parameter must point to a valid FFS volume.\r
-  @param  FileHeader            Pointer to the current file from which to begin searching.\r
+  @param  FileHandle            Handle of the current file from which to begin searching.\r
 \r
   @retval EFI_SUCCESS           The file was found.\r
   @retval EFI_NOT_FOUND         The file was not found.\r
@@ -249,20 +254,20 @@ EFI_STATUS
 EFIAPI\r
 PeiServicesFfsFindNextFile (\r
   IN EFI_FV_FILETYPE            SearchType,\r
-  IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
-  IN OUT EFI_FFS_FILE_HEADER    **FileHeader\r
+  IN EFI_PEI_FV_HANDLE          VolumeHandle,\r
+  IN OUT EFI_PEI_FILE_HANDLE    *FileHandle\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
-  return (*PeiServices)->FfsFindNextFile (PeiServices, SearchType, FwVolHeader, FileHeader);\r
+  return (*PeiServices)->FfsFindNextFile (PeiServices, SearchType, VolumeHandle, FileHandle);\r
 }\r
 \r
 /**\r
   This service enables PEIMs to discover sections of a given type within a valid FFS file.\r
 \r
-  @param  SearchType            The value of the section type to find.\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
                                 be searched.\r
   @param  SectionData           A pointer to the discovered section, if successful.\r
@@ -275,12 +280,12 @@ EFI_STATUS
 EFIAPI\r
 PeiServicesFfsFindSectionData (\r
   IN EFI_SECTION_TYPE           SectionType,\r
-  IN EFI_FFS_FILE_HEADER        *FfsFileHeader,\r
-  IN OUT VOID                   **SectionData\r
+  IN EFI_PEI_FILE_HANDLE        FfsFileHeader,\r
+  OUT VOID                      **SectionData\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->FfsFindSectionData (PeiServices, SectionType, FfsFileHeader, SectionData);\r
 }\r
@@ -304,8 +309,8 @@ PeiServicesInstallPeiMemory (
   IN UINT64                     MemoryLength\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->InstallPeiMemory (PeiServices, MemoryBegin, MemoryLength);\r
 }\r
@@ -329,11 +334,11 @@ EFIAPI
 PeiServicesAllocatePages (\r
   IN EFI_MEMORY_TYPE            MemoryType,\r
   IN UINTN                      Pages,\r
-  IN OUT EFI_PHYSICAL_ADDRESS   *Memory\r
+  OUT EFI_PHYSICAL_ADDRESS      *Memory\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->AllocatePages (PeiServices, MemoryType, Pages, Memory);\r
 }\r
@@ -356,16 +361,18 @@ PeiServicesAllocatePool (
   OUT VOID                      **Buffer\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-  \r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
   PeiServices = GetPeiServicesTablePointer ();\r
   return (*PeiServices)->AllocatePool (PeiServices, Size, Buffer);\r
 }\r
 \r
 /**\r
-  This service resets the entire platform, including all processors and devices, and reboots the\r
-  system. \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
 **/\r
@@ -375,8 +382,132 @@ PeiServicesResetSystem (
   VOID\r
   )\r
 {\r
-  EFI_PEI_SERVICES  **PeiServices;\r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
+  PeiServices = GetPeiServicesTablePointer ();\r
+  return (*PeiServices)->ResetSystem (PeiServices);\r
+}\r
+\r
+/**\r
+  This service is a wrapper for the PEI Service RegisterForShadow(), except the pointer to the PEI Services \r
+  Table has been removed.  See the Platform Initialization Pre-EFI Initialization Core Interface \r
+  Specification for details. \r
+\r
+  @param FileHandle   PEIM's file handle. Must be the currently\r
+                      executing PEIM.\r
+  \r
+  @retval EFI_SUCCESS   The PEIM was successfully registered for\r
+                        shadowing.\r
+\r
+  @retval EFI_ALREADY_STARTED   The PEIM was previously\r
+                                registered for shadowing.\r
+\r
+  @retval EFI_NOT_FOUND   The FileHandle does not refer to a\r
+                          valid file handle.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiServicesRegisterForShadow (\r
+  IN  EFI_PEI_FILE_HANDLE FileHandle\r
+  )\r
+{\r
+  CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
+  PeiServices = GetPeiServicesTablePointer ();\r
+  return (*PeiServices)->RegisterForShadow (FileHandle);\r
+}\r
+\r
+/**\r
+  This service is a wrapper for the PEI Service FfsGetFileInfo(), except the pointer to the PEI Services \r
+  Table has been removed.  See the Platform Initialization Pre-EFI Initialization Core Interface \r
+  Specification for details. \r
+\r
+  @param FileHandle   Handle of the file.\r
+\r
+  @param FileInfo     Upon exit, points to the file's\r
+                      information.\r
+\r
+  @retval EFI_SUCCESS             File information returned.\r
+  \r
+  @retval EFI_INVALID_PARAMETER   If FileHandle does not\r
+                                  represent a valid file.\r
   \r
+  @retval EFI_INVALID_PARAMETER   If FileInfo is NULL.\r
+  \r
+**/\r
+EFI_STATUS\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)->PeiResetSystem (PeiServices);\r
+  return (*PeiServices)->FfsGetFileInfo (FileHandle, FileInfo);\r
+}\r
+\r
+\r
+/**\r
+  This service is a wrapper for the PEI Service FfsFindByName(), except the pointer to the PEI Services \r
+  Table has been removed.  See the Platform Initialization Pre-EFI Initialization Core Interface \r
+  Specification for details. \r
+\r
+  @param FileName       A pointer to the name of the file to\r
+                        find within the firmware volume.\r
+\r
+  @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
+\r
+  @retval EFI_SUCCESS             File was found.\r
+\r
+  @retval EFI_NOT_FOUND           File was not found.\r
+\r
+  @retval EFI_INVALID_PARAMETER   VolumeHandle or FileHandle or\r
+                                  FileName was NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiServicesFfsFindFileByName (\r
+  IN CONST  EFI_GUID            *FileName,\r
+  IN CONST  EFI_PEI_FV_HANDLE   VolumeHandle,\r
+  OUT       EFI_PEI_FILE_HANDLE *FileHandle\r
+  )\r
+{\r
+  return (*GetPeiServicesTablePointer())->FfsFindFileByName (FileName, VolumeHandle, FileHandle);\r
+}\r
+\r
+\r
+/**\r
+  This service is a wrapper for the PEI Service FfsGetVolumeInfo(), except the pointer to the PEI Services \r
+  Table has been removed.  See the Platform Initialization Pre-EFI Initialization Core Interface \r
+  Specification for details. \r
+\r
+  @param VolumeHandle   Handle of the volume.\r
+\r
+  @param VolumeInfo     Upon exit, points to the volume's\r
+                        information.\r
+\r
+  @retval EFI_SUCCESS             File information returned.\r
+  \r
+  @retval EFI_INVALID_PARAMETER   If FileHandle does not\r
+                                  represent a valid file.\r
+  \r
+  @retval EFI_INVALID_PARAMETER   If FileInfo is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiServicesFfsGetVolumeInfo (\r
+  IN  EFI_PEI_FV_HANDLE       VolumeHandle,\r
+  OUT EFI_FV_INFO             *VolumeInfo\r
+  )\r
+{\r
+  return (*GetPeiServicesTablePointer())->FfsGetVolumeInfo (VolumeHandle, VolumeInfo);\r
 }\r
+\r