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