| /** @file | |
| This file provides functions for accessing a memory-mapped firmware volume of a specific format. | |
| Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| @par Revision Reference: | |
| This PPI is from PI Version 1.0 errata. | |
| **/ | |
| #ifndef __FIRMWARE_VOLUME_PPI_H__ | |
| #define __FIRMWARE_VOLUME_PPI_H__ | |
| /// | |
| /// The GUID for this PPI is the same as the firmware volume format GUID. | |
| /// The FV format can be EFI_FIRMWARE_FILE_SYSTEM2_GUID or the GUID for a user-defined | |
| /// format. The EFI_FIRMWARE_FILE_SYSTEM2_GUID is the PI Firmware Volume format. | |
| /// | |
| typedef struct _EFI_PEI_FIRMWARE_VOLUME_PPI EFI_PEI_FIRMWARE_VOLUME_PPI; | |
| /** | |
| Process a firmware volume and create a volume handle. | |
| Create a volume handle from the information in the buffer. For | |
| memory-mapped firmware volumes, Buffer and BufferSize refer to | |
| the start of the firmware volume and the firmware volume size. | |
| For non memory-mapped firmware volumes, this points to a | |
| buffer which contains the necessary information for creating | |
| the firmware volume handle. Normally, these values are derived | |
| from the EFI_FIRMWARE_VOLUME_INFO_PPI. | |
| @param This Points to this instance of the | |
| EFI_PEI_FIRMWARE_VOLUME_PPI. | |
| @param Buffer Points to the start of the buffer. | |
| @param BufferSize Size of the buffer. | |
| @param FvHandle Points to the returned firmware volume | |
| handle. The firmware volume handle must | |
| be unique within the system. | |
| @retval EFI_SUCCESS Firmware volume handle created. | |
| @retval EFI_VOLUME_CORRUPTED Volume was corrupt. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FV_PROCESS_FV)( | |
| IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This, | |
| IN VOID *Buffer, | |
| IN UINTN BufferSize, | |
| OUT EFI_PEI_FV_HANDLE *FvHandle | |
| ); | |
| /** | |
| Finds the next file of the specified type. | |
| This service enables PEI modules to discover additional firmware files. | |
| The FileHandle must be unique within the system. | |
| @param This Points to this instance of the | |
| EFI_PEI_FIRMWARE_VOLUME_PPI. | |
| @param SearchType A filter to find only files of this type. Type | |
| EFI_FV_FILETYPE_ALL causes no filtering to be | |
| done. | |
| @param FvHandle Handle of firmware volume in which to | |
| search. | |
| @param FileHandle Points to the current handle from which to | |
| begin searching or NULL to start at the | |
| beginning of the firmware volume. Updated | |
| upon return to reflect the file found. | |
| @retval EFI_SUCCESS The file was found. | |
| @retval EFI_NOT_FOUND The file was not found. FileHandle contains NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FV_FIND_FILE_TYPE)( | |
| IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This, | |
| IN EFI_FV_FILETYPE SearchType, | |
| IN EFI_PEI_FV_HANDLE FvHandle, | |
| IN OUT EFI_PEI_FILE_HANDLE *FileHandle | |
| ); | |
| /** | |
| Find a file within a volume by its name. | |
| This service searches for files with a specific name, within | |
| either the specified firmware volume or all firmware volumes. | |
| @param This Points to this instance of the | |
| EFI_PEI_FIRMWARE_VOLUME_PPI. | |
| @param FileName A pointer to the name of the file to find | |
| within the firmware volume. | |
| @param FvHandle Upon entry, the pointer to the firmware | |
| volume to search or NULL if all firmware | |
| volumes should be searched. Upon exit, the | |
| actual firmware volume in which the file was | |
| found. | |
| @param FileHandle Upon exit, points to the found file's | |
| handle or NULL if it could not be found. | |
| @retval EFI_SUCCESS File was found. | |
| @retval EFI_NOT_FOUND File was not found. | |
| @retval EFI_INVALID_PARAMETER FvHandle or FileHandle or | |
| FileName was NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FV_FIND_FILE_NAME)( | |
| IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This, | |
| IN CONST EFI_GUID *FileName, | |
| IN EFI_PEI_FV_HANDLE *FvHandle, | |
| OUT EFI_PEI_FILE_HANDLE *FileHandle | |
| ); | |
| /** | |
| Returns information about a specific file. | |
| This function returns information about a specific | |
| file, including its file name, type, attributes, starting | |
| address and size. | |
| @param This Points to this instance of the | |
| EFI_PEI_FIRMWARE_VOLUME_PPI. | |
| @param FileHandle Handle of the file. | |
| @param FileInfo Upon exit, points to the file's | |
| information. | |
| @retval EFI_SUCCESS File information returned. | |
| @retval EFI_INVALID_PARAMETER If FileHandle does not | |
| represent a valid file. | |
| @retval EFI_INVALID_PARAMETER If FileInfo is NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FV_GET_FILE_INFO)( | |
| IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This, | |
| IN EFI_PEI_FILE_HANDLE FileHandle, | |
| OUT EFI_FV_FILE_INFO *FileInfo | |
| ); | |
| /** | |
| Returns information about a specific file. | |
| This function returns information about a specific | |
| file, including its file name, type, attributes, starting | |
| address, size and authentication status. | |
| @param This Points to this instance of the | |
| EFI_PEI_FIRMWARE_VOLUME_PPI. | |
| @param FileHandle Handle of the file. | |
| @param FileInfo Upon exit, points to the file's | |
| information. | |
| @retval EFI_SUCCESS File information returned. | |
| @retval EFI_INVALID_PARAMETER If FileHandle does not | |
| represent a valid file. | |
| @retval EFI_INVALID_PARAMETER If FileInfo is NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FV_GET_FILE_INFO2)( | |
| IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This, | |
| IN EFI_PEI_FILE_HANDLE FileHandle, | |
| OUT EFI_FV_FILE_INFO2 *FileInfo | |
| ); | |
| /** | |
| This function returns information about the firmware volume. | |
| @param This Points to this instance of the | |
| EFI_PEI_FIRMWARE_VOLUME_PPI. | |
| @param FvHandle Handle to the firmware handle. | |
| @param VolumeInfo Points to the returned firmware volume | |
| information. | |
| @retval EFI_SUCCESS Information returned successfully. | |
| @retval EFI_INVALID_PARAMETER FvHandle does not indicate a valid | |
| firmware volume or VolumeInfo is NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FV_GET_INFO)( | |
| IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This, | |
| IN EFI_PEI_FV_HANDLE FvHandle, | |
| OUT EFI_FV_INFO *VolumeInfo | |
| ); | |
| /** | |
| Find the next matching section in the firmware file. | |
| This service enables PEI modules to discover sections | |
| of a given type within a valid file. | |
| @param This Points to this instance of the | |
| EFI_PEI_FIRMWARE_VOLUME_PPI. | |
| @param SearchType A filter to find only sections of this | |
| type. | |
| @param FileHandle Handle of firmware file in which to | |
| search. | |
| @param SectionData Updated upon return to point to the | |
| section found. | |
| @retval EFI_SUCCESS Section was found. | |
| @retval EFI_NOT_FOUND Section of the specified type was not | |
| found. SectionData contains NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FV_FIND_SECTION)( | |
| IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This, | |
| IN EFI_SECTION_TYPE SearchType, | |
| IN EFI_PEI_FILE_HANDLE FileHandle, | |
| OUT VOID **SectionData | |
| ); | |
| /** | |
| Find the next matching section in the firmware file. | |
| This service enables PEI modules to discover sections | |
| of a given instance and type within a valid file. | |
| @param This Points to this instance of the | |
| EFI_PEI_FIRMWARE_VOLUME_PPI. | |
| @param SearchType A filter to find only sections of this | |
| type. | |
| @param SearchInstance A filter to find the specific instance | |
| of sections. | |
| @param FileHandle Handle of firmware file in which to | |
| search. | |
| @param SectionData Updated upon return to point to the | |
| section found. | |
| @param AuthenticationStatus Updated upon return to point to the | |
| authentication status for this section. | |
| @retval EFI_SUCCESS Section was found. | |
| @retval EFI_NOT_FOUND Section of the specified type was not | |
| found. SectionData contains NULL. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_PEI_FV_FIND_SECTION2)( | |
| IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This, | |
| IN EFI_SECTION_TYPE SearchType, | |
| IN UINTN SearchInstance, | |
| IN EFI_PEI_FILE_HANDLE FileHandle, | |
| OUT VOID **SectionData, | |
| OUT UINT32 *AuthenticationStatus | |
| ); | |
| #define EFI_PEI_FIRMWARE_VOLUME_PPI_SIGNATURE SIGNATURE_32 ('P', 'F', 'V', 'P') | |
| #define EFI_PEI_FIRMWARE_VOLUME_PPI_REVISION 0x00010030 | |
| /// | |
| /// This PPI provides functions for accessing a memory-mapped firmware volume of a specific format. | |
| /// | |
| struct _EFI_PEI_FIRMWARE_VOLUME_PPI { | |
| EFI_PEI_FV_PROCESS_FV ProcessVolume; | |
| EFI_PEI_FV_FIND_FILE_TYPE FindFileByType; | |
| EFI_PEI_FV_FIND_FILE_NAME FindFileByName; | |
| EFI_PEI_FV_GET_FILE_INFO GetFileInfo; | |
| EFI_PEI_FV_GET_INFO GetVolumeInfo; | |
| EFI_PEI_FV_FIND_SECTION FindSectionByType; | |
| EFI_PEI_FV_GET_FILE_INFO2 GetFileInfo2; | |
| EFI_PEI_FV_FIND_SECTION2 FindSectionByType2; | |
| /// | |
| /// Signature is used to keep backward-compatibility, set to {'P','F','V','P'}. | |
| /// | |
| UINT32 Signature; | |
| /// | |
| /// Revision for further extension. | |
| /// | |
| UINT32 Revision; | |
| }; | |
| extern EFI_GUID gEfiPeiFirmwareVolumePpiGuid; | |
| #endif |