Checked in the Protocols introduced in UEFI/PI.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2674 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
787
MdePkg/Include/Protocol/FirmwareVolume2.h
Normal file
787
MdePkg/Include/Protocol/FirmwareVolume2.h
Normal file
@@ -0,0 +1,787 @@
|
||||
/** @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 - 2007, Intel Corporation
|
||||
All rights reserved. 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.
|
||||
|
||||
Module Name: FirmwareVolume2.h
|
||||
|
||||
@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
|
||||
|
||||
/**
|
||||
|
||||
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 EFI_TPL_NOTIFY and below. Behavior of
|
||||
GetVolumeAttributes() at any EFI_TPL above EFI_TPL_NOTIFY is
|
||||
undefined. Type EFI_TPL is defined in RaiseTPL() in the UEFI
|
||||
2.0 specification.
|
||||
|
||||
@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
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
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 EFI_TPL_NOTIFY and
|
||||
below. Behavior of SetVolumeAttributes() at any EFI_TPL above
|
||||
EFI_TPL_NOTIFY is undefined. Type EFI_TPL is defined in
|
||||
RaiseTPL() in the UEFI 2.0 specification.
|
||||
|
||||
|
||||
@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
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
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 EFI_TPL_NOTIFY and below.
|
||||
Behavior of ReadFile() at any EFI_TPL above EFI_TPL_NOTIFY is
|
||||
undefined. Type EFI_TPL is defined in RaiseTPL() in the UEFI
|
||||
2.0 specification.
|
||||
|
||||
@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.
|
||||
|
||||
@retavl 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
|
||||
isallow 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
|
||||
);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
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. See
|
||||
????Firmware File Sections???? on page 9 for more details about
|
||||
sections. 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 EFI_TPL_NOTIFY and below. Behavior of
|
||||
ReadSection() at any EFI_TPL above EFI_TPL_NOTIFY is
|
||||
undefined. Type EFI_TPL is defined in RaiseTPL() in the UEFI
|
||||
2.0 specification.
|
||||
|
||||
|
||||
@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 CONST EFI_SECTION_TYPE SectionType,
|
||||
IN CONST UINTN SectionInstance,
|
||||
IN OUT VOID **Buffer,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT UINT32 *AuthenticationStatus
|
||||
);
|
||||
|
||||
//
|
||||
// EFI_FV_WRITE_POLICY
|
||||
//
|
||||
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 {
|
||||
EFI_GUID *NameGuid;
|
||||
EFI_FV_FILETYPE Type;
|
||||
EFI_FV_FILE_ATTRIBUTES FileAttributes;
|
||||
VOID *Buffer;
|
||||
UINT32 BufferSize;
|
||||
} EFI_FV_WRITE_FILE_DATA;
|
||||
|
||||
/**
|
||||
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 EFI_TPL_NOTIFY and below.
|
||||
Behavior of WriteFile() at any EFI_TPL above EFI_TPL_NOTIFY is
|
||||
undefined. Type EFI_TPL is defined in RaiseTPL() in the UEFI 2.0
|
||||
specification.
|
||||
|
||||
@param This Indicates the EFI_FIRMWARE_VOLUME2_PROTOCOL
|
||||
instance. 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 CONST UINT32 NumberOfFiles,
|
||||
IN CONST EFI_FV_WRITE_POLICY WritePolicy,
|
||||
IN CONST EFI_FV_WRITE_FILE_DATA *FileData
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
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 EFI_TPL_NOTIFY and below.
|
||||
Behavior of GetNextFile() at any EFI_TPL above EFI_TPL_NOTIFY is
|
||||
undefined. Type EFI_TPL is defined in RaiseTPL() in the UEFI 2.0
|
||||
specification. Status Codes Returned
|
||||
|
||||
|
||||
@param This Indicates the EFI_FIRMWARE_VOLUME2_PROTOCOL
|
||||
instance. 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
|
||||
);
|
||||
|
||||
/**
|
||||
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
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
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.
|
||||
|
||||
@param GetVolumeAttributes Retrieves volume capabilities
|
||||
and current settings. See the
|
||||
GetVolumeAttributes() function
|
||||
description.
|
||||
|
||||
@param SetVolumeAttributes Modifies the current settings of
|
||||
the firmware volume. See the
|
||||
SetVolumeAttributes() function
|
||||
description.
|
||||
|
||||
@param ReadFile Reads an entire file from the firmware
|
||||
volume. See the ReadFile() function
|
||||
description.
|
||||
|
||||
@param ReadSection Reads a single section from a file into
|
||||
a buffer.
|
||||
|
||||
@param WriteFile Writes an entire file into the firmware
|
||||
volume. See the WriteFile() function
|
||||
description.
|
||||
|
||||
@param GetNextFile Provides service to allow searching the
|
||||
firmware volume. See the GetNextFile()
|
||||
function description.
|
||||
|
||||
@param KeySize Data field that indicates the size in bytes
|
||||
of the Key input buffer for the
|
||||
GetNextFile() API.
|
||||
|
||||
@param ParentHandle Handle of the parent firmware volume.
|
||||
Type EFI_HANDLE is defined in
|
||||
InstallProtocolInterface() in the UEFI
|
||||
2.0 specification.
|
||||
|
||||
@param GetInfo Gets the requested file or volume
|
||||
information. See the GetInfo() function
|
||||
description.
|
||||
@param SetInfo Sets the requested file information. See the
|
||||
SetInfo() function description.
|
||||
|
||||
**/
|
||||
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;
|
||||
UINT32 KeySize;
|
||||
EFI_HANDLE ParentHandle;
|
||||
EFI_FV_GET_INFO GetInfo;
|
||||
EFI_FV_SET_INFO SetInfo;
|
||||
};
|
||||
|
||||
|
||||
extern EFI_GUID gEfiFirmwareVolume2ProtocolGuid;
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user