1/** @file
2  The firmware volume related definitions in PI.
3
4  Copyright (c) 2006 - 2008, Intel Corporation
5  All rights reserved. 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.0
15
16**/
17
18#ifndef __PI_FIRMWAREVOLUME_H__
19#define __PI_FIRMWAREVOLUME_H__
20
21#include <gpxe/efi/ProcessorBind.h>
22
23///
24/// EFI_FV_FILE_ATTRIBUTES
25///
26typedef UINT32  EFI_FV_FILE_ATTRIBUTES;
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///
38typedef UINT32  EFI_FVB_ATTRIBUTES_2;
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_ALIGNMNET_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
92
93typedef struct {
94  UINT32 NumBlocks;
95  UINT32 Length;
96} EFI_FV_BLOCK_MAP_ENTRY;
97
98///
99/// Describes the features and layout of the firmware volume.
100///
101typedef struct {
102  UINT8                     ZeroVector[16];
103  EFI_GUID                  FileSystemGuid;
104  UINT64                    FvLength;
105  UINT32                    Signature;
106  EFI_FVB_ATTRIBUTES_2      Attributes;
107  UINT16                    HeaderLength;
108  UINT16                    Checksum;
109  UINT16                    ExtHeaderOffset;
110  UINT8                     Reserved[1];
111  UINT8                     Revision;
112  EFI_FV_BLOCK_MAP_ENTRY    BlockMap[1];
113} EFI_FIRMWARE_VOLUME_HEADER;
114
115#define EFI_FVH_SIGNATURE EFI_SIGNATURE_32 ('_', 'F', 'V', 'H')
116
117///
118/// Firmware Volume Header Revision definition
119///
120#define EFI_FVH_REVISION  0x02
121
122///
123/// Extension header pointed by ExtHeaderOffset of volume header.
124///
125typedef struct {
126  EFI_GUID  FvName;
127  UINT32    ExtHeaderSize;
128} EFI_FIRMWARE_VOLUME_EXT_HEADER;
129
130///
131/// Entry struture for describing FV extension header
132///
133typedef struct {
134  UINT16    ExtEntrySize;
135  UINT16    ExtEntryType;
136} EFI_FIRMWARE_VOLUME_EXT_ENTRY;
137
138#define EFI_FV_EXT_TYPE_OEM_TYPE  0x01
139///
140/// This extension header provides a mapping between a GUID and an OEM file type.
141///
142typedef struct {
143  EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;
144  UINT32    TypeMask;
145
146  //
147  // Array of GUIDs.
148  // Each GUID represents an OEM file type.
149  //
150  EFI_GUID  Types[1];
151} EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE;
152
153
154#endif
155