/** @file | |
This file declares Firmware Volume protocol. | |
Copyright (c) 2006, 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: FirmwareVolume.h | |
@par Revision Reference: | |
This protocol is defined in Firmware Volume specification. | |
Version 0.9 | |
**/ | |
#ifndef __FIRMWARE_VOLUME_H__ | |
#define __FIRMWARE_VOLUME_H__ | |
// | |
// Firmware Volume Protocol GUID definition | |
// | |
#define EFI_FIRMWARE_VOLUME_PROTOCOL_GUID \ | |
{ \ | |
0x389F751F, 0x1838, 0x4388, {0x83, 0x90, 0xCD, 0x81, 0x54, 0xBD, 0x27, 0xF8 } \ | |
} | |
#define FV_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('_', 'F', 'V', '_') | |
typedef struct _EFI_FIRMWARE_VOLUME_PROTOCOL EFI_FIRMWARE_VOLUME_PROTOCOL; | |
// | |
// EFI_FV_ATTRIBUTES bit definitions | |
// | |
typedef UINT64 EFI_FV_ATTRIBUTES; | |
// | |
// ************************************************************ | |
// EFI_FV_ATTRIBUTES bit definitions | |
// ************************************************************ | |
// | |
#define EFI_FV_READ_DISABLE_CAP 0x0000000000000001ULL | |
#define EFI_FV_READ_ENABLE_CAP 0x0000000000000002ULL | |
#define EFI_FV_READ_STATUS 0x0000000000000004ULL | |
#define EFI_FV_WRITE_DISABLE_CAP 0x0000000000000008ULL | |
#define EFI_FV_WRITE_ENABLE_CAP 0x0000000000000010ULL | |
#define EFI_FV_WRITE_STATUS 0x0000000000000020ULL | |
#define EFI_FV_LOCK_CAP 0x0000000000000040ULL | |
#define EFI_FV_LOCK_STATUS 0x0000000000000080ULL | |
#define EFI_FV_WRITE_POLICY_RELIABLE 0x0000000000000100ULL | |
#define EFI_FV_ALIGNMENT_CAP 0x0000000000008000ULL | |
#define EFI_FV_ALIGNMENT_2 0x0000000000010000ULL | |
#define EFI_FV_ALIGNMENT_4 0x0000000000020000ULL | |
#define EFI_FV_ALIGNMENT_8 0x0000000000040000ULL | |
#define EFI_FV_ALIGNMENT_16 0x0000000000080000ULL | |
#define EFI_FV_ALIGNMENT_32 0x0000000000100000ULL | |
#define EFI_FV_ALIGNMENT_64 0x0000000000200000ULL | |
#define EFI_FV_ALIGNMENT_128 0x0000000000400000ULL | |
#define EFI_FV_ALIGNMENT_256 0x0000000000800000ULL | |
#define EFI_FV_ALIGNMENT_512 0x0000000001000000ULL | |
#define EFI_FV_ALIGNMENT_1K 0x0000000002000000ULL | |
#define EFI_FV_ALIGNMENT_2K 0x0000000004000000ULL | |
#define EFI_FV_ALIGNMENT_4K 0x0000000008000000ULL | |
#define EFI_FV_ALIGNMENT_8K 0x0000000010000000ULL | |
#define EFI_FV_ALIGNMENT_16K 0x0000000020000000ULL | |
#define EFI_FV_ALIGNMENT_32K 0x0000000040000000ULL | |
#define EFI_FV_ALIGNMENT_64K 0x0000000080000000ULL | |
// | |
// Protocol API definitions | |
// | |
/** | |
Retrieves attributes, insures positive polarity of attribute bits, returns | |
resulting attributes in output parameter | |
@param This Calling context | |
@param Attributes output buffer which contains attributes | |
@retval EFI_INVALID_PARAMETER | |
@retval EFI_SUCCESS | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FV_GET_ATTRIBUTES) ( | |
IN EFI_FIRMWARE_VOLUME_PROTOCOL *This, | |
OUT EFI_FV_ATTRIBUTES *Attributes | |
); | |
/** | |
Sets volume attributes | |
@param This Calling context | |
@param Attributes Buffer which contains attributes | |
@retval EFI_INVALID_PARAMETER | |
@retval EFI_DEVICE_ERROR | |
@retval EFI_SUCCESS | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FV_SET_ATTRIBUTES) ( | |
IN EFI_FIRMWARE_VOLUME_PROTOCOL *This, | |
IN OUT EFI_FV_ATTRIBUTES *Attributes | |
); | |
typedef UINT32 EFI_FV_FILE_ATTRIBUTES; | |
#define EFI_FV_FILE_ATTRIB_ALIGNMENT 0x0000001F | |
/** | |
Read the requested file (NameGuid) and returns data in Buffer. | |
@param This Calling context | |
@param NameGuid Filename identifying which file to read | |
@param Buffer Pointer to pointer to buffer in which contents of file are returned. | |
<br> | |
If Buffer is NULL, only type, attributes, and size are returned as | |
there is no output buffer. | |
<br> | |
If Buffer != NULL and *Buffer == NULL, the output buffer is allocated | |
from BS pool by ReadFile | |
<br> | |
If Buffer != NULL and *Buffer != NULL, the output buffer has been | |
allocated by the caller and is being passed in. | |
@param BufferSize Indicates the buffer size passed in, and on output the size | |
required to complete the read | |
@param FoundType Indicates the type of the file who's data is returned | |
@param FileAttributes Indicates the attributes of the file who's data is resturned | |
@param AuthenticationStatus Indicates the authentication status of the data | |
@retval EFI_SUCCESS | |
@retval EFI_WARN_BUFFER_TOO_SMALL | |
@retval EFI_NOT_FOUND | |
@retval EFI_DEVICE_ERROR | |
@retval EFI_ACCESS_DENIED | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FV_READ_FILE) ( | |
IN EFI_FIRMWARE_VOLUME_PROTOCOL *This, | |
IN 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 | |
); | |
/** | |
Read the requested section from the specified file and returns data in Buffer. | |
@param This Calling context | |
@param NameGuid Filename identifying the file from which to read | |
@param SectionType Indicates what section type to retrieve | |
@param SectionInstance Indicates which instance of SectionType to retrieve | |
@param Buffer Pointer to pointer to buffer in which contents of file are returned. | |
<br> | |
If Buffer is NULL, only type, attributes, and size are returned as | |
there is no output buffer. | |
<br> | |
If Buffer != NULL and *Buffer == NULL, the output buffer is allocated | |
from BS pool by ReadFile | |
<br> | |
If Buffer != NULL and *Buffer != NULL, the output buffer has been | |
allocated by the caller and is being passed in. | |
@param BufferSize Indicates the buffer size passed in, and on output the size | |
required to complete the read | |
@param AuthenticationStatus Indicates the authentication status of the data | |
@retval EFI_SUCCESS | |
@retval EFI_WARN_BUFFER_TOO_SMALL | |
@retval EFI_OUT_OF_RESOURCES | |
@retval EFI_NOT_FOUND | |
@retval EFI_DEVICE_ERROR | |
@retval EFI_ACCESS_DENIED | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FV_READ_SECTION) ( | |
IN EFI_FIRMWARE_VOLUME_PROTOCOL *This, | |
IN EFI_GUID *NameGuid, | |
IN EFI_SECTION_TYPE SectionType, | |
IN UINTN SectionInstance, | |
IN OUT VOID **Buffer, | |
IN OUT UINTN *BufferSize, | |
OUT UINT32 *AuthenticationStatus | |
); | |
typedef UINT32 EFI_FV_WRITE_POLICY; | |
#define EFI_FV_UNRELIABLE_WRITE 0x00000000 | |
#define EFI_FV_RELIABLE_WRITE 0x00000001 | |
typedef struct { | |
EFI_GUID *NameGuid; | |
EFI_FV_FILETYPE Type; | |
EFI_FV_FILE_ATTRIBUTES FileAttributes; | |
VOID *Buffer; | |
UINT32 BufferSize; | |
} EFI_FV_WRITE_FILE_DATA; | |
/** | |
Write the supplied file (NameGuid) to the FV. | |
@param This Calling context | |
@param NumberOfFiles Indicates the number of file records pointed to by FileData | |
@param WritePolicy Indicates the level of reliability of the write with respect to | |
things like power failure events. | |
@param FileData A pointer to an array of EFI_FV_WRITE_FILE_DATA structures. Each | |
element in the array indicates a file to write, and there are | |
NumberOfFiles elements in the input array. | |
@retval EFI_SUCCESS | |
@retval EFI_OUT_OF_RESOURCES | |
@retval EFI_DEVICE_ERROR | |
@retval EFI_WRITE_PROTECTED | |
@retval EFI_NOT_FOUND | |
@retval EFI_INVALID_PARAMETER | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FV_WRITE_FILE) ( | |
IN EFI_FIRMWARE_VOLUME_PROTOCOL *This, | |
IN UINT32 NumberOfFiles, | |
IN EFI_FV_WRITE_POLICY WritePolicy, | |
IN EFI_FV_WRITE_FILE_DATA *FileData | |
); | |
/** | |
Given the input key, search for the next matching file in the volume. | |
@param This Calling context | |
@param Key Pointer to a caller allocated buffer that contains an implementation | |
specific key that is used to track where to begin searching on | |
successive calls. | |
@param FileType Indicates the file type to filter for | |
@param NameGuid Guid filename of the file found | |
@param Attributes Attributes of the file found | |
@param Size Size in bytes of the file found | |
@retval EFI_SUCCESS | |
@retval EFI_NOT_FOUND | |
@retval EFI_DEVICE_ERROR | |
@retval EFI_ACCESS_DENIED | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FV_GET_NEXT_FILE) ( | |
IN EFI_FIRMWARE_VOLUME_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 | |
); | |
/** | |
@par Protocol Description: | |
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. The Firmware | |
Volume Protocol also provides mechanisms for determining and modifying some | |
attributes of the firmware volume. | |
@param GetVolumeAttributes | |
Retrieves volume capabilities and current settings. | |
@param SetVolumeAttributes | |
Modifies the current settings of the firmware volume. | |
@param ReadFile | |
Reads an entire file from the firmware volume. | |
@param ReadSection | |
Reads a single section from a file into a buffer. | |
@param WriteFile | |
Writes an entire file into the firmware volume. | |
@param GetNextFile | |
Provides service to allow searching the firmware volume. | |
@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. | |
**/ | |
struct _EFI_FIRMWARE_VOLUME_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; | |
}; | |
extern EFI_GUID gEfiFirmwareVolumeProtocolGuid; | |
#endif |