2) Change EFI_FVB_ATTRIBUTE to EFI_FVB2_ATTRIBUTE, As Zimmer, Vincent’s PI1.0 errata document said, in PI we need use EFI_FVB2_ATTRIBUTE to differ the specification change. 3) Remove duplicate definition of SERIAL_MODE, PARALLEL_MODE in Include\Framework\Legacy16.h 4) Remove EFI_FV_FILE_ATTRIB_FIXED and EFI_FV_FILE_ATTRIB_ALIGNMENT from IntelFrameworkPkg\Include\Protocol\FirmwareVolume.h, because they defined in PI specification. 5) Remove EFI_FORM_LABEL from IntelFrameworkPkg\Include\Protocol\HiiFramework.h git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3333 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			317 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			317 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  This file declares Firmware Volume protocol.
 | 
						|
 | 
						|
  Copyright (c) 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:  FirmwareVolume.h
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  This protocol is defined in Firmware Volume specification.
 | 
						|
  Version 0.9
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _FIRMWARE_VOLUME_H_
 | 
						|
#define _FIRMWARE_VOLUME_H_
 | 
						|
 | 
						|
#include <PiDxe.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
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  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
 |