/** @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 |