Add FSP_FSPP_SIGNATURE in 1.1.
[mirror_edk2.git] / IntelFspPkg / Include / FspInfoHeader.h
1 /** @file
2 Intel FSP Info Header definition from Intel Firmware Support Package External
3 Architecture Specification v1.1, April 2015, revision 001.
4
5 Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #ifndef _FSP_INFO_HEADER_H_
17 #define _FSP_INFO_HEADER_H_
18
19 #define FSP_HEADER_REVISION_1 1
20 #define FSP_HEADER_REVISION_2 2
21
22 #define FSPE_HEADER_REVISION_1 1
23 #define FSPP_HEADER_REVISION_1 1
24
25 ///
26 /// Fixed FSP header offset in the FSP image
27 ///
28 #define FSP_INFO_HEADER_OFF 0x94
29
30 #define OFFSET_IN_FSP_INFO_HEADER(x) (UINT32)&((FSP_INFO_HEADER *)(UINTN)0)->x
31
32 #define FSP_INFO_HEADER_SIGNATURE SIGNATURE_32 ('F', 'S', 'P', 'H')
33
34 #pragma pack(1)
35
36 typedef struct {
37 ///
38 /// Byte 0x00: Signature ('FSPH') for the FSP Information Header
39 ///
40 UINT32 Signature;
41 ///
42 /// Byte 0x04: Length of the FSP Information Header
43 ///
44 UINT32 HeaderLength;
45 ///
46 /// Byte 0x08: Reserved
47 ///
48 UINT8 Reserved1[3];
49 ///
50 /// Byte 0x0B: Revision of the FSP Information Header
51 ///
52 UINT8 HeaderRevision;
53 ///
54 /// Byte 0x0C: Revision of the FSP binary
55 ///
56 UINT32 ImageRevision;
57
58
59 ///
60 /// Byte 0x10: Signature string that will help match the FSP Binary to a supported
61 /// hardware configuration.
62 ///
63 CHAR8 ImageId[8];
64 ///
65 /// Byte 0x18: Size of the entire FSP binary
66 ///
67 UINT32 ImageSize;
68 ///
69 /// Byte 0x1C: FSP binary preferred base address
70 ///
71 UINT32 ImageBase;
72
73
74 ///
75 /// Byte 0x20: Attribute for the FSP binary
76 ///
77 UINT32 ImageAttribute;
78 ///
79 /// Byte 0x24: Offset of the FSP configuration region
80 ///
81 UINT32 CfgRegionOffset;
82 ///
83 /// Byte 0x28: Size of the FSP configuration region
84 ///
85 UINT32 CfgRegionSize;
86 ///
87 /// Byte 0x2C: Number of API entries this FSP supports
88 ///
89 UINT32 ApiEntryNum;
90
91
92 ///
93 /// Byte 0x30: The offset for the API to setup a temporary stack till the memory
94 /// is initialized.
95 ///
96 UINT32 TempRamInitEntryOffset;
97 ///
98 /// Byte 0x34: The offset for the API to initialize the CPU and the chipset (SOC)
99 ///
100 UINT32 FspInitEntryOffset;
101 ///
102 /// Byte 0x38: The offset for the API to inform the FSP about the different stages
103 /// in the boot process
104 ///
105 UINT32 NotifyPhaseEntryOffset;
106
107 ///
108 /// Below fields are added in FSP Revision 2
109 ///
110
111 ///
112 /// Byte 0x3C: The offset for the API to initialize the memory
113 ///
114 UINT32 FspMemoryInitEntryOffset;
115 ///
116 /// Byte 0x40: The offset for the API to tear down temporary RAM
117 ///
118 UINT32 TempRamExitEntryOffset;
119 ///
120 /// Byte 0x44: The offset for the API to initialize the CPU and chipset
121 ///
122 UINT32 FspSiliconInitEntryOffset;
123
124 } FSP_INFO_HEADER;
125
126 ///
127 /// Below structure is added in FSP version 2
128 ///
129 #define FSP_INFO_EXTENDED_HEADER_SIGNATURE SIGNATURE_32 ('F', 'S', 'P', 'E')
130
131 typedef struct {
132 ///
133 /// Byte 0x00: Signature ('FSPE') for the FSP Extended Information Header
134 ///
135 UINT32 Signature;
136 ///
137 /// Byte 0x04: Length of the table in bytes, including all additional FSP producer defined data.
138 ///
139 UINT32 Length;
140 ///
141 /// Byte 0x08: FSP producer defined revision of the table.
142 ///
143 UINT8 Revision;
144 ///
145 /// Byte 0x09: Reserved for future use.
146 ///
147 UINT8 Reserved;
148 ///
149 /// Byte 0x0A: FSP producer identification string
150 ///
151 CHAR8 FspProducerId[6];
152 ///
153 /// Byte 0x10: FSP producer implementation revision number. Larger numbers are assumed to be newer revisions.
154 ///
155 UINT32 FspProducerRevision;
156 ///
157 /// Byte 0x14: Size of the FSP producer defined data (n) in bytes.
158 ///
159 UINT32 FspProducerDataSize;
160 ///
161 /// Byte 0x18: FSP producer defined data of size (n) defined by FspProducerDataSize.
162 ///
163
164 } FSP_INFO_EXTENDED_HEADER;
165
166 //
167 // A generic table search algorithm for additional tables can be implemented with a
168 // signature search algorithm until a terminator signature 'FSPP' is found.
169 //
170 #define FSP_FSPP_SIGNATURE SIGNATURE_32 ('F', 'S', 'P', 'P')
171
172 #pragma pack()
173
174 #endif