1 /** @file 2 The firmware volume related definitions in PI. 3 4 @par Revision Reference: 5 Version 1.2C 6 7 Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> 8 9 This program and the accompanying materials are licensed and made available 10 under the terms and conditions of the BSD License which accompanies this 11 distribution. The full text of the license may be found at 12 http://opensource.org/licenses/bsd-license.php 13 14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 16 17 **/ 18 19 #ifndef __PI_FIRMWAREVOLUME_H__ 20 #define __PI_FIRMWAREVOLUME_H__ 21 22 // 23 // EFI_FV_FILE_ATTRIBUTES 24 // 25 typedef UINT32 EFI_FV_FILE_ATTRIBUTES; 26 27 // 28 // Value of EFI_FV_FILE_ATTRIBUTES. 29 // 30 #define EFI_FV_FILE_ATTRIB_ALIGNMENT 0x0000001F 31 #define EFI_FV_FILE_ATTRIB_FIXED 0x00000100 32 #define EFI_FV_FILE_ATTRIB_MEMORY_MAPPED 0x00000200 33 34 typedef UINT32 EFI_FVB_ATTRIBUTES_2; 35 36 // 37 // Attributes bit definitions 38 // 39 #define EFI_FVB2_READ_DISABLED_CAP 0x00000001 40 #define EFI_FVB2_READ_ENABLED_CAP 0x00000002 41 #define EFI_FVB2_READ_STATUS 0x00000004 42 #define EFI_FVB2_WRITE_DISABLED_CAP 0x00000008 43 #define EFI_FVB2_WRITE_ENABLED_CAP 0x00000010 44 #define EFI_FVB2_WRITE_STATUS 0x00000020 45 #define EFI_FVB2_LOCK_CAP 0x00000040 46 #define EFI_FVB2_LOCK_STATUS 0x00000080 47 #define EFI_FVB2_STICKY_WRITE 0x00000200 48 #define EFI_FVB2_MEMORY_MAPPED 0x00000400 49 #define EFI_FVB2_ERASE_POLARITY 0x00000800 50 #define EFI_FVB2_READ_LOCK_CAP 0x00001000 51 #define EFI_FVB2_READ_LOCK_STATUS 0x00002000 52 #define EFI_FVB2_WRITE_LOCK_CAP 0x00004000 53 #define EFI_FVB2_WRITE_LOCK_STATUS 0x00008000 54 #define EFI_FVB2_ALIGNMENT 0x001F0000 55 #define EFI_FVB2_WEAK_ALIGNMENT 0x80000000 56 #define EFI_FVB2_ALIGNMENT_1 0x00000000 57 #define EFI_FVB2_ALIGNMENT_2 0x00010000 58 #define EFI_FVB2_ALIGNMENT_4 0x00020000 59 #define EFI_FVB2_ALIGNMENT_8 0x00030000 60 #define EFI_FVB2_ALIGNMENT_16 0x00040000 61 #define EFI_FVB2_ALIGNMENT_32 0x00050000 62 #define EFI_FVB2_ALIGNMENT_64 0x00060000 63 #define EFI_FVB2_ALIGNMENT_128 0x00070000 64 #define EFI_FVB2_ALIGNMENT_256 0x00080000 65 #define EFI_FVB2_ALIGNMENT_512 0x00090000 66 #define EFI_FVB2_ALIGNMENT_1K 0x000A0000 67 #define EFI_FVB2_ALIGNMENT_2K 0x000B0000 68 #define EFI_FVB2_ALIGNMENT_4K 0x000C0000 69 #define EFI_FVB2_ALIGNMENT_8K 0x000D0000 70 #define EFI_FVB2_ALIGNMENT_16K 0x000E0000 71 #define EFI_FVB2_ALIGNMENT_32K 0x000F0000 72 #define EFI_FVB2_ALIGNMENT_64K 0x00100000 73 #define EFI_FVB2_ALIGNMENT_128K 0x00110000 74 #define EFI_FVB2_ALIGNMENT_256K 0x00120000 75 #define EFI_FVB2_ALIGNMENT_512K 0x00130000 76 #define EFI_FVB2_ALIGNMENT_1M 0x00140000 77 #define EFI_FVB2_ALIGNMENT_2M 0x00150000 78 #define EFI_FVB2_ALIGNMENT_4M 0x00160000 79 #define EFI_FVB2_ALIGNMENT_8M 0x00170000 80 #define EFI_FVB2_ALIGNMENT_16M 0x00180000 81 #define EFI_FVB2_ALIGNMENT_32M 0x00190000 82 #define EFI_FVB2_ALIGNMENT_64M 0x001A0000 83 #define EFI_FVB2_ALIGNMENT_128M 0x001B0000 84 #define EFI_FVB2_ALIGNMENT_256M 0x001C0000 85 #define EFI_FVB2_ALIGNMENT_512M 0x001D0000 86 #define EFI_FVB2_ALIGNMENT_1G 0x001E0000 87 #define EFI_FVB2_ALIGNMENT_2G 0x001F0000 88 89 90 typedef struct { 91 UINT32 NumBlocks; 92 UINT32 Length; 93 } EFI_FV_BLOCK_MAP_ENTRY; 94 95 // 96 // Describes the features and layout of the firmware volume. 97 // 98 typedef struct { 99 UINT8 ZeroVector[16]; 100 EFI_GUID FileSystemGuid; 101 UINT64 FvLength; 102 UINT32 Signature; 103 EFI_FVB_ATTRIBUTES_2 Attributes; 104 UINT16 HeaderLength; 105 UINT16 Checksum; 106 UINT16 ExtHeaderOffset; 107 UINT8 Reserved[1]; 108 UINT8 Revision; 109 EFI_FV_BLOCK_MAP_ENTRY BlockMap[1]; 110 } EFI_FIRMWARE_VOLUME_HEADER; 111 112 #define EFI_FVH_SIGNATURE SIGNATURE_32 ('_', 'F', 'V', 'H') 113 114 /// 115 /// Firmware Volume Header Revision definition 116 /// 117 #define EFI_FVH_REVISION 0x02 118 119 // 120 // Extension header pointed by ExtHeaderOffset of volume header. 121 // 122 typedef struct { 123 EFI_GUID FvName; 124 UINT32 ExtHeaderSize; 125 } EFI_FIRMWARE_VOLUME_EXT_HEADER; 126 127 typedef struct { 128 UINT16 ExtEntrySize; 129 UINT16 ExtEntryType; 130 } EFI_FIRMWARE_VOLUME_EXT_ENTRY; 131 132 #define EFI_FV_EXT_TYPE_OEM_TYPE 0x01 133 typedef struct { 134 EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr; 135 UINT32 TypeMask; 136 137 // 138 // Array of GUIDs. 139 // Each GUID represents an OEM file type. 140 // 141 // EFI_GUID Types[1]; 142 // 143 } EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE; 144 145 #define EFI_FV_EXT_TYPE_GUID_TYPE 0x0002 146 typedef struct { 147 EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr; 148 EFI_GUID FormatType; 149 150 // 151 // An arry of bytes of length Length. 152 // 153 // UINT8 Data[1]; 154 // 155 } EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE; 156 157 #endif 158