| /** @file | |
| This file defines the data structures that are architecturally defined for file | |
| images loaded via the FirmwareVolume protocol. The Firmware Volume specification | |
| is the basis for these definitions. | |
| 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: FimrwareVolumeImageFormat.h | |
| @par Revision Reference: | |
| These definitions are from Firmware Volume Spec 0.9. | |
| **/ | |
| #ifndef __FIRMWARE_VOLUME_IMAGE_FORMAT_H__ | |
| #define __FIRMWARE_VOLUME_IMAGE_FORMAT_H__ | |
| // | |
| // pack all data structures since this is actually a binary format and we cannot | |
| // allow internal padding in the data structures because of some compilerism.. | |
| // | |
| #pragma pack(1) | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Architectural file types | |
| // | |
| typedef UINT8 EFI_FV_FILETYPE; | |
| #define EFI_FV_FILETYPE_ALL 0x00 | |
| #define EFI_FV_FILETYPE_RAW 0x01 | |
| #define EFI_FV_FILETYPE_FREEFORM 0x02 | |
| #define EFI_FV_FILETYPE_SECURITY_CORE 0x03 | |
| #define EFI_FV_FILETYPE_PEI_CORE 0x04 | |
| #define EFI_FV_FILETYPE_DXE_CORE 0x05 | |
| #define EFI_FV_FILETYPE_PEIM 0x06 | |
| #define EFI_FV_FILETYPE_DRIVER 0x07 | |
| #define EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER 0x08 | |
| #define EFI_FV_FILETYPE_APPLICATION 0x09 | |
| // | |
| // File type 0x0A is reserved and should not be used | |
| // | |
| #define EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE 0x0B | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Section types | |
| // | |
| typedef UINT8 EFI_SECTION_TYPE; | |
| // | |
| // ************************************************************ | |
| // The section type EFI_SECTION_ALL is a psuedo type. It is | |
| // used as a wildcard when retrieving sections. The section | |
| // type EFI_SECTION_ALL matches all section types. | |
| // ************************************************************ | |
| // | |
| #define EFI_SECTION_ALL 0x00 | |
| // | |
| // ************************************************************ | |
| // Encapsulation section Type values | |
| // ************************************************************ | |
| // | |
| #define EFI_SECTION_COMPRESSION 0x01 | |
| #define EFI_SECTION_GUID_DEFINED 0x02 | |
| // | |
| // ************************************************************ | |
| // Leaf section Type values | |
| // ************************************************************ | |
| // | |
| #define EFI_SECTION_FIRST_LEAF_SECTION_TYPE 0x10 | |
| #define EFI_SECTION_PE32 0x10 | |
| #define EFI_SECTION_PIC 0x11 | |
| #define EFI_SECTION_TE 0x12 | |
| #define EFI_SECTION_DXE_DEPEX 0x13 | |
| #define EFI_SECTION_VERSION 0x14 | |
| #define EFI_SECTION_USER_INTERFACE 0x15 | |
| #define EFI_SECTION_COMPATIBILITY16 0x16 | |
| #define EFI_SECTION_FIRMWARE_VOLUME_IMAGE 0x17 | |
| #define EFI_SECTION_FREEFORM_SUBTYPE_GUID 0x18 | |
| #define EFI_SECTION_RAW 0x19 | |
| #define EFI_SECTION_PEI_DEPEX 0x1B | |
| #define EFI_SECTION_LAST_LEAF_SECTION_TYPE 0x1B | |
| #define EFI_SECTION_LAST_SECTION_TYPE 0x1B | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Common section header | |
| // | |
| typedef struct { | |
| UINT8 Size[3]; | |
| UINT8 Type; | |
| } EFI_COMMON_SECTION_HEADER; | |
| #define SECTION_SIZE(SectionHeaderPtr) \ | |
| ((UINT32) (*((UINT32 *) ((EFI_COMMON_SECTION_HEADER *) SectionHeaderPtr)->Size) & 0x00ffffff)) | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Compression section | |
| // | |
| // | |
| // CompressionType values | |
| // | |
| #define EFI_NOT_COMPRESSED 0x00 | |
| #define EFI_STANDARD_COMPRESSION 0x01 | |
| #define EFI_CUSTOMIZED_COMPRESSION 0x02 | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| UINT32 UncompressedLength; | |
| UINT8 CompressionType; | |
| } EFI_COMPRESSION_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // GUID defined section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| EFI_GUID SectionDefinitionGuid; | |
| UINT16 DataOffset; | |
| UINT16 Attributes; | |
| } EFI_GUID_DEFINED_SECTION; | |
| // | |
| // Bit values for Attributes | |
| // | |
| #define EFI_GUIDED_SECTION_PROCESSING_REQUIRED 0x01 | |
| #define EFI_GUIDED_SECTION_AUTH_STATUS_VALID 0x02 | |
| // | |
| // Bit values for AuthenticationStatus | |
| // | |
| #define EFI_AGGREGATE_AUTH_STATUS_PLATFORM_OVERRIDE 0x000001 | |
| #define EFI_AGGREGATE_AUTH_STATUS_IMAGE_SIGNED 0x000002 | |
| #define EFI_AGGREGATE_AUTH_STATUS_NOT_TESTED 0x000004 | |
| #define EFI_AGGREGATE_AUTH_STATUS_TEST_FAILED 0x000008 | |
| #define EFI_AGGREGATE_AUTH_STATUS_ALL 0x00000f | |
| #define EFI_LOCAL_AUTH_STATUS_PLATFORM_OVERRIDE 0x010000 | |
| #define EFI_LOCAL_AUTH_STATUS_IMAGE_SIGNED 0x020000 | |
| #define EFI_LOCAL_AUTH_STATUS_NOT_TESTED 0x040000 | |
| #define EFI_LOCAL_AUTH_STATUS_TEST_FAILED 0x080000 | |
| #define EFI_LOCAL_AUTH_STATUS_ALL 0x0f0000 | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // PE32+ section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| } EFI_PE32_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // PIC section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| } EFI_PIC_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // PEIM header section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| } EFI_PEIM_HEADER_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // DEPEX section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| } EFI_DEPEX_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Version section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| UINT16 BuildNumber; | |
| INT16 VersionString[1]; | |
| } EFI_VERSION_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // User interface section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| INT16 FileNameString[1]; | |
| } EFI_USER_INTERFACE_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Code16 section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| } EFI_CODE16_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Firmware Volume Image section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| } EFI_FIRMWARE_VOLUME_IMAGE_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Freeform subtype GUID section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| EFI_GUID SubTypeGuid; | |
| } EFI_FREEFORM_SUBTYPE_GUID_SECTION; | |
| // | |
| // //////////////////////////////////////////////////////////////////////////// | |
| // | |
| // Raw section | |
| // | |
| typedef struct { | |
| EFI_COMMON_SECTION_HEADER CommonHeader; | |
| } EFI_RAW_SECTION; | |
| // | |
| // undo the pragma from the beginning... | |
| // | |
| #pragma pack() | |
| typedef union { | |
| EFI_COMMON_SECTION_HEADER *CommonHeader; | |
| EFI_COMPRESSION_SECTION *CompressionSection; | |
| EFI_GUID_DEFINED_SECTION *GuidDefinedSection; | |
| EFI_PE32_SECTION *Pe32Section; | |
| EFI_PIC_SECTION *PicSection; | |
| EFI_PEIM_HEADER_SECTION *PeimHeaderSection; | |
| EFI_DEPEX_SECTION *DependencySection; | |
| EFI_VERSION_SECTION *VersionSection; | |
| EFI_USER_INTERFACE_SECTION *UISection; | |
| EFI_CODE16_SECTION *Code16Section; | |
| EFI_FIRMWARE_VOLUME_IMAGE_SECTION *FVImageSection; | |
| EFI_FREEFORM_SUBTYPE_GUID_SECTION *FreeformSubtypeSection; | |
| EFI_RAW_SECTION *RawSection; | |
| } EFI_FILE_SECTION_POINTER; | |
| #endif |