/** @file\r
Implementation for PEI Services Library.\r
\r
- Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\r
- 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
+ Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
PeiServicesLocatePpi (\r
IN CONST EFI_GUID *Guid,\r
IN UINTN Instance,\r
- IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,\r
+ IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor, OPTIONAL\r
IN OUT VOID **Ppi\r
)\r
{\r
This service enables PEIMs to register a given service to be invoked when another service is\r
installed or reinstalled.\r
\r
- @param NotifyList A pointer to the list of notification interfaces \r
+ @param NotifyList A pointer to the list of notification interfaces\r
that the caller shall install.\r
\r
@retval EFI_SUCCESS The interface was successfully installed.\r
/**\r
This service enables a PEIM to ascertain the address of the list of HOBs in memory.\r
\r
- @param HobList A pointer to the list of HOBs that the PEI Foundation \r
+ @param HobList A pointer to the list of HOBs that the PEI Foundation\r
will initialize.\r
- \r
+\r
@retval EFI_SUCCESS The list was successfully returned.\r
@retval EFI_NOT_AVAILABLE_YET The HOB list is not yet published.\r
\r
\r
@param Type The type of HOB to be installed.\r
@param Length The length of the HOB to be added.\r
- @param Hob The address of a pointer that will contain the \r
+ @param Hob The address of a pointer that will contain the\r
HOB header.\r
\r
@retval EFI_SUCCESS The HOB was successfully created.\r
/**\r
This service enables PEIMs to discover additional firmware volumes.\r
\r
- @param Instance This instance of the firmware volume to find. The \r
+ @param Instance This instance of the firmware volume to find. The\r
value 0 is the Boot Firmware Volume (BFV).\r
@param VolumeHandle Handle of the firmware volume header of the volume\r
to return.\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 VolumeHandle The pointer to the firmware volume header of the \r
- volume to search. This parameter must point to a \r
- valid FFS volume. \r
+ @param VolumeHandle The pointer to the firmware volume header of the\r
+ volume to search. This parameter must point to a\r
+ valid FFS volume.\r
@param FileHandle Handle of the current file from which to begin searching.\r
\r
@retval EFI_SUCCESS The file was found.\r
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 FileHandle A pointer to the file header that contains the set \r
+ @param FileHandle A pointer to the file header that contains the set\r
of sections to be searched.\r
@param SectionData A pointer to the discovered section, if successful.\r
\r
\r
@param SectionType The value of the section type to find.\r
@param SectionInstance Section instance to find.\r
- @param FileHandle A pointer to the file header that contains the set \r
+ @param FileHandle A pointer to the file header that contains the set\r
of sections to be searched.\r
@param SectionData A pointer to the discovered section, if successful.\r
@param AuthenticationStatus A pointer to the authentication status for this section.\r
}\r
\r
/**\r
- This service enables PEIMs to allocate memory after the permanent memory has been\r
- installed by a PEIM.\r
+ This service enables PEIMs to allocate memory.\r
\r
@param MemoryType Type of memory to allocate.\r
@param Pages The number of pages to allocate.\r
@param Memory Pointer of memory allocated.\r
\r
@retval EFI_SUCCESS The memory range was successfully allocated.\r
- @retval EFI_INVALID_PARAMETER Type is not equal to AllocateAnyPages.\r
- @retval EFI_NOT_AVAILABLE_YET Called with permanent memory not available.\r
+ @retval EFI_INVALID_PARAMETER Type is not equal to EfiLoaderCode, EfiLoaderData, EfiRuntimeServicesCode,\r
+ EfiRuntimeServicesData, EfiBootServicesCode, EfiBootServicesData,\r
+ EfiACPIReclaimMemory, EfiReservedMemoryType, or EfiACPIMemoryNVS.\r
@retval EFI_OUT_OF_RESOURCES The pages could not be allocated.\r
\r
**/\r
return (*PeiServices)->AllocatePages (PeiServices, MemoryType, Pages, Memory);\r
}\r
\r
+/**\r
+ This service enables PEIMs to free memory.\r
+\r
+ @param Memory Memory to be freed.\r
+ @param Pages The number of pages to free.\r
+\r
+ @retval EFI_SUCCESS The requested pages were freed.\r
+ @retval EFI_INVALID_PARAMETER Memory is not a page-aligned address or Pages is invalid.\r
+ @retval EFI_NOT_FOUND The requested memory pages were not allocated with\r
+ AllocatePages().\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiServicesFreePages (\r
+ IN EFI_PHYSICAL_ADDRESS Memory,\r
+ IN UINTN Pages\r
+ )\r
+{\r
+ CONST EFI_PEI_SERVICES **PeiServices;\r
+\r
+ PeiServices = GetPeiServicesTablePointer ();\r
+ return (*PeiServices)->FreePages (PeiServices, Memory, Pages);\r
+}\r
+\r
/**\r
This service allocates memory from the Hand-Off Block (HOB) heap.\r
\r
@param Size The number of bytes to allocate from the pool.\r
- @param Buffer If the call succeeds, a pointer to a pointer to \r
+ @param Buffer If the call succeeds, a pointer to a pointer to\r
the allocate buffer; otherwise, undefined.\r
\r
@retval EFI_SUCCESS The allocation was successful\r
}\r
\r
/**\r
- This service is a wrapper for the PEI Service RegisterForShadow(), except the \r
- pointer to the PEI Services Table has been removed. See the Platform \r
- Initialization Pre-EFI Initialization Core Interface Specification for details. \r
+ This service is a wrapper for the PEI Service RegisterForShadow(), except the\r
+ pointer to the PEI Services Table has been removed. See the Platform\r
+ Initialization Pre-EFI Initialization Core Interface Specification for details.\r
\r
@param FileHandle PEIM's file handle. Must be the currently\r
executing PEIM.\r
- \r
+\r
@retval EFI_SUCCESS The PEIM was successfully registered for\r
shadowing.\r
\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
+ 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 The handle of the file.\r
\r
information.\r
\r
@retval EFI_SUCCESS File information returned.\r
- \r
+\r
@retval EFI_INVALID_PARAMETER If FileHandle does not\r
represent a valid file.\r
- \r
+\r
@retval EFI_INVALID_PARAMETER FileInfo is NULL.\r
- \r
+\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
/**\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
+ 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
@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
- @param FileHandle The pointer to found file handle \r
+ @param FileHandle The pointer to found file handle\r
\r
@retval EFI_SUCCESS File was found.\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
+ 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
information.\r
\r
@retval EFI_SUCCESS File information returned.\r
- \r
+\r
@retval EFI_INVALID_PARAMETER If FileHandle does not\r
represent a valid file.\r
- \r
+\r
@retval EFI_INVALID_PARAMETER If FileInfo is NULL.\r
\r
**/\r
the parameters passed in to initialize the fields of the EFI_PEI_FIRMWARE_VOLUME_INFO(2)_PPI instance.\r
If the resources can not be allocated for EFI_PEI_FIRMWARE_VOLUME_INFO(2)_PPI, then ASSERT().\r
If the EFI_PEI_FIRMWARE_VOLUME_INFO(2)_PPI can not be installed, then ASSERT().\r
+ If NULL is specified for FvFormat, but FvInfo does not have the firmware file system 2 format, then ASSERT.\r
\r
@param InstallFvInfoPpi Install FvInfo Ppi if it is TRUE. Otherwise, install FvInfo2 Ppi.\r
@param FvFormat Unique identifier of the format of the memory-mapped\r
IN UINT32 AuthenticationStatus\r
)\r
{\r
- EFI_STATUS Status; \r
+ EFI_STATUS Status;\r
EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *FvInfoPpi;\r
EFI_PEI_PPI_DESCRIPTOR *FvInfoPpiDescriptor;\r
EFI_GUID *ParentFvNameValue;\r
// To install FvInfo Ppi.\r
//\r
FvInfoPpi = AllocateZeroPool (sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI));\r
+ ASSERT (FvInfoPpi != NULL);\r
PpiGuid = &gEfiPeiFirmwareVolumeInfoPpiGuid;\r
} else {\r
//\r
// To install FvInfo2 Ppi.\r
//\r
FvInfoPpi = AllocateZeroPool (sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI));\r
+ ASSERT (FvInfoPpi != NULL);\r
((EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI *) FvInfoPpi)->AuthenticationStatus = AuthenticationStatus;\r
PpiGuid = &gEfiPeiFirmwareVolumeInfo2PpiGuid;\r
}\r
CopyGuid (&FvInfoPpi->FvFormat, FvFormat);\r
} else {\r
CopyGuid (&FvInfoPpi->FvFormat, &gEfiFirmwareFileSystem2Guid);\r
+ //\r
+ // Since the EFI_FIRMWARE_FILE_SYSTEM2_GUID format is assumed if NULL is specified for FvFormat,\r
+ // check the FileSystemGuid pointed by FvInfo against EFI_FIRMWARE_FILE_SYSTEM2_GUID to make sure\r
+ // FvInfo has the firmware file system 2 format.\r
+ // If the ASSERT really appears, FvFormat needs to be specified correctly, for example,\r
+ // EFI_FIRMWARE_FILE_SYSTEM3_GUID can be used for firmware file system 3 format, or\r
+ // ((EFI_FIRMWARE_VOLUME_HEADER *) FvInfo)->FileSystemGuid can be just used for both\r
+ // firmware file system 2 and 3 format.\r
+ //\r
+ ASSERT (CompareGuid (&(((EFI_FIRMWARE_VOLUME_HEADER *) FvInfo)->FileSystemGuid), &gEfiFirmwareFileSystem2Guid));\r
}\r
FvInfoPpi->FvInfo = (VOID *) FvInfo;\r
FvInfoPpi->FvInfoSize = FvInfoSize;\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
+ If NULL is specified for FvFormat, but FvInfo does not have the firmware file system 2 format, then ASSERT.\r
\r
@param FvFormat Unique identifier of the format of the memory-mapped\r
firmware volume. This parameter is optional and\r
the parameters passed in to initialize the fields of the EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI instance.\r
If the resources can not be allocated for EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI, then ASSERT().\r
If the EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI can not be installed, then ASSERT().\r
+ If NULL is specified for FvFormat, but FvInfo does not have the firmware file system 2 format, then ASSERT.\r
\r
@param FvFormat Unique identifier of the format of the memory-mapped\r
firmware volume. This parameter is optional and\r
InternalPeiServicesInstallFvInfoPpi (FALSE, FvFormat, FvInfo, FvInfoSize, ParentFvName, ParentFileName, AuthenticationStatus);\r
}\r
\r
+/**\r
+ Resets the entire platform.\r
+\r
+ @param[in] ResetType The type of reset to perform.\r
+ @param[in] ResetStatus The status code for the reset.\r
+ @param[in] DataSize The size, in bytes, of ResetData.\r
+ @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or EfiResetShutdown\r
+ the data buffer starts with a Null-terminated string, optionally\r
+ followed by additional binary data. The string is a description\r
+ that the caller may use to further indicate the reason for the\r
+ system reset. ResetData is only valid if ResetStatus is something\r
+ other than EFI_SUCCESS unless the ResetType is EfiResetPlatformSpecific\r
+ where a minimum amount of ResetData is always required.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+PeiServicesResetSystem2 (\r
+ IN EFI_RESET_TYPE ResetType,\r
+ IN EFI_STATUS ResetStatus,\r
+ IN UINTN DataSize,\r
+ IN VOID *ResetData OPTIONAL\r
+ )\r
+{\r
+ (*GetPeiServicesTablePointer())->ResetSystem2 (ResetType, ResetStatus, DataSize, ResetData);\r
+}\r