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