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