]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/Pi/PiFirmwareVolume.h
MdePkg/Include: Add management mode FV file type and depex.
[mirror_edk2.git] / MdePkg / Include / Pi / PiFirmwareVolume.h
CommitLineData
959ccb23 1/** @file\r
2 The firmware volume related definitions in PI.\r
3\r
e8645cec 4 Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
fbb393ab
LL
5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
959ccb23 9\r
fbb393ab
LL
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
959ccb23 12\r
959ccb23 13 @par Revision Reference:\r
e8645cec 14 PI Version 1.6\r
959ccb23 15\r
16**/\r
17\r
18#ifndef __PI_FIRMWAREVOLUME_H__\r
19#define __PI_FIRMWAREVOLUME_H__\r
20\r
dc53faa3 21///\r
22/// EFI_FV_FILE_ATTRIBUTES\r
23///\r
00edb218 24typedef UINT32 EFI_FV_FILE_ATTRIBUTES;\r
959ccb23 25\r
26//\r
27// Value of EFI_FV_FILE_ATTRIBUTES.\r
fbb393ab 28//\r
00edb218
A
29#define EFI_FV_FILE_ATTRIB_ALIGNMENT 0x0000001F\r
30#define EFI_FV_FILE_ATTRIB_FIXED 0x00000100\r
31#define EFI_FV_FILE_ATTRIB_MEMORY_MAPPED 0x00000200\r
959ccb23 32\r
dc53faa3 33///\r
34/// type of EFI FVB attribute\r
fbb393ab 35///\r
4ba967e7 36typedef UINT32 EFI_FVB_ATTRIBUTES_2;\r
959ccb23 37\r
fbb393ab 38//\r
959ccb23 39// Attributes bit definitions\r
fbb393ab 40//\r
959ccb23 41#define EFI_FVB2_READ_DISABLED_CAP 0x00000001\r
42#define EFI_FVB2_READ_ENABLED_CAP 0x00000002\r
43#define EFI_FVB2_READ_STATUS 0x00000004\r
44#define EFI_FVB2_WRITE_DISABLED_CAP 0x00000008\r
45#define EFI_FVB2_WRITE_ENABLED_CAP 0x00000010\r
46#define EFI_FVB2_WRITE_STATUS 0x00000020\r
47#define EFI_FVB2_LOCK_CAP 0x00000040\r
48#define EFI_FVB2_LOCK_STATUS 0x00000080\r
49#define EFI_FVB2_STICKY_WRITE 0x00000200\r
50#define EFI_FVB2_MEMORY_MAPPED 0x00000400\r
51#define EFI_FVB2_ERASE_POLARITY 0x00000800\r
52#define EFI_FVB2_READ_LOCK_CAP 0x00001000\r
53#define EFI_FVB2_READ_LOCK_STATUS 0x00002000\r
54#define EFI_FVB2_WRITE_LOCK_CAP 0x00004000\r
55#define EFI_FVB2_WRITE_LOCK_STATUS 0x00008000\r
56#define EFI_FVB2_ALIGNMENT 0x001F0000\r
57#define EFI_FVB2_ALIGNMENT_1 0x00000000\r
58#define EFI_FVB2_ALIGNMENT_2 0x00010000\r
59#define EFI_FVB2_ALIGNMENT_4 0x00020000\r
60#define EFI_FVB2_ALIGNMENT_8 0x00030000\r
61#define EFI_FVB2_ALIGNMENT_16 0x00040000\r
62#define EFI_FVB2_ALIGNMENT_32 0x00050000\r
63#define EFI_FVB2_ALIGNMENT_64 0x00060000\r
64#define EFI_FVB2_ALIGNMENT_128 0x00070000\r
65#define EFI_FVB2_ALIGNMENT_256 0x00080000\r
66#define EFI_FVB2_ALIGNMENT_512 0x00090000\r
67#define EFI_FVB2_ALIGNMENT_1K 0x000A0000\r
68#define EFI_FVB2_ALIGNMENT_2K 0x000B0000\r
69#define EFI_FVB2_ALIGNMENT_4K 0x000C0000\r
70#define EFI_FVB2_ALIGNMENT_8K 0x000D0000\r
71#define EFI_FVB2_ALIGNMENT_16K 0x000E0000\r
72#define EFI_FVB2_ALIGNMENT_32K 0x000F0000\r
73#define EFI_FVB2_ALIGNMENT_64K 0x00100000\r
74#define EFI_FVB2_ALIGNMENT_128K 0x00110000\r
75#define EFI_FVB2_ALIGNMENT_256K 0x00120000\r
6f583626 76#define EFI_FVB2_ALIGNMENT_512K 0x00130000\r
959ccb23 77#define EFI_FVB2_ALIGNMENT_1M 0x00140000\r
78#define EFI_FVB2_ALIGNMENT_2M 0x00150000\r
79#define EFI_FVB2_ALIGNMENT_4M 0x00160000\r
80#define EFI_FVB2_ALIGNMENT_8M 0x00170000\r
81#define EFI_FVB2_ALIGNMENT_16M 0x00180000\r
82#define EFI_FVB2_ALIGNMENT_32M 0x00190000\r
83#define EFI_FVB2_ALIGNMENT_64M 0x001A0000\r
84#define EFI_FVB2_ALIGNMENT_128M 0x001B0000\r
85#define EFI_FVB2_ALIGNMENT_256M 0x001C0000\r
86#define EFI_FVB2_ALIGNMENT_512M 0x001D0000\r
87#define EFI_FVB2_ALIGNMENT_1G 0x001E0000\r
88#define EFI_FVB2_ALIGNMENT_2G 0x001F0000\r
3837e91c 89#define EFI_FVB2_WEAK_ALIGNMENT 0x80000000\r
959ccb23 90\r
91typedef struct {\r
1bf79370
LG
92 ///\r
93 /// The number of sequential blocks which are of the same size.\r
94 ///\r
959ccb23 95 UINT32 NumBlocks;\r
1bf79370
LG
96 ///\r
97 /// The size of the blocks.\r
98 ///\r
959ccb23 99 UINT32 Length;\r
100} EFI_FV_BLOCK_MAP_ENTRY;\r
101\r
0b3cac32 102///\r
103/// Describes the features and layout of the firmware volume.\r
104///\r
959ccb23 105typedef struct {\r
1bf79370 106 ///\r
fbb393ab 107 /// The first 16 bytes are reserved to allow for the reset vector of\r
1bf79370
LG
108 /// processors whose reset vector is at address 0.\r
109 ///\r
00edb218 110 UINT8 ZeroVector[16];\r
1bf79370
LG
111 ///\r
112 /// Declares the file system with which the firmware volume is formatted.\r
113 ///\r
00edb218 114 EFI_GUID FileSystemGuid;\r
1bf79370
LG
115 ///\r
116 /// Length in bytes of the complete firmware volume, including the header.\r
117 ///\r
00edb218 118 UINT64 FvLength;\r
1bf79370
LG
119 ///\r
120 /// Set to EFI_FVH_SIGNATURE\r
121 ///\r
00edb218 122 UINT32 Signature;\r
1bf79370
LG
123 ///\r
124 /// Declares capabilities and power-on defaults for the firmware volume.\r
125 ///\r
4ba967e7 126 EFI_FVB_ATTRIBUTES_2 Attributes;\r
1bf79370
LG
127 ///\r
128 /// Length in bytes of the complete firmware volume header.\r
129 ///\r
00edb218 130 UINT16 HeaderLength;\r
1bf79370
LG
131 ///\r
132 /// A 16-bit checksum of the firmware volume header. A valid header sums to zero.\r
133 ///\r
00edb218 134 UINT16 Checksum;\r
1bf79370
LG
135 ///\r
136 /// Offset, relative to the start of the header, of the extended header\r
137 /// (EFI_FIRMWARE_VOLUME_EXT_HEADER) or zero if there is no extended header.\r
138 ///\r
00edb218 139 UINT16 ExtHeaderOffset;\r
1bf79370
LG
140 ///\r
141 /// This field must always be set to zero.\r
142 ///\r
00edb218 143 UINT8 Reserved[1];\r
1bf79370
LG
144 ///\r
145 /// Set to 2. Future versions of this specification may define new header fields and will\r
146 /// increment the Revision field accordingly.\r
147 ///\r
00edb218 148 UINT8 Revision;\r
1bf79370
LG
149 ///\r
150 /// An array of run-length encoded FvBlockMapEntry structures. The array is\r
151 /// terminated with an entry of {0,0}.\r
152 ///\r
959ccb23 153 EFI_FV_BLOCK_MAP_ENTRY BlockMap[1];\r
154} EFI_FIRMWARE_VOLUME_HEADER;\r
155\r
07636730 156#define EFI_FVH_SIGNATURE SIGNATURE_32 ('_', 'F', 'V', 'H')\r
959ccb23 157\r
8a017eaf 158///\r
159/// Firmware Volume Header Revision definition\r
160///\r
eda67610 161#define EFI_FVH_REVISION 0x02\r
959ccb23 162\r
dc53faa3 163///\r
164/// Extension header pointed by ExtHeaderOffset of volume header.\r
fbb393ab 165///\r
959ccb23 166typedef struct {\r
1bf79370
LG
167 ///\r
168 /// Firmware volume name.\r
169 ///\r
959ccb23 170 EFI_GUID FvName;\r
1bf79370
LG
171 ///\r
172 /// Size of the rest of the extension header, including this structure.\r
173 ///\r
959ccb23 174 UINT32 ExtHeaderSize;\r
175} EFI_FIRMWARE_VOLUME_EXT_HEADER;\r
176\r
dc53faa3 177///\r
178/// Entry struture for describing FV extension header\r
fbb393ab 179///\r
959ccb23 180typedef struct {\r
1bf79370
LG
181 ///\r
182 /// Size of this header extension.\r
183 ///\r
959ccb23 184 UINT16 ExtEntrySize;\r
1bf79370
LG
185 ///\r
186 /// Type of the header.\r
187 ///\r
959ccb23 188 UINT16 ExtEntryType;\r
189} EFI_FIRMWARE_VOLUME_EXT_ENTRY;\r
190\r
191#define EFI_FV_EXT_TYPE_OEM_TYPE 0x01\r
dc53faa3 192///\r
193/// This extension header provides a mapping between a GUID and an OEM file type.\r
fbb393ab 194///\r
959ccb23 195typedef struct {\r
1bf79370
LG
196 ///\r
197 /// Standard extension entry, with the type EFI_FV_EXT_TYPE_OEM_TYPE.\r
198 ///\r
959ccb23 199 EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;\r
1bf79370
LG
200 ///\r
201 /// A bit mask, one bit for each file type between 0xC0 (bit 0) and 0xDF (bit 31). If a bit\r
202 /// is '1', then the GUID entry exists in Types. If a bit is '0' then no GUID entry exists in Types.\r
203 ///\r
959ccb23 204 UINT32 TypeMask;\r
1bf79370
LG
205 ///\r
206 /// An array of GUIDs, each GUID representing an OEM file type.\r
fbb393ab 207 ///\r
191daa25
SZ
208 /// EFI_GUID Types[1];\r
209 ///\r
959ccb23 210} EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE;\r
211\r
2ab7038c
LG
212#define EFI_FV_EXT_TYPE_GUID_TYPE 0x0002\r
213\r
214///\r
30f001ca
SZ
215/// This extension header EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE provides a vendor specific\r
216/// GUID FormatType type which includes a length and a successive series of data bytes.\r
2ab7038c
LG
217///\r
218typedef struct {\r
219 ///\r
220 /// Standard extension entry, with the type EFI_FV_EXT_TYPE_OEM_TYPE.\r
221 ///\r
222 EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;\r
223 ///\r
224 /// Vendor-specific GUID.\r
225 ///\r
226 EFI_GUID FormatType;\r
227 ///\r
228 /// An arry of bytes of length Length.\r
229 ///\r
191daa25
SZ
230 /// UINT8 Data[1];\r
231 ///\r
2ab7038c 232} EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE;\r
959ccb23 233\r
e8645cec
SZ
234#define EFI_FV_EXT_TYPE_USED_SIZE_TYPE 0x03\r
235\r
236///\r
237/// The EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE can be used to find\r
238/// out how many EFI_FVB2_ERASE_POLARITY bytes are at the end of the FV.\r
239///\r
240typedef struct {\r
241 ///\r
242 /// Standard extension entry, with the type EFI_FV_EXT_TYPE_USED_SIZE_TYPE.\r
243 ///\r
244 EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;\r
245 ///\r
246 /// The number of bytes of the FV that are in uses. The remaining\r
247 /// EFI_FIRMWARE_VOLUME_HEADER FvLength minus UsedSize bytes in\r
248 /// the FV must contain the value implied by EFI_FVB2_ERASE_POLARITY.\r
249 ///\r
250 UINT32 UsedSize;\r
251} EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE;\r
252\r
959ccb23 253#endif\r