REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			748 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			748 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
|   @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
 |