]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Framework/Include/PeiHob.h
Maintainers.txt: Remove EdkCompatibilityPkg information
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Include / PeiHob.h
1 /*++
2
3 Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 PeiHob.h
15
16 Abstract:
17
18 PEI Hand Off Block (HOB) definition.
19
20 The HOB is a memory data structure used to hand-off system information from
21 PEI to DXE (the next phase).
22
23 --*/
24
25 #ifndef _PEI_HOB_H_
26 #define _PEI_HOB_H_
27
28 #include "BootMode.h"
29
30 //
31 // Every Hob must start with this data structure.
32 //
33 typedef struct {
34 UINT16 HobType;
35 UINT16 HobLength;
36 UINT32 Reserved;
37 } EFI_HOB_GENERIC_HEADER;
38
39 //
40 // End of HOB List HOB
41 //
42 #define EFI_HOB_TYPE_END_OF_HOB_LIST 0xffff
43
44 //
45 // Handoff Information Table HOB
46 //
47 #define EFI_HOB_TYPE_HANDOFF 0x0001
48
49 #define EFI_HOB_HANDOFF_TABLE_VERSION 0x0009
50
51 typedef UINT32 EFI_BOOT_MODE;
52
53 typedef struct {
54 EFI_HOB_GENERIC_HEADER Header;
55 UINT32 Version;
56 EFI_BOOT_MODE BootMode;
57 EFI_PHYSICAL_ADDRESS EfiMemoryTop;
58 EFI_PHYSICAL_ADDRESS EfiMemoryBottom;
59 EFI_PHYSICAL_ADDRESS EfiFreeMemoryTop;
60 EFI_PHYSICAL_ADDRESS EfiFreeMemoryBottom;
61 EFI_PHYSICAL_ADDRESS EfiEndOfHobList;
62 } EFI_HOB_HANDOFF_INFO_TABLE;
63
64 //
65 // Memory Descriptor HOB
66 //
67 #define EFI_HOB_TYPE_MEMORY_ALLOCATION 0x0002
68
69 typedef struct {
70 EFI_GUID Name;
71 EFI_PHYSICAL_ADDRESS MemoryBaseAddress;
72 UINT64 MemoryLength;
73 EFI_MEMORY_TYPE MemoryType;
74 UINT8 Reserved[4];
75 } EFI_HOB_MEMORY_ALLOCATION_HEADER;
76
77 typedef struct {
78 EFI_HOB_GENERIC_HEADER Header;
79 EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;
80 //
81 // Additional data pertaining to the "Name" Guid memory
82 // may go here.
83 //
84 } EFI_HOB_MEMORY_ALLOCATION;
85
86 typedef struct {
87 EFI_HOB_GENERIC_HEADER Header;
88 EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;
89 } EFI_HOB_MEMORY_ALLOCATION_BSP_STORE;
90
91 typedef struct {
92 EFI_HOB_GENERIC_HEADER Header;
93 EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;
94 } EFI_HOB_MEMORY_ALLOCATION_STACK;
95
96 typedef struct {
97 EFI_HOB_GENERIC_HEADER Header;
98 EFI_HOB_MEMORY_ALLOCATION_HEADER MemoryAllocationHeader;
99 EFI_GUID ModuleName;
100 EFI_PHYSICAL_ADDRESS EntryPoint;
101 } EFI_HOB_MEMORY_ALLOCATION_MODULE;
102
103 #define EFI_HOB_TYPE_RESOURCE_DESCRIPTOR 0x0003
104
105 typedef UINT32 EFI_RESOURCE_TYPE;
106
107 #define EFI_RESOURCE_SYSTEM_MEMORY 0
108 #define EFI_RESOURCE_MEMORY_MAPPED_IO 1
109 #define EFI_RESOURCE_IO 2
110 #define EFI_RESOURCE_FIRMWARE_DEVICE 3
111 #define EFI_RESOURCE_MEMORY_MAPPED_IO_PORT 4
112 #define EFI_RESOURCE_MEMORY_RESERVED 5
113 #define EFI_RESOURCE_IO_RESERVED 6
114 #define EFI_RESOURCE_MAX_MEMORY_TYPE 7
115
116 typedef UINT32 EFI_RESOURCE_ATTRIBUTE_TYPE;
117
118 #define EFI_RESOURCE_ATTRIBUTE_PRESENT 0x00000001
119 #define EFI_RESOURCE_ATTRIBUTE_INITIALIZED 0x00000002
120 #define EFI_RESOURCE_ATTRIBUTE_TESTED 0x00000004
121 #define EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC 0x00000008
122 #define EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC 0x00000010
123 #define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 0x00000020
124 #define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 0x00000040
125 #define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED 0x00000080
126 #define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED 0x00000100
127 #define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED 0x00000200
128 #define EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE 0x00000400
129 #define EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE 0x00000800
130 #define EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE 0x00001000
131 #define EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE 0x00002000
132 #define EFI_RESOURCE_ATTRIBUTE_16_BIT_IO 0x00004000
133 #define EFI_RESOURCE_ATTRIBUTE_32_BIT_IO 0x00008000
134 #define EFI_RESOURCE_ATTRIBUTE_64_BIT_IO 0x00010000
135 #define EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED 0x00020000
136 //
137 // The following values are defined in PI 1.2 errata B.
138 //
139 #define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTABLE 0x00100000
140 #define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE 0x00200000
141 #define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE 0x00400000
142
143 typedef struct {
144 EFI_HOB_GENERIC_HEADER Header;
145 EFI_GUID Owner;
146 EFI_RESOURCE_TYPE ResourceType;
147 EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute;
148 EFI_PHYSICAL_ADDRESS PhysicalStart;
149 UINT64 ResourceLength;
150 } EFI_HOB_RESOURCE_DESCRIPTOR;
151
152 //
153 // GUID Extension HOB
154 // The HobLength is variable as it includes the GUID specific data.
155 //
156 #define EFI_HOB_TYPE_GUID_EXTENSION 0x0004
157
158 typedef struct {
159 EFI_HOB_GENERIC_HEADER Header;
160 EFI_GUID Name;
161
162 //
163 // Guid specific data goes here
164 //
165 } EFI_HOB_GUID_TYPE;
166
167 //
168 // Firmware Volume HOB
169 //
170 #define EFI_HOB_TYPE_FV 0x0005
171
172 typedef struct {
173 EFI_HOB_GENERIC_HEADER Header;
174 EFI_PHYSICAL_ADDRESS BaseAddress;
175 UINT64 Length;
176 } EFI_HOB_FIRMWARE_VOLUME;
177
178 //
179 // CPU HOB
180 //
181 #define EFI_HOB_TYPE_CPU 0x0006
182
183 typedef struct {
184 EFI_HOB_GENERIC_HEADER Header;
185 UINT8 SizeOfMemorySpace;
186 UINT8 SizeOfIoSpace;
187 UINT8 Reserved[6];
188 } EFI_HOB_CPU;
189
190 //
191 // PEI Core Memory Pool HOB
192 // The HobLength is variable as the HOB contains pool allocations by
193 // the PeiServices AllocatePool function
194 //
195 #define EFI_HOB_TYPE_PEI_MEMORY_POOL 0x0007
196
197 typedef struct {
198 EFI_HOB_GENERIC_HEADER Header;
199 } EFI_HOB_MEMORY_POOL;
200
201 //
202 // Capsule volume HOB -- identical to a firmware volume
203 //
204 #define EFI_HOB_TYPE_CV 0x0008
205
206 typedef struct {
207 EFI_HOB_GENERIC_HEADER Header;
208 EFI_PHYSICAL_ADDRESS BaseAddress;
209 UINT64 Length;
210 } EFI_HOB_CAPSULE_VOLUME;
211
212 #if (PI_SPECIFICATION_VERSION >= 0x00010000)
213
214 #define EFI_HOB_TYPE_FV2 0x0009
215
216 typedef struct {
217 EFI_HOB_GENERIC_HEADER Header;
218 EFI_PHYSICAL_ADDRESS BaseAddress;
219 UINT64 Length;
220 EFI_GUID FvName;
221 EFI_GUID FileName;
222 } EFI_HOB_FIRMWARE_VOLUME2;
223
224 #define EFI_HOB_TYPE_LOAD_PEIM_UNUSED 0x000A
225
226 #endif
227
228 #define EFI_HOB_TYPE_UNUSED 0xFFFE
229
230 //
231 // Union of all the possible HOB Types
232 //
233 typedef union {
234 EFI_HOB_GENERIC_HEADER *Header;
235 EFI_HOB_HANDOFF_INFO_TABLE *HandoffInformationTable;
236 EFI_HOB_MEMORY_ALLOCATION *MemoryAllocation;
237 EFI_HOB_MEMORY_ALLOCATION_BSP_STORE *MemoryAllocationBspStore;
238 EFI_HOB_MEMORY_ALLOCATION_STACK *MemoryAllocationStack;
239 EFI_HOB_MEMORY_ALLOCATION_MODULE *MemoryAllocationModule;
240 EFI_HOB_RESOURCE_DESCRIPTOR *ResourceDescriptor;
241 EFI_HOB_GUID_TYPE *Guid;
242 EFI_HOB_FIRMWARE_VOLUME *FirmwareVolume;
243 #if (PI_SPECIFICATION_VERSION >= 0x00010000)
244 EFI_HOB_FIRMWARE_VOLUME2 *FirmwareVolume2;
245 #endif
246 EFI_HOB_CPU *Cpu;
247 EFI_HOB_MEMORY_POOL *Pool;
248 EFI_HOB_CAPSULE_VOLUME *CapsuleVolume;
249 UINT8 *Raw;
250 } EFI_PEI_HOB_POINTERS;
251
252 #define GET_HOB_TYPE(Hob) ((Hob).Header->HobType)
253 #define GET_HOB_LENGTH(Hob) ((Hob).Header->HobLength)
254 #define GET_NEXT_HOB(Hob) ((Hob).Raw + GET_HOB_LENGTH (Hob))
255 #define END_OF_HOB_LIST(Hob) (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_END_OF_HOB_LIST)
256
257 #endif