1.Updated EFI_FVB_ATTRIBUTES to EFI_FVB_ATTRIBUTES_2 to follow PI spec.
[people/mcb30/edk2.git] / edk2 / MdePkg / Include / Pi / PiFirmwareVolume.h
1 /** @file\r
2   The firmware volume related definitions in PI.\r
3 \r
4   Copyright (c) 2006 - 2007, Intel Corporation                                                         \r
5   All rights reserved. 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
9 \r
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
12 \r
13   @par Revision Reference:\r
14   Version 1.0.\r
15 \r
16 **/\r
17 \r
18 #ifndef __PI_FIRMWAREVOLUME_H__\r
19 #define __PI_FIRMWAREVOLUME_H__\r
20 \r
21 #include <ProcessorBind.h>\r
22 \r
23 ///\r
24 /// EFI_FV_FILE_ATTRIBUTES\r
25 ///\r
26 typedef UINT32  EFI_FV_FILE_ATTRIBUTES;\r
27 \r
28 //\r
29 // Value of EFI_FV_FILE_ATTRIBUTES.\r
30 // \r
31 #define EFI_FV_FILE_ATTRIB_ALIGNMENT      0x0000001F\r
32 #define EFI_FV_FILE_ATTRIB_FIXED          0x00000100\r
33 #define EFI_FV_FILE_ATTRIB_MEMORY_MAPPED  0x00000200\r
34 \r
35 ///\r
36 /// type of EFI FVB attribute\r
37 /// \r
38 typedef UINT32  EFI_FVB_ATTRIBUTES_2;\r
39 \r
40 // \r
41 // Attributes bit definitions\r
42 // \r
43 #define EFI_FVB2_READ_DISABLED_CAP  0x00000001\r
44 #define EFI_FVB2_READ_ENABLED_CAP   0x00000002\r
45 #define EFI_FVB2_READ_STATUS        0x00000004\r
46 #define EFI_FVB2_WRITE_DISABLED_CAP 0x00000008\r
47 #define EFI_FVB2_WRITE_ENABLED_CAP  0x00000010\r
48 #define EFI_FVB2_WRITE_STATUS       0x00000020\r
49 #define EFI_FVB2_LOCK_CAP           0x00000040\r
50 #define EFI_FVB2_LOCK_STATUS        0x00000080\r
51 #define EFI_FVB2_STICKY_WRITE       0x00000200\r
52 #define EFI_FVB2_MEMORY_MAPPED      0x00000400\r
53 #define EFI_FVB2_ERASE_POLARITY     0x00000800\r
54 #define EFI_FVB2_READ_LOCK_CAP      0x00001000\r
55 #define EFI_FVB2_READ_LOCK_STATUS   0x00002000\r
56 #define EFI_FVB2_WRITE_LOCK_CAP     0x00004000\r
57 #define EFI_FVB2_WRITE_LOCK_STATUS  0x00008000\r
58 #define EFI_FVB2_ALIGNMENT          0x001F0000\r
59 #define EFI_FVB2_ALIGNMENT_1        0x00000000\r
60 #define EFI_FVB2_ALIGNMENT_2        0x00010000\r
61 #define EFI_FVB2_ALIGNMENT_4        0x00020000\r
62 #define EFI_FVB2_ALIGNMENT_8        0x00030000\r
63 #define EFI_FVB2_ALIGNMENT_16       0x00040000\r
64 #define EFI_FVB2_ALIGNMENT_32       0x00050000\r
65 #define EFI_FVB2_ALIGNMENT_64       0x00060000\r
66 #define EFI_FVB2_ALIGNMENT_128      0x00070000\r
67 #define EFI_FVB2_ALIGNMENT_256      0x00080000\r
68 #define EFI_FVB2_ALIGNMENT_512      0x00090000\r
69 #define EFI_FVB2_ALIGNMENT_1K       0x000A0000\r
70 #define EFI_FVB2_ALIGNMENT_2K       0x000B0000\r
71 #define EFI_FVB2_ALIGNMENT_4K       0x000C0000\r
72 #define EFI_FVB2_ALIGNMENT_8K       0x000D0000\r
73 #define EFI_FVB2_ALIGNMENT_16K      0x000E0000\r
74 #define EFI_FVB2_ALIGNMENT_32K      0x000F0000\r
75 #define EFI_FVB2_ALIGNMENT_64K      0x00100000\r
76 #define EFI_FVB2_ALIGNMENT_128K     0x00110000\r
77 #define EFI_FVB2_ALIGNMENT_256K     0x00120000\r
78 #define EFI_FVB2_ALIGNMNET_512K     0x00130000\r
79 #define EFI_FVB2_ALIGNMENT_1M       0x00140000\r
80 #define EFI_FVB2_ALIGNMENT_2M       0x00150000\r
81 #define EFI_FVB2_ALIGNMENT_4M       0x00160000\r
82 #define EFI_FVB2_ALIGNMENT_8M       0x00170000\r
83 #define EFI_FVB2_ALIGNMENT_16M      0x00180000\r
84 #define EFI_FVB2_ALIGNMENT_32M      0x00190000\r
85 #define EFI_FVB2_ALIGNMENT_64M      0x001A0000\r
86 #define EFI_FVB2_ALIGNMENT_128M     0x001B0000\r
87 #define EFI_FVB2_ALIGNMENT_256M     0x001C0000\r
88 #define EFI_FVB2_ALIGNMENT_512M     0x001D0000\r
89 #define EFI_FVB2_ALIGNMENT_1G       0x001E0000\r
90 #define EFI_FVB2_ALIGNMENT_2G       0x001F0000\r
91 \r
92 \r
93 typedef struct {\r
94   UINT32 NumBlocks;\r
95   UINT32 Length;\r
96 } EFI_FV_BLOCK_MAP_ENTRY;\r
97 \r
98 ///\r
99 /// Describes the features and layout of the firmware volume.\r
100 ///\r
101 typedef struct {\r
102   UINT8                     ZeroVector[16];\r
103   EFI_GUID                  FileSystemGuid;\r
104   UINT64                    FvLength;\r
105   UINT32                    Signature;\r
106   EFI_FVB_ATTRIBUTES_2      Attributes;\r
107   UINT16                    HeaderLength;\r
108   UINT16                    Checksum;\r
109   UINT16                    ExtHeaderOffset;\r
110   UINT8                     Reserved[1];\r
111   UINT8                     Revision;\r
112   EFI_FV_BLOCK_MAP_ENTRY    BlockMap[1];\r
113 } EFI_FIRMWARE_VOLUME_HEADER;\r
114 \r
115 #define EFI_FVH_SIGNATURE EFI_SIGNATURE_32 ('_', 'F', 'V', 'H')\r
116 \r
117 ///\r
118 /// Firmware Volume Header Revision definition\r
119 ///\r
120 #define EFI_FVH_REVISION  0x02\r
121 \r
122 ///\r
123 /// Extension header pointed by ExtHeaderOffset of volume header.\r
124 /// \r
125 typedef struct {\r
126   EFI_GUID  FvName;\r
127   UINT32    ExtHeaderSize;\r
128 } EFI_FIRMWARE_VOLUME_EXT_HEADER;\r
129 \r
130 ///\r
131 /// Entry struture for describing FV extension header\r
132 /// \r
133 typedef struct {\r
134   UINT16    ExtEntrySize;\r
135   UINT16    ExtEntryType;\r
136 } EFI_FIRMWARE_VOLUME_EXT_ENTRY;\r
137 \r
138 #define EFI_FV_EXT_TYPE_OEM_TYPE  0x01\r
139 ///\r
140 /// This extension header provides a mapping between a GUID and an OEM file type.\r
141 /// \r
142 typedef struct {\r
143   EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;\r
144   UINT32    TypeMask;\r
145 \r
146   //\r
147   // Array of GUIDs. \r
148   // Each GUID represents an OEM file type.\r
149   // \r
150   EFI_GUID  Types[1];\r
151 } EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE;\r
152 \r
153 \r
154 #endif\r