diff options
author | Guo Mang <mang.guo@intel.com> | 2016-12-22 15:57:14 +0800 |
---|---|---|
committer | Guo Mang <mang.guo@intel.com> | 2016-12-26 19:14:41 +0800 |
commit | 1760cf81e4b1847c6823ea3514a78dd120e19b6e (patch) | |
tree | 64a874b14050fe24d3bbc1bc13cd293abf8ae018 /Core/MdePkg/Include/Protocol/FirmwareVolume2.h | |
parent | 7f05fa00f73038b425002566d3afe6c3ade2ccdb (diff) | |
download | edk2-platforms-1760cf81e4b1847c6823ea3514a78dd120e19b6e.tar.xz |
MdePkg: Move to new location
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Guo Mang <mang.guo@intel.com>
Diffstat (limited to 'Core/MdePkg/Include/Protocol/FirmwareVolume2.h')
-rw-r--r-- | Core/MdePkg/Include/Protocol/FirmwareVolume2.h | 762 |
1 files changed, 762 insertions, 0 deletions
diff --git a/Core/MdePkg/Include/Protocol/FirmwareVolume2.h b/Core/MdePkg/Include/Protocol/FirmwareVolume2.h new file mode 100644 index 0000000000..e54364b942 --- /dev/null +++ b/Core/MdePkg/Include/Protocol/FirmwareVolume2.h @@ -0,0 +1,762 @@ +/** @file
+ The Firmware Volume Protocol provides file-level access to the firmware volume.
+ Each firmware volume driver must produce an instance of the
+ Firmware Volume Protocol if the firmware volume is to be visible to
+ the system during the DXE phase. The Firmware Volume Protocol also provides
+ mechanisms for determining and modifying some attributes of the firmware volume.
+
+ Copyright (c) 2006 - 2008, 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: PI
+ Version 1.00.
+
+**/
+
+#ifndef __FIRMWARE_VOLUME2_H__
+#define __FIRMWARE_VOLUME2_H__
+
+#define EFI_FIRMWARE_VOLUME2_PROTOCOL_GUID \
+ { 0x220e73b6, 0x6bdb, 0x4413, { 0x84, 0x5, 0xb9, 0x74, 0xb1, 0x8, 0x61, 0x9a } }
+
+typedef struct _EFI_FIRMWARE_VOLUME2_PROTOCOL EFI_FIRMWARE_VOLUME2_PROTOCOL;
+
+
+///
+/// EFI_FV_ATTRIBUTES
+///
+typedef UINT64 EFI_FV_ATTRIBUTES;
+
+//
+// EFI_FV_ATTRIBUTES bit definitions
+//
+// EFI_FV_ATTRIBUTES bit semantics
+#define EFI_FV2_READ_DISABLE_CAP 0x0000000000000001ULL
+#define EFI_FV2_READ_ENABLE_CAP 0x0000000000000002ULL
+#define EFI_FV2_READ_STATUS 0x0000000000000004ULL
+#define EFI_FV2_WRITE_DISABLE_CAP 0x0000000000000008ULL
+#define EFI_FV2_WRITE_ENABLE_CAP 0x0000000000000010ULL
+#define EFI_FV2_WRITE_STATUS 0x0000000000000020ULL
+#define EFI_FV2_LOCK_CAP 0x0000000000000040ULL
+#define EFI_FV2_LOCK_STATUS 0x0000000000000080ULL
+#define EFI_FV2_WRITE_POLICY_RELIABLE 0x0000000000000100ULL
+#define EFI_FV2_READ_LOCK_CAP 0x0000000000001000ULL
+#define EFI_FV2_READ_LOCK_STATUS 0x0000000000002000ULL
+#define EFI_FV2_WRITE_LOCK_CAP 0x0000000000004000ULL
+#define EFI_FV2_WRITE_LOCK_STATUS 0x0000000000008000ULL
+#define EFI_FV2_ALIGNMENT 0x00000000001F0000ULL
+#define EFI_FV2_ALIGNMENT_1 0x0000000000000000ULL
+#define EFI_FV2_ALIGNMENT_2 0x0000000000010000ULL
+#define EFI_FV2_ALIGNMENT_4 0x0000000000020000ULL
+#define EFI_FV2_ALIGNMENT_8 0x0000000000030000ULL
+#define EFI_FV2_ALIGNMENT_16 0x0000000000040000ULL
+#define EFI_FV2_ALIGNMENT_32 0x0000000000050000ULL
+#define EFI_FV2_ALIGNMENT_64 0x0000000000060000ULL
+#define EFI_FV2_ALIGNMENT_128 0x0000000000070000ULL
+#define EFI_FV2_ALIGNMENT_256 0x0000000000080000ULL
+#define EFI_FV2_ALIGNMENT_512 0x0000000000090000ULL
+#define EFI_FV2_ALIGNMENT_1K 0x00000000000A0000ULL
+#define EFI_FV2_ALIGNMENT_2K 0x00000000000B0000ULL
+#define EFI_FV2_ALIGNMENT_4K 0x00000000000C0000ULL
+#define EFI_FV2_ALIGNMENT_8K 0x00000000000D0000ULL
+#define EFI_FV2_ALIGNMENT_16K 0x00000000000E0000ULL
+#define EFI_FV2_ALIGNMENT_32K 0x00000000000F0000ULL
+#define EFI_FV2_ALIGNMENT_64K 0x0000000000100000ULL
+#define EFI_FV2_ALIGNMENT_128K 0x0000000000110000ULL
+#define EFI_FV2_ALIGNMENT_256K 0x0000000000120000ULL
+#define EFI_FV2_ALIGNMENT_512K 0x0000000000130000ULL
+#define EFI_FV2_ALIGNMENT_1M 0x0000000000140000ULL
+#define EFI_FV2_ALIGNMENT_2M 0x0000000000150000ULL
+#define EFI_FV2_ALIGNMENT_4M 0x0000000000160000ULL
+#define EFI_FV2_ALIGNMENT_8M 0x0000000000170000ULL
+#define EFI_FV2_ALIGNMENT_16M 0x0000000000180000ULL
+#define EFI_FV2_ALIGNMENT_32M 0x0000000000190000ULL
+#define EFI_FV2_ALIGNMENT_64M 0x00000000001A0000ULL
+#define EFI_FV2_ALIGNMENT_128M 0x00000000001B0000ULL
+#define EFI_FV2_ALIGNMENT_256M 0x00000000001C0000ULL
+#define EFI_FV2_ALIGNMENT_512M 0x00000000001D0000ULL
+#define EFI_FV2_ALIGNMENT_1G 0x00000000001E0000ULL
+#define EFI_FV2_ALIGNMENT_2G 0x00000000001F0000ULL
+
+/**
+ Returns the attributes and current settings of the firmware volume.
+
+ Because of constraints imposed by the underlying firmware
+ storage, an instance of the Firmware Volume Protocol may not
+ be to able to support all possible variations of this
+ architecture. These constraints and the current state of the
+ firmware volume are exposed to the caller using the
+ GetVolumeAttributes() function. GetVolumeAttributes() is
+ callable only from TPL_NOTIFY and below. Behavior of
+ GetVolumeAttributes() at any EFI_TPL above TPL_NOTIFY is
+ undefined.
+
+ @param This Indicates the EFI_FIRMWARE_VOLUME2_PROTOCOL instance.
+
+ @param FvAttributes Pointer to an EFI_FV_ATTRIBUTES in which
+ the attributes and current settings are
+ returned.
+
+
+ @retval EFI_SUCCESS The firmware volume attributes were
+ returned.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI * EFI_FV_GET_ATTRIBUTES)(
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ OUT EFI_FV_ATTRIBUTES *FvAttributes
+);
+
+
+/**
+ Modifies the current settings of the firmware volume according to the input parameter.
+
+ The SetVolumeAttributes() function is used to set configurable
+ firmware volume attributes. Only EFI_FV_READ_STATUS,
+ EFI_FV_WRITE_STATUS, and EFI_FV_LOCK_STATUS may be modified, and
+ then only in accordance with the declared capabilities. All
+ other bits of FvAttributes are ignored on input. On successful
+ return, all bits of *FvAttributes are valid and it contains the
+ completed EFI_FV_ATTRIBUTES for the volume. To modify an
+ attribute, the corresponding status bit in the EFI_FV_ATTRIBUTES
+ is set to the desired value on input. The EFI_FV_LOCK_STATUS bit
+ does not affect the ability to read or write the firmware
+ volume. Rather, once the EFI_FV_LOCK_STATUS bit is set, it
+ prevents further modification to all the attribute bits.
+ SetVolumeAttributes() is callable only from TPL_NOTIFY and
+ below. Behavior of SetVolumeAttributes() at any EFI_TPL above
+ TPL_NOTIFY is undefined.
+
+ @param This Indicates the EFI_FIRMWARE_VOLUME2_PROTOCOL instance.
+
+ @param FvAttributes On input, FvAttributes is a pointer to
+ an EFI_FV_ATTRIBUTES containing the
+ desired firmware volume settings. On
+ successful return, it contains the new
+ settings of the firmware volume. On
+ unsuccessful return, FvAttributes is not
+ modified and the firmware volume
+ settings are not changed.
+
+ @retval EFI_SUCCESS The requested firmware volume attributes
+ were set and the resulting
+ EFI_FV_ATTRIBUTES is returned in
+ FvAttributes.
+
+ @retval EFI_INVALID_PARAMETER FvAttributes:EFI_FV_READ_STATUS
+ is set to 1 on input, but the
+ device does not support enabling
+ reads
+ (FvAttributes:EFI_FV_READ_ENABLE
+ is clear on return from
+ GetVolumeAttributes()). Actual
+ volume attributes are unchanged.
+
+ @retval EFI_INVALID_PARAMETER FvAttributes:EFI_FV_READ_STATUS
+ is cleared to 0 on input, but
+ the device does not support
+ disabling reads
+ (FvAttributes:EFI_FV_READ_DISABL
+ is clear on return from
+ GetVolumeAttributes()). Actual
+ volume attributes are unchanged.
+
+ @retval EFI_INVALID_PARAMETER FvAttributes:EFI_FV_WRITE_STATUS
+ is set to 1 on input, but the
+ device does not support enabling
+ writes
+ (FvAttributes:EFI_FV_WRITE_ENABL
+ is clear on return from
+ GetVolumeAttributes()). Actual
+ volume attributes are unchanged.
+
+ @retval EFI_INVALID_PARAMETER FvAttributes:EFI_FV_WRITE_STATUS
+ is cleared to 0 on input, but
+ the device does not support
+ disabling writes
+ (FvAttributes:EFI_FV_WRITE_DISAB
+ is clear on return from
+ GetVolumeAttributes()). Actual
+ volume attributes are unchanged.
+
+ @retval EFI_INVALID_PARAMETER FvAttributes:EFI_FV_LOCK_STATUS
+ is set on input, but the device
+ does not support locking
+ (FvAttributes:EFI_FV_LOCK_CAP is
+ clear on return from
+ GetVolumeAttributes()). Actual
+ volume attributes are unchanged.
+
+ @retval EFI_ACCESS_DENIED Device is locked and does not
+ allow attribute modification
+ (FvAttributes:EFI_FV_LOCK_STATUS
+ is set on return from
+ GetVolumeAttributes()). Actual
+ volume attributes are unchanged.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI * EFI_FV_SET_ATTRIBUTES)(
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN OUT EFI_FV_ATTRIBUTES *FvAttributes
+);
+
+
+/**
+ Retrieves a file and/or file information from the firmware volume.
+
+ ReadFile() is used to retrieve any file from a firmware volume
+ during the DXE phase. The actual binary encoding of the file in
+ the firmware volume media may be in any arbitrary format as long
+ as it does the following: It is accessed using the Firmware
+ Volume Protocol. The image that is returned follows the image
+ format defined in Code Definitions: PI Firmware File Format.
+ If the input value of Buffer==NULL, it indicates the caller is
+ requesting only that the type, attributes, and size of the
+ file be returned and that there is no output buffer. In this
+ case, the following occurs:
+ - BufferSize is returned with the size that is required to
+ successfully complete the read.
+ - The output parameters FoundType and *FileAttributes are
+ returned with valid values.
+ - The returned value of *AuthenticationStatus is undefined.
+
+ If the input value of Buffer!=NULL, the output buffer is
+ specified by a double indirection of the Buffer parameter. The
+ input value of *Buffer is used to determine if the output
+ buffer is caller allocated or is dynamically allocated by
+ ReadFile(). If the input value of *Buffer!=NULL, it indicates
+ the output buffer is caller allocated. In this case, the input
+ value of *BufferSize indicates the size of the
+ caller-allocated output buffer. If the output buffer is not
+ large enough to contain the entire requested output, it is
+ filled up to the point that the output buffer is exhausted and
+ EFI_WARN_BUFFER_TOO_SMALL is returned, and then BufferSize is
+ returned with the size required to successfully complete the
+ read. All other output parameters are returned with valid
+ values. If the input value of *Buffer==NULL, it indicates the
+ output buffer is to be allocated by ReadFile(). In this case,
+ ReadFile() will allocate an appropriately sized buffer from
+ boot services pool memory, which will be returned in Buffer.
+ The size of the new buffer is returned in BufferSize and all
+ other output parameters are returned with valid values.
+ ReadFile() is callable only from TPL_NOTIFY and below.
+ Behavior of ReadFile() at any EFI_TPL above TPL_NOTIFY is
+ undefined.
+
+ @param This Indicates the EFI_FIRMWARE_VOLUME2_PROTOCOL instance.
+
+ @param NameGuid Pointer to an EFI_GUID, which is the file
+ name. All firmware file names are EFI_GUIDs.
+ A single firmware volume must not have two
+ valid files with the same file name
+ EFI_GUID.
+
+ @param Buffer Pointer to a pointer to a buffer in which the
+ file contents are returned, not including the
+ file header.
+
+ @param BufferSize Pointer to a caller-allocated UINTN. It
+ indicates the size of the memory
+ represented by Buffer.
+
+ @param FoundType Pointer to a caller-allocated EFI_FV_FILETYPE.
+
+ @param FileAttributes Pointer to a caller-allocated
+ EFI_FV_FILE_ATTRIBUTES.
+
+ @param AuthenticationStatus Pointer to a caller-allocated
+ UINT32 in which the
+ authentication status is
+ returned.
+
+ @retval EFI_SUCCESS The call completed successfully.
+
+ @retval EFI_WARN_BUFFER_TOO_SMALL The buffer is too small to
+ contain the requested
+ output. The buffer is
+ filled and the output is
+ truncated.
+
+ @retval EFI_OUT_OF_RESOURCES An allocation failure occurred.
+
+ @retval EFI_NOT_FOUND Name was not found in the firmware volume.
+
+ @retval EFI_DEVICE_ERROR A hardware error occurred when
+ attempting to access the firmware volume.
+
+ @retval EFI_ACCESS_DENIED The firmware volume is configured to
+ disallow reads.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI * EFI_FV_READ_FILE)(
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN CONST EFI_GUID *NameGuid,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT EFI_FV_FILETYPE *FoundType,
+ OUT EFI_FV_FILE_ATTRIBUTES *FileAttributes,
+ OUT UINT32 *AuthenticationStatus
+);
+
+
+
+/**
+ Locates the requested section within a file and returns it in a buffer.
+
+ ReadSection() is used to retrieve a specific section from a file
+ within a firmware volume. The section returned is determined
+ using a depth-first, left-to-right search algorithm through all
+ sections found in the specified file. The output buffer is specified by a double indirection
+ of the Buffer parameter. The input value of Buffer is used to
+ determine if the output buffer is caller allocated or is
+ dynamically allocated by ReadSection(). If the input value of
+ Buffer!=NULL, it indicates that the output buffer is caller
+ allocated. In this case, the input value of *BufferSize
+ indicates the size of the caller-allocated output buffer. If
+ the output buffer is not large enough to contain the entire
+ requested output, it is filled up to the point that the output
+ buffer is exhausted and EFI_WARN_BUFFER_TOO_SMALL is returned,
+ and then BufferSize is returned with the size that is required
+ to successfully complete the read. All other
+ output parameters are returned with valid values. If the input
+ value of *Buffer==NULL, it indicates the output buffer is to
+ be allocated by ReadSection(). In this case, ReadSection()
+ will allocate an appropriately sized buffer from boot services
+ pool memory, which will be returned in *Buffer. The size of
+ the new buffer is returned in *BufferSize and all other output
+ parameters are returned with valid values. ReadSection() is
+ callable only from TPL_NOTIFY and below. Behavior of
+ ReadSection() at any EFI_TPL above TPL_NOTIFY is
+ undefined.
+
+ @param This Indicates the EFI_FIRMWARE_VOLUME2_PROTOCOL instance.
+
+ @param NameGuid Pointer to an EFI_GUID, which indicates the
+ file name from which the requested section
+ will be read.
+
+ @param SectionType Indicates the section type to return.
+ SectionType in conjunction with
+ SectionInstance indicates which section to
+ return.
+
+ @param SectionInstance Indicates which instance of sections
+ with a type of SectionType to return.
+ SectionType in conjunction with
+ SectionInstance indicates which
+ section to return. SectionInstance is
+ zero based.
+
+ @param Buffer Pointer to a pointer to a buffer in which the
+ section contents are returned, not including
+ the section header.
+
+ @param BufferSize Pointer to a caller-allocated UINTN. It
+ indicates the size of the memory
+ represented by Buffer.
+
+ @param AuthenticationStatus Pointer to a caller-allocated
+ UINT32 in which the authentication
+ status is returned.
+
+
+ @retval EFI_SUCCESS The call completed successfully.
+
+ @retval EFI_WARN_BUFFER_TOO_SMALL The caller-allocated
+ buffer is too small to
+ contain the requested
+ output. The buffer is
+ filled and the output is
+ truncated.
+
+ @retval EFI_OUT_OF_RESOURCES An allocation failure occurred.
+
+ @retval EFI_NOT_FOUND The requested file was not found in
+ the firmware volume. EFI_NOT_FOUND The
+ requested section was not found in the
+ specified file.
+
+ @retval EFI_DEVICE_ERROR A hardware error occurred when
+ attempting to access the firmware
+ volume.
+
+ @retval EFI_ACCESS_DENIED The firmware volume is configured to
+ disallow reads. EFI_PROTOCOL_ERROR
+ The requested section was not found,
+ but the file could not be fully
+ parsed because a required
+ GUIDED_SECTION_EXTRACTION_PROTOCOL
+ was not found. It is possible the
+ requested section exists within the
+ file and could be successfully
+ extracted once the required
+ GUIDED_SECTION_EXTRACTION_PROTOCOL
+ is published.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI * EFI_FV_READ_SECTION)(
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN CONST EFI_GUID *NameGuid,
+ IN EFI_SECTION_TYPE SectionType,
+ IN UINTN SectionInstance,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT UINT32 *AuthenticationStatus
+);
+
+///
+/// EFI_FV_WRITE_POLICY, two policies (unreliable write and reliable write) are defined.
+///
+typedef UINT32 EFI_FV_WRITE_POLICY;
+#define EFI_FV_UNRELIABLE_WRITE 0x00000000
+#define EFI_FV_RELIABLE_WRITE 0x00000001
+
+//
+// EFI_FV_WRITE_FILE_DATA
+//
+typedef struct {
+ ///
+ /// Pointer to a GUID, which is the file name to be written.
+ ///
+ EFI_GUID *NameGuid;
+ ///
+ /// Indicates the type of file to be written.
+ ///
+ EFI_FV_FILETYPE Type;
+ ///
+ /// Indicates the attributes for the file to be written.
+ ///
+ EFI_FV_FILE_ATTRIBUTES FileAttributes;
+ ///
+ /// Pointer to a buffer containing the file to be written.
+ ///
+ VOID *Buffer;
+ ///
+ /// Indicates the size of the file image contained in Buffer.
+ ///
+ UINT32 BufferSize;
+} EFI_FV_WRITE_FILE_DATA;
+
+/**
+ Locates the requested section within a file and returns it in a buffer.
+
+ WriteFile() is used to write one or more files to a firmware
+ volume. Each file to be written is described by an
+ EFI_FV_WRITE_FILE_DATA structure. The caller must ensure that
+ any required alignment for all files listed in the FileData
+ array is compatible with the firmware volume. Firmware volume
+ capabilities can be determined using the GetVolumeAttributes()
+ call. Similarly, if the WritePolicy is set to
+ EFI_FV_RELIABLE_WRITE, the caller must check the firmware volume
+ capabilities to ensure EFI_FV_RELIABLE_WRITE is supported by the
+ firmware volume. EFI_FV_UNRELIABLE_WRITE must always be
+ supported. Writing a file with a size of zero
+ (FileData[n].BufferSize == 0) deletes the file from the firmware
+ volume if it exists. Deleting a file must be done one at a time.
+ Deleting a file as part of a multiple file write is not allowed.
+ Platform Initialization Specification VOLUME 3 Shared
+ Architectural Elements 84 August 21, 2006 Version 1.0
+ WriteFile() is callable only from TPL_NOTIFY and below.
+ Behavior of WriteFile() at any EFI_TPL above TPL_NOTIFY is
+ undefined.
+
+ @param This Indicates the EFI_FIRMWARE_VOLUME2_PROTOCOL instance.
+
+ @param NumberOfFiles Indicates the number of elements in the array pointed to by FileData
+
+ @param WritePolicy Indicates the level of reliability for the
+ write in the event of a power failure or
+ other system failure during the write
+ operation.
+
+ @param FileData Pointer to an array of
+ EFI_FV_WRITE_FILE_DATA. Each element of
+ FileData[] represents a file to be written.
+
+
+ @retval EFI_SUCCESS The write completed successfully.
+
+ @retval EFI_OUT_OF_RESOURCES The firmware volume does not
+ have enough free space to
+ storefile(s).
+
+ @retval EFI_DEVICE_ERROR A hardware error occurred when
+ attempting to access the firmware volume.
+
+ @retval EFI_WRITE_PROTECTED The firmware volume is
+ configured to disallow writes.
+
+ @retval EFI_NOT_FOUND A delete was requested, but the
+ requested file was not found in the
+ firmware volume.
+
+ @retval EFI_INVALID_PARAMETER A delete was requested with a
+ multiple file write.
+
+ @retval EFI_INVALID_PARAMETER An unsupported WritePolicy was
+ requested.
+
+ @retval EFI_INVALID_PARAMETER An unknown file type was
+ specified.
+
+ @retval EFI_INVALID_PARAMETER A file system specific error
+ has occurred.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI * EFI_FV_WRITE_FILE)(
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN UINT32 NumberOfFiles,
+ IN EFI_FV_WRITE_POLICY WritePolicy,
+ IN EFI_FV_WRITE_FILE_DATA *FileData
+);
+
+
+/**
+ Retrieves information about the next file in the firmware volume store
+ that matches the search criteria.
+
+ GetNextFile() is the interface that is used to search a firmware
+ volume for a particular file. It is called successively until
+ the desired file is located or the function returns
+ EFI_NOT_FOUND. To filter uninteresting files from the output,
+ the type of file to search for may be specified in FileType. For
+ example, if *FileType is EFI_FV_FILETYPE_DRIVER, only files of
+ this type will be returned in the output. If *FileType is
+ EFI_FV_FILETYPE_ALL, no filtering of file types is done. The Key
+ parameter is used to indicate a starting point of the search. If
+ the buffer *Key is completely initialized to zero, the search
+ re-initialized and starts at the beginning. Subsequent calls to
+ GetNextFile() must maintain the value of *Key returned by the
+ immediately previous call. The actual contents of *Key are
+ implementation specific and no semantic content is implied.
+ GetNextFile() is callable only from TPL_NOTIFY and below.
+ Behavior of GetNextFile() at any EFI_TPL above TPL_NOTIFY is
+ undefined.
+
+ @param This Indicates the EFI_FIRMWARE_VOLUME2_PROTOCOL instance.
+
+ @param Key Pointer to a caller-allocated buffer that contains implementation-specific data that is
+ used to track where to begin the search for the next file. The size of the buffer must be
+ at least This->KeySize bytes long. To re-initialize the search and begin from the
+ beginning of the firmware volume, the entire buffer must be cleared to zero. Other
+ than clearing the buffer to initiate a new search, the caller must not modify the data in
+ the buffer between calls to GetNextFile().
+
+ @param FileType Pointer to a caller-allocated
+ EFI_FV_FILETYPE. The GetNextFile() API can
+ filter its search for files based on the
+ value of the FileType input. A *FileType
+ input of EFI_FV_FILETYPE_ALL causes
+ GetNextFile() to search for files of all
+ types. If a file is found, the file's type
+ is returned in FileType. *FileType is not
+ modified if no file is found.
+
+ @param NameGuid Pointer to a caller-allocated EFI_GUID. If a
+ matching file is found, the file's name is
+ returned in NameGuid. If no matching file is
+ found, *NameGuid is not modified.
+
+ @param Attributes Pointer to a caller-allocated
+ EFI_FV_FILE_ATTRIBUTES. If a matching file
+ is found, the file's attributes are returned
+ in Attributes. If no matching file is found,
+ Attributes is not modified. Type
+ EFI_FV_FILE_ATTRIBUTES is defined in
+ ReadFile().
+
+ @param Size Pointer to a caller-allocated UINTN. If a
+ matching file is found, the file's size is
+ returned in *Size. If no matching file is found,
+ Size is not modified.
+
+ @retval EFI_SUCCESS The output parameters are filled with data
+ obtained from the first matching file that
+ was found.
+
+ @retval FI_NOT_FOUND No files of type FileType were found.
+
+
+ @retval EFI_DEVICE_ERROR A hardware error occurred when
+ attempting to access the firmware
+ volume.
+
+ @retval EFI_ACCESS_DENIED The firmware volume is configured to
+ disallow reads.
+
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI * EFI_FV_GET_NEXT_FILE)(
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN OUT VOID *Key,
+ IN OUT EFI_FV_FILETYPE *FileType,
+ OUT EFI_GUID *NameGuid,
+ OUT EFI_FV_FILE_ATTRIBUTES *Attributes,
+ OUT UINTN *Size
+);
+
+/**
+ Return information about a firmware volume.
+
+ The GetInfo() function returns information of type
+ InformationType for the requested firmware volume. If the volume
+ does not support the requested information type, then
+ EFI_UNSUPPORTED is returned. If the buffer is not large enough
+ to hold the requested structure, EFI_BUFFER_TOO_SMALL is
+ returned and the BufferSize is set to the size of buffer that is
+ required to make the request. The information types defined by
+ this specification are required information types that all file
+ systems must support.
+
+ @param This A pointer to the EFI_FIRMWARE_VOLUME2_PROTOCOL
+ instance that is the file handle the requested
+ information is for.
+
+ @param InformationType The type identifier for the
+ information being requested.
+
+ @param BufferSize On input, the size of Buffer. On output,
+ the amount of data returned in Buffer. In
+ both cases, the size is measured in bytes.
+
+ @param Buffer A pointer to the data buffer to return. The
+ buffer's type is indicated by InformationType.
+
+
+ @retval EFI_SUCCESS The information was retrieved.
+
+ @retval EFI_UNSUPPORTED The InformationType is not known.
+
+ @retval EFI_NO_MEDIA The device has no medium.
+
+ @retval EFI_DEVICE_ERROR The device reported an error.
+
+ @retval EFI_VOLUME_CORRUPTED The file system structures are
+ corrupted.
+
+ @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to
+ read the current directory
+ entry. BufferSize has been
+ updated with the size needed to
+ complete the request.
+
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_GET_INFO)(
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN CONST EFI_GUID *InformationType,
+ IN OUT UINTN *BufferSize,
+ OUT VOID *Buffer
+);
+
+
+/**
+ Sets information about a firmware volume.
+
+ The SetInfo() function sets information of type InformationType
+ on the requested firmware volume.
+
+
+ @param This A pointer to the EFI_FIRMWARE_VOLUME2_PROTOCOL
+ instance that is the file handle the information
+ is for.
+
+ @param InformationType The type identifier for the
+ information being set.
+
+ @param BufferSize The size, in bytes, of Buffer.
+
+ @param Buffer A pointer to the data buffer to write. The
+ buffer's type is indicated by InformationType.
+
+ @retval EFI_SUCCESS The information was set.
+
+ @retval EFI_UNSUPPORTED The InformationType is not known.
+
+ @retval EFI_NO_MEDIA The device has no medium.
+
+ @retval EFI_DEVICE_ERROR The device reported an error.
+
+ @retval EFI_VOLUME_CORRUPTED The file system structures are
+ corrupted.
+
+
+ @retval EFI_WRITE_PROTECTED The media is read only.
+
+ @retval EFI_VOLUME_FULL The volume is full.
+
+ @retval EFI_BAD_BUFFER_SIZE BufferSize is smaller than the
+ size of the type indicated by
+ InformationType.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_SET_INFO)(
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN CONST EFI_GUID *InformationType,
+ IN UINTN BufferSize,
+ IN CONST VOID *Buffer
+);
+
+
+///
+/// The Firmware Volume Protocol contains the file-level
+/// abstraction to the firmware volume as well as some firmware
+/// volume attribute reporting and configuration services. The
+/// Firmware Volume Protocol is the interface used by all parts of
+/// DXE that are not directly involved with managing the firmware
+/// volume itself. This abstraction allows many varied types of
+/// firmware volume implementations. A firmware volume may be a
+/// flash device or it may be a file in the UEFI system partition,
+/// for example. This level of firmware volume implementation
+/// detail is not visible to the consumers of the Firmware Volume
+/// Protocol.
+///
+struct _EFI_FIRMWARE_VOLUME2_PROTOCOL {
+ EFI_FV_GET_ATTRIBUTES GetVolumeAttributes;
+ EFI_FV_SET_ATTRIBUTES SetVolumeAttributes;
+ EFI_FV_READ_FILE ReadFile;
+ EFI_FV_READ_SECTION ReadSection;
+ EFI_FV_WRITE_FILE WriteFile;
+ EFI_FV_GET_NEXT_FILE GetNextFile;
+
+ ///
+ /// Data field that indicates the size in bytes
+ /// of the Key input buffer for the
+ /// GetNextFile() API.
+ ///
+ UINT32 KeySize;
+
+ ///
+ /// Handle of the parent firmware volume.
+ ///
+ EFI_HANDLE ParentHandle;
+ EFI_FV_GET_INFO GetInfo;
+ EFI_FV_SET_INFO SetInfo;
+};
+
+
+extern EFI_GUID gEfiFirmwareVolume2ProtocolGuid;
+
+#endif
|