xref: /freebsd/sys/contrib/edk2/Include/Pi/PiHob.h (revision f439973d6726c3be929c8fb3b1545b8b1744abc3)
1*f439973dSWarner Losh /** @file
2*f439973dSWarner Losh   HOB related definitions in PI.
3*f439973dSWarner Losh 
4*f439973dSWarner Losh Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
5*f439973dSWarner Losh SPDX-License-Identifier: BSD-2-Clause-Patent
6*f439973dSWarner Losh 
7*f439973dSWarner Losh   @par Revision Reference:
8*f439973dSWarner Losh   PI Version 1.9
9*f439973dSWarner Losh 
10*f439973dSWarner Losh **/
11*f439973dSWarner Losh 
12*f439973dSWarner Losh #ifndef __PI_HOB_H__
13*f439973dSWarner Losh #define __PI_HOB_H__
14*f439973dSWarner Losh 
15*f439973dSWarner Losh //
16*f439973dSWarner Losh // HobType of EFI_HOB_GENERIC_HEADER.
17*f439973dSWarner Losh //
18*f439973dSWarner Losh #define EFI_HOB_TYPE_HANDOFF              0x0001
19*f439973dSWarner Losh #define EFI_HOB_TYPE_MEMORY_ALLOCATION    0x0002
20*f439973dSWarner Losh #define EFI_HOB_TYPE_RESOURCE_DESCRIPTOR  0x0003
21*f439973dSWarner Losh #define EFI_HOB_TYPE_GUID_EXTENSION       0x0004
22*f439973dSWarner Losh #define EFI_HOB_TYPE_FV                   0x0005
23*f439973dSWarner Losh #define EFI_HOB_TYPE_CPU                  0x0006
24*f439973dSWarner Losh #define EFI_HOB_TYPE_MEMORY_POOL          0x0007
25*f439973dSWarner Losh #define EFI_HOB_TYPE_FV2                  0x0009
26*f439973dSWarner Losh #define EFI_HOB_TYPE_LOAD_PEIM_UNUSED     0x000A
27*f439973dSWarner Losh #define EFI_HOB_TYPE_UEFI_CAPSULE         0x000B
28*f439973dSWarner Losh #define EFI_HOB_TYPE_FV3                  0x000C
29*f439973dSWarner Losh #define EFI_HOB_TYPE_UNUSED               0xFFFE
30*f439973dSWarner Losh #define EFI_HOB_TYPE_END_OF_HOB_LIST      0xFFFF
31*f439973dSWarner Losh 
32*f439973dSWarner Losh ///
33*f439973dSWarner Losh /// Describes the format and size of the data inside the HOB.
34*f439973dSWarner Losh /// All HOBs must contain this generic HOB header.
35*f439973dSWarner Losh ///
36*f439973dSWarner Losh typedef struct {
37*f439973dSWarner Losh   ///
38*f439973dSWarner Losh   /// Identifies the HOB data structure type.
39*f439973dSWarner Losh   ///
40*f439973dSWarner Losh   UINT16    HobType;
41*f439973dSWarner Losh   ///
42*f439973dSWarner Losh   /// The length in bytes of the HOB.
43*f439973dSWarner Losh   ///
44*f439973dSWarner Losh   UINT16    HobLength;
45*f439973dSWarner Losh   ///
46*f439973dSWarner Losh   /// This field must always be set to zero.
47*f439973dSWarner Losh   ///
48*f439973dSWarner Losh   UINT32    Reserved;
49*f439973dSWarner Losh } EFI_HOB_GENERIC_HEADER;
50*f439973dSWarner Losh 
51*f439973dSWarner Losh ///
52*f439973dSWarner Losh /// Value of version  in EFI_HOB_HANDOFF_INFO_TABLE.
53*f439973dSWarner Losh ///
54*f439973dSWarner Losh #define EFI_HOB_HANDOFF_TABLE_VERSION  0x0009
55*f439973dSWarner Losh 
56*f439973dSWarner Losh ///
57*f439973dSWarner Losh /// Contains general state information used by the HOB producer phase.
58*f439973dSWarner Losh /// This HOB must be the first one in the HOB list.
59*f439973dSWarner Losh ///
60*f439973dSWarner Losh typedef struct {
61*f439973dSWarner Losh   ///
62*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_HANDOFF.
63*f439973dSWarner Losh   ///
64*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER    Header;
65*f439973dSWarner Losh   ///
66*f439973dSWarner Losh   /// The version number pertaining to the PHIT HOB definition.
67*f439973dSWarner Losh   /// This value is four bytes in length to provide an 8-byte aligned entry
68*f439973dSWarner Losh   /// when it is combined with the 4-byte BootMode.
69*f439973dSWarner Losh   ///
70*f439973dSWarner Losh   UINT32                    Version;
71*f439973dSWarner Losh   ///
72*f439973dSWarner Losh   /// The system boot mode as determined during the HOB producer phase.
73*f439973dSWarner Losh   ///
74*f439973dSWarner Losh   EFI_BOOT_MODE             BootMode;
75*f439973dSWarner Losh   ///
76*f439973dSWarner Losh   /// The highest address location of memory that is allocated for use by the HOB producer
77*f439973dSWarner Losh   /// phase. This address must be 4-KB aligned to meet page restrictions of UEFI.
78*f439973dSWarner Losh   ///
79*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      EfiMemoryTop;
80*f439973dSWarner Losh   ///
81*f439973dSWarner Losh   /// The lowest address location of memory that is allocated for use by the HOB producer phase.
82*f439973dSWarner Losh   ///
83*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      EfiMemoryBottom;
84*f439973dSWarner Losh   ///
85*f439973dSWarner Losh   /// The highest address location of free memory that is currently available
86*f439973dSWarner Losh   /// for use by the HOB producer phase.
87*f439973dSWarner Losh   ///
88*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      EfiFreeMemoryTop;
89*f439973dSWarner Losh   ///
90*f439973dSWarner Losh   /// The lowest address location of free memory that is available for use by the HOB producer phase.
91*f439973dSWarner Losh   ///
92*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      EfiFreeMemoryBottom;
93*f439973dSWarner Losh   ///
94*f439973dSWarner Losh   /// The end of the HOB list.
95*f439973dSWarner Losh   ///
96*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      EfiEndOfHobList;
97*f439973dSWarner Losh } EFI_HOB_HANDOFF_INFO_TABLE;
98*f439973dSWarner Losh 
99*f439973dSWarner Losh ///
100*f439973dSWarner Losh /// EFI_HOB_MEMORY_ALLOCATION_HEADER describes the
101*f439973dSWarner Losh /// various attributes of the logical memory allocation. The type field will be used for
102*f439973dSWarner Losh /// subsequent inclusion in the UEFI memory map.
103*f439973dSWarner Losh ///
104*f439973dSWarner Losh typedef struct {
105*f439973dSWarner Losh   ///
106*f439973dSWarner Losh   /// A GUID that defines the memory allocation region's type and purpose, as well as
107*f439973dSWarner Losh   /// other fields within the memory allocation HOB. This GUID is used to define the
108*f439973dSWarner Losh   /// additional data within the HOB that may be present for the memory allocation HOB.
109*f439973dSWarner Losh   /// Type EFI_GUID is defined in InstallProtocolInterface() in the UEFI 2.0
110*f439973dSWarner Losh   /// specification.
111*f439973dSWarner Losh   ///
112*f439973dSWarner Losh   EFI_GUID                Name;
113*f439973dSWarner Losh 
114*f439973dSWarner Losh   ///
115*f439973dSWarner Losh   /// The base address of memory allocated by this HOB. Type
116*f439973dSWarner Losh   /// EFI_PHYSICAL_ADDRESS is defined in AllocatePages() in the UEFI 2.0
117*f439973dSWarner Losh   /// specification.
118*f439973dSWarner Losh   ///
119*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS    MemoryBaseAddress;
120*f439973dSWarner Losh 
121*f439973dSWarner Losh   ///
122*f439973dSWarner Losh   /// The length in bytes of memory allocated by this HOB.
123*f439973dSWarner Losh   ///
124*f439973dSWarner Losh   UINT64                  MemoryLength;
125*f439973dSWarner Losh 
126*f439973dSWarner Losh   ///
127*f439973dSWarner Losh   /// Defines the type of memory allocated by this HOB. The memory type definition
128*f439973dSWarner Losh   /// follows the EFI_MEMORY_TYPE definition. Type EFI_MEMORY_TYPE is defined
129*f439973dSWarner Losh   /// in AllocatePages() in the UEFI 2.0 specification.
130*f439973dSWarner Losh   ///
131*f439973dSWarner Losh   EFI_MEMORY_TYPE         MemoryType;
132*f439973dSWarner Losh 
133*f439973dSWarner Losh   ///
134*f439973dSWarner Losh   /// Padding for Itanium processor family
135*f439973dSWarner Losh   ///
136*f439973dSWarner Losh   UINT8                   Reserved[4];
137*f439973dSWarner Losh } EFI_HOB_MEMORY_ALLOCATION_HEADER;
138*f439973dSWarner Losh 
139*f439973dSWarner Losh ///
140*f439973dSWarner Losh /// Describes all memory ranges used during the HOB producer
141*f439973dSWarner Losh /// phase that exist outside the HOB list. This HOB type
142*f439973dSWarner Losh /// describes how memory is used, not the physical attributes of memory.
143*f439973dSWarner Losh ///
144*f439973dSWarner Losh typedef struct {
145*f439973dSWarner Losh   ///
146*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_MEMORY_ALLOCATION.
147*f439973dSWarner Losh   ///
148*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER              Header;
149*f439973dSWarner Losh   ///
150*f439973dSWarner Losh   /// An instance of the EFI_HOB_MEMORY_ALLOCATION_HEADER that describes the
151*f439973dSWarner Losh   /// various attributes of the logical memory allocation.
152*f439973dSWarner Losh   ///
153*f439973dSWarner Losh   EFI_HOB_MEMORY_ALLOCATION_HEADER    AllocDescriptor;
154*f439973dSWarner Losh   //
155*f439973dSWarner Losh   // Additional data pertaining to the "Name" Guid memory
156*f439973dSWarner Losh   // may go here.
157*f439973dSWarner Losh   //
158*f439973dSWarner Losh } EFI_HOB_MEMORY_ALLOCATION;
159*f439973dSWarner Losh 
160*f439973dSWarner Losh ///
161*f439973dSWarner Losh /// Describes the memory stack that is produced by the HOB producer
162*f439973dSWarner Losh /// phase and upon which all post-memory-installed executable
163*f439973dSWarner Losh /// content in the HOB producer phase is executing.
164*f439973dSWarner Losh ///
165*f439973dSWarner Losh typedef struct {
166*f439973dSWarner Losh   ///
167*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_MEMORY_ALLOCATION.
168*f439973dSWarner Losh   ///
169*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER              Header;
170*f439973dSWarner Losh   ///
171*f439973dSWarner Losh   /// An instance of the EFI_HOB_MEMORY_ALLOCATION_HEADER that describes the
172*f439973dSWarner Losh   /// various attributes of the logical memory allocation.
173*f439973dSWarner Losh   ///
174*f439973dSWarner Losh   EFI_HOB_MEMORY_ALLOCATION_HEADER    AllocDescriptor;
175*f439973dSWarner Losh } EFI_HOB_MEMORY_ALLOCATION_STACK;
176*f439973dSWarner Losh 
177*f439973dSWarner Losh ///
178*f439973dSWarner Losh /// Defines the location of the boot-strap
179*f439973dSWarner Losh /// processor (BSP) BSPStore ("Backing Store Pointer Store").
180*f439973dSWarner Losh /// This HOB is valid for the Itanium processor family only
181*f439973dSWarner Losh /// register overflow store.
182*f439973dSWarner Losh ///
183*f439973dSWarner Losh typedef struct {
184*f439973dSWarner Losh   ///
185*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_MEMORY_ALLOCATION.
186*f439973dSWarner Losh   ///
187*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER              Header;
188*f439973dSWarner Losh   ///
189*f439973dSWarner Losh   /// An instance of the EFI_HOB_MEMORY_ALLOCATION_HEADER that describes the
190*f439973dSWarner Losh   /// various attributes of the logical memory allocation.
191*f439973dSWarner Losh   ///
192*f439973dSWarner Losh   EFI_HOB_MEMORY_ALLOCATION_HEADER    AllocDescriptor;
193*f439973dSWarner Losh } EFI_HOB_MEMORY_ALLOCATION_BSP_STORE;
194*f439973dSWarner Losh 
195*f439973dSWarner Losh ///
196*f439973dSWarner Losh /// Defines the location and entry point of the HOB consumer phase.
197*f439973dSWarner Losh ///
198*f439973dSWarner Losh typedef struct {
199*f439973dSWarner Losh   ///
200*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_MEMORY_ALLOCATION.
201*f439973dSWarner Losh   ///
202*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER              Header;
203*f439973dSWarner Losh   ///
204*f439973dSWarner Losh   /// An instance of the EFI_HOB_MEMORY_ALLOCATION_HEADER that describes the
205*f439973dSWarner Losh   /// various attributes of the logical memory allocation.
206*f439973dSWarner Losh   ///
207*f439973dSWarner Losh   EFI_HOB_MEMORY_ALLOCATION_HEADER    MemoryAllocationHeader;
208*f439973dSWarner Losh   ///
209*f439973dSWarner Losh   /// The GUID specifying the values of the firmware file system name
210*f439973dSWarner Losh   /// that contains the HOB consumer phase component.
211*f439973dSWarner Losh   ///
212*f439973dSWarner Losh   EFI_GUID                            ModuleName;
213*f439973dSWarner Losh   ///
214*f439973dSWarner Losh   /// The address of the memory-mapped firmware volume
215*f439973dSWarner Losh   /// that contains the HOB consumer phase firmware file.
216*f439973dSWarner Losh   ///
217*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS                EntryPoint;
218*f439973dSWarner Losh } EFI_HOB_MEMORY_ALLOCATION_MODULE;
219*f439973dSWarner Losh 
220*f439973dSWarner Losh ///
221*f439973dSWarner Losh /// The resource type.
222*f439973dSWarner Losh ///
223*f439973dSWarner Losh typedef UINT32 EFI_RESOURCE_TYPE;
224*f439973dSWarner Losh 
225*f439973dSWarner Losh //
226*f439973dSWarner Losh // Value of ResourceType in EFI_HOB_RESOURCE_DESCRIPTOR.
227*f439973dSWarner Losh //
228*f439973dSWarner Losh #define EFI_RESOURCE_SYSTEM_MEMORY          0x00000000
229*f439973dSWarner Losh #define EFI_RESOURCE_MEMORY_MAPPED_IO       0x00000001
230*f439973dSWarner Losh #define EFI_RESOURCE_IO                     0x00000002
231*f439973dSWarner Losh #define EFI_RESOURCE_FIRMWARE_DEVICE        0x00000003
232*f439973dSWarner Losh #define EFI_RESOURCE_MEMORY_MAPPED_IO_PORT  0x00000004
233*f439973dSWarner Losh #define EFI_RESOURCE_MEMORY_RESERVED        0x00000005
234*f439973dSWarner Losh #define EFI_RESOURCE_IO_RESERVED            0x00000006
235*f439973dSWarner Losh #define EFI_RESOURCE_MEMORY_UNACCEPTED      0x00000007
236*f439973dSWarner Losh #define EFI_RESOURCE_MAX_MEMORY_TYPE        0x00000008
237*f439973dSWarner Losh 
238*f439973dSWarner Losh ///
239*f439973dSWarner Losh /// A type of recount attribute type.
240*f439973dSWarner Losh ///
241*f439973dSWarner Losh typedef UINT32 EFI_RESOURCE_ATTRIBUTE_TYPE;
242*f439973dSWarner Losh 
243*f439973dSWarner Losh //
244*f439973dSWarner Losh // These types can be ORed together as needed.
245*f439973dSWarner Losh //
246*f439973dSWarner Losh // The following attributes are used to describe settings
247*f439973dSWarner Losh //
248*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_PRESENT         0x00000001
249*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_INITIALIZED     0x00000002
250*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_TESTED          0x00000004
251*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED  0x00000080
252*f439973dSWarner Losh //
253*f439973dSWarner Losh // This is typically used as memory cacheability attribute today.
254*f439973dSWarner Losh // NOTE: Since PI spec 1.4, please use EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTED
255*f439973dSWarner Losh // as Physical write protected attribute, and EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED
256*f439973dSWarner Losh // means Memory cacheability attribute: The memory supports being programmed with
257*f439973dSWarner Losh // a writeprotected cacheable attribute.
258*f439973dSWarner Losh //
259*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED      0x00000100
260*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED  0x00000200
261*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_PERSISTENT           0x00800000
262*f439973dSWarner Losh //
263*f439973dSWarner Losh // The rest of the attributes are used to describe capabilities
264*f439973dSWarner Losh //
265*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC           0x00000008
266*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC         0x00000010
267*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1           0x00000020
268*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2           0x00000040
269*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE              0x00000400
270*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE        0x00000800
271*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE  0x00001000
272*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE     0x00002000
273*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_16_BIT_IO                0x00004000
274*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_32_BIT_IO                0x00008000
275*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_64_BIT_IO                0x00010000
276*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED        0x00020000
277*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTABLE         0x00100000
278*f439973dSWarner Losh //
279*f439973dSWarner Losh // This is typically used as memory cacheability attribute today.
280*f439973dSWarner Losh // NOTE: Since PI spec 1.4, please use EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTABLE
281*f439973dSWarner Losh // as Memory capability attribute: The memory supports being protected from processor
282*f439973dSWarner Losh // writes, and EFI_RESOURCE_ATTRIBUTE_WRITE_PROTEC TABLE means Memory cacheability attribute:
283*f439973dSWarner Losh // The memory supports being programmed with a writeprotected cacheable attribute.
284*f439973dSWarner Losh //
285*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE      0x00200000
286*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE  0x00400000
287*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_PERSISTABLE            0x01000000
288*f439973dSWarner Losh 
289*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTED    0x00040000
290*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTABLE  0x00080000
291*f439973dSWarner Losh 
292*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_ENCRYPTED        0x04000000
293*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_SPECIAL_PURPOSE  0x08000000
294*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_HOT_PLUGGABLE    0x10000000
295*f439973dSWarner Losh //
296*f439973dSWarner Losh // Physical memory relative reliability attribute. This
297*f439973dSWarner Losh // memory provides higher reliability relative to other
298*f439973dSWarner Losh // memory in the system. If all memory has the same
299*f439973dSWarner Losh // reliability, then this bit is not used.
300*f439973dSWarner Losh //
301*f439973dSWarner Losh #define EFI_RESOURCE_ATTRIBUTE_MORE_RELIABLE  0x02000000
302*f439973dSWarner Losh 
303*f439973dSWarner Losh ///
304*f439973dSWarner Losh /// Describes the resource properties of all fixed,
305*f439973dSWarner Losh /// nonrelocatable resource ranges found on the processor
306*f439973dSWarner Losh /// host bus during the HOB producer phase.
307*f439973dSWarner Losh ///
308*f439973dSWarner Losh typedef struct {
309*f439973dSWarner Losh   ///
310*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_RESOURCE_DESCRIPTOR.
311*f439973dSWarner Losh   ///
312*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER         Header;
313*f439973dSWarner Losh   ///
314*f439973dSWarner Losh   /// A GUID representing the owner of the resource. This GUID is used by HOB
315*f439973dSWarner Losh   /// consumer phase components to correlate device ownership of a resource.
316*f439973dSWarner Losh   ///
317*f439973dSWarner Losh   EFI_GUID                       Owner;
318*f439973dSWarner Losh   ///
319*f439973dSWarner Losh   /// The resource type enumeration as defined by EFI_RESOURCE_TYPE.
320*f439973dSWarner Losh   ///
321*f439973dSWarner Losh   EFI_RESOURCE_TYPE              ResourceType;
322*f439973dSWarner Losh   ///
323*f439973dSWarner Losh   /// Resource attributes as defined by EFI_RESOURCE_ATTRIBUTE_TYPE.
324*f439973dSWarner Losh   ///
325*f439973dSWarner Losh   EFI_RESOURCE_ATTRIBUTE_TYPE    ResourceAttribute;
326*f439973dSWarner Losh   ///
327*f439973dSWarner Losh   /// The physical start address of the resource region.
328*f439973dSWarner Losh   ///
329*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS           PhysicalStart;
330*f439973dSWarner Losh   ///
331*f439973dSWarner Losh   /// The number of bytes of the resource region.
332*f439973dSWarner Losh   ///
333*f439973dSWarner Losh   UINT64                         ResourceLength;
334*f439973dSWarner Losh } EFI_HOB_RESOURCE_DESCRIPTOR;
335*f439973dSWarner Losh 
336*f439973dSWarner Losh ///
337*f439973dSWarner Losh /// Allows writers of executable content in the HOB producer phase to
338*f439973dSWarner Losh /// maintain and manage HOBs with specific GUID.
339*f439973dSWarner Losh ///
340*f439973dSWarner Losh typedef struct {
341*f439973dSWarner Losh   ///
342*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_GUID_EXTENSION.
343*f439973dSWarner Losh   ///
344*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER    Header;
345*f439973dSWarner Losh   ///
346*f439973dSWarner Losh   /// A GUID that defines the contents of this HOB.
347*f439973dSWarner Losh   ///
348*f439973dSWarner Losh   EFI_GUID                  Name;
349*f439973dSWarner Losh   //
350*f439973dSWarner Losh   // Guid specific data goes here
351*f439973dSWarner Losh   //
352*f439973dSWarner Losh } EFI_HOB_GUID_TYPE;
353*f439973dSWarner Losh 
354*f439973dSWarner Losh ///
355*f439973dSWarner Losh /// Details the location of firmware volumes that contain firmware files.
356*f439973dSWarner Losh ///
357*f439973dSWarner Losh typedef struct {
358*f439973dSWarner Losh   ///
359*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_FV.
360*f439973dSWarner Losh   ///
361*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER    Header;
362*f439973dSWarner Losh   ///
363*f439973dSWarner Losh   /// The physical memory-mapped base address of the firmware volume.
364*f439973dSWarner Losh   ///
365*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      BaseAddress;
366*f439973dSWarner Losh   ///
367*f439973dSWarner Losh   /// The length in bytes of the firmware volume.
368*f439973dSWarner Losh   ///
369*f439973dSWarner Losh   UINT64                    Length;
370*f439973dSWarner Losh } EFI_HOB_FIRMWARE_VOLUME;
371*f439973dSWarner Losh 
372*f439973dSWarner Losh ///
373*f439973dSWarner Losh /// Details the location of a firmware volume that was extracted
374*f439973dSWarner Losh /// from a file within another firmware volume.
375*f439973dSWarner Losh ///
376*f439973dSWarner Losh typedef struct {
377*f439973dSWarner Losh   ///
378*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_FV2.
379*f439973dSWarner Losh   ///
380*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER    Header;
381*f439973dSWarner Losh   ///
382*f439973dSWarner Losh   /// The physical memory-mapped base address of the firmware volume.
383*f439973dSWarner Losh   ///
384*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      BaseAddress;
385*f439973dSWarner Losh   ///
386*f439973dSWarner Losh   /// The length in bytes of the firmware volume.
387*f439973dSWarner Losh   ///
388*f439973dSWarner Losh   UINT64                    Length;
389*f439973dSWarner Losh   ///
390*f439973dSWarner Losh   /// The name of the firmware volume.
391*f439973dSWarner Losh   ///
392*f439973dSWarner Losh   EFI_GUID                  FvName;
393*f439973dSWarner Losh   ///
394*f439973dSWarner Losh   /// The name of the firmware file that contained this firmware volume.
395*f439973dSWarner Losh   ///
396*f439973dSWarner Losh   EFI_GUID                  FileName;
397*f439973dSWarner Losh } EFI_HOB_FIRMWARE_VOLUME2;
398*f439973dSWarner Losh 
399*f439973dSWarner Losh ///
400*f439973dSWarner Losh /// Details the location of a firmware volume that was extracted
401*f439973dSWarner Losh /// from a file within another firmware volume.
402*f439973dSWarner Losh ///
403*f439973dSWarner Losh typedef struct {
404*f439973dSWarner Losh   ///
405*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_FV3.
406*f439973dSWarner Losh   ///
407*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER    Header;
408*f439973dSWarner Losh   ///
409*f439973dSWarner Losh   /// The physical memory-mapped base address of the firmware volume.
410*f439973dSWarner Losh   ///
411*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      BaseAddress;
412*f439973dSWarner Losh   ///
413*f439973dSWarner Losh   /// The length in bytes of the firmware volume.
414*f439973dSWarner Losh   ///
415*f439973dSWarner Losh   UINT64                    Length;
416*f439973dSWarner Losh   ///
417*f439973dSWarner Losh   /// The authentication status.
418*f439973dSWarner Losh   ///
419*f439973dSWarner Losh   UINT32                    AuthenticationStatus;
420*f439973dSWarner Losh   ///
421*f439973dSWarner Losh   /// TRUE if the FV was extracted as a file within another firmware volume.
422*f439973dSWarner Losh   /// FALSE otherwise.
423*f439973dSWarner Losh   ///
424*f439973dSWarner Losh   BOOLEAN                   ExtractedFv;
425*f439973dSWarner Losh   ///
426*f439973dSWarner Losh   /// The name of the firmware volume.
427*f439973dSWarner Losh   /// Valid only if IsExtractedFv is TRUE.
428*f439973dSWarner Losh   ///
429*f439973dSWarner Losh   EFI_GUID                  FvName;
430*f439973dSWarner Losh   ///
431*f439973dSWarner Losh   /// The name of the firmware file that contained this firmware volume.
432*f439973dSWarner Losh   /// Valid only if IsExtractedFv is TRUE.
433*f439973dSWarner Losh   ///
434*f439973dSWarner Losh   EFI_GUID                  FileName;
435*f439973dSWarner Losh } EFI_HOB_FIRMWARE_VOLUME3;
436*f439973dSWarner Losh 
437*f439973dSWarner Losh ///
438*f439973dSWarner Losh /// Describes processor information, such as address space and I/O space capabilities.
439*f439973dSWarner Losh ///
440*f439973dSWarner Losh typedef struct {
441*f439973dSWarner Losh   ///
442*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_CPU.
443*f439973dSWarner Losh   ///
444*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER    Header;
445*f439973dSWarner Losh   ///
446*f439973dSWarner Losh   /// Identifies the maximum physical memory addressability of the processor.
447*f439973dSWarner Losh   ///
448*f439973dSWarner Losh   UINT8                     SizeOfMemorySpace;
449*f439973dSWarner Losh   ///
450*f439973dSWarner Losh   /// Identifies the maximum physical I/O addressability of the processor.
451*f439973dSWarner Losh   ///
452*f439973dSWarner Losh   UINT8                     SizeOfIoSpace;
453*f439973dSWarner Losh   ///
454*f439973dSWarner Losh   /// This field will always be set to zero.
455*f439973dSWarner Losh   ///
456*f439973dSWarner Losh   UINT8                     Reserved[6];
457*f439973dSWarner Losh } EFI_HOB_CPU;
458*f439973dSWarner Losh 
459*f439973dSWarner Losh ///
460*f439973dSWarner Losh /// Describes pool memory allocations.
461*f439973dSWarner Losh ///
462*f439973dSWarner Losh typedef struct {
463*f439973dSWarner Losh   ///
464*f439973dSWarner Losh   /// The HOB generic header. Header.HobType = EFI_HOB_TYPE_MEMORY_POOL.
465*f439973dSWarner Losh   ///
466*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER    Header;
467*f439973dSWarner Losh } EFI_HOB_MEMORY_POOL;
468*f439973dSWarner Losh 
469*f439973dSWarner Losh ///
470*f439973dSWarner Losh /// Each UEFI capsule HOB details the location of a UEFI capsule. It includes a base address and length
471*f439973dSWarner Losh /// which is based upon memory blocks with a EFI_CAPSULE_HEADER and the associated
472*f439973dSWarner Losh /// CapsuleImageSize-based payloads. These HOB's shall be created by the PEI PI firmware
473*f439973dSWarner Losh /// sometime after the UEFI UpdateCapsule service invocation with the
474*f439973dSWarner Losh /// CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE flag set in the EFI_CAPSULE_HEADER.
475*f439973dSWarner Losh ///
476*f439973dSWarner Losh typedef struct {
477*f439973dSWarner Losh   ///
478*f439973dSWarner Losh   /// The HOB generic header where Header.HobType = EFI_HOB_TYPE_UEFI_CAPSULE.
479*f439973dSWarner Losh   ///
480*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER    Header;
481*f439973dSWarner Losh 
482*f439973dSWarner Losh   ///
483*f439973dSWarner Losh   /// The physical memory-mapped base address of an UEFI capsule. This value is set to
484*f439973dSWarner Losh   /// point to the base of the contiguous memory of the UEFI capsule.
485*f439973dSWarner Losh   /// The length of the contiguous memory in bytes.
486*f439973dSWarner Losh   ///
487*f439973dSWarner Losh   EFI_PHYSICAL_ADDRESS      BaseAddress;
488*f439973dSWarner Losh   UINT64                    Length;
489*f439973dSWarner Losh } EFI_HOB_UEFI_CAPSULE;
490*f439973dSWarner Losh 
491*f439973dSWarner Losh ///
492*f439973dSWarner Losh /// Union of all the possible HOB Types.
493*f439973dSWarner Losh ///
494*f439973dSWarner Losh typedef union {
495*f439973dSWarner Losh   EFI_HOB_GENERIC_HEADER                 *Header;
496*f439973dSWarner Losh   EFI_HOB_HANDOFF_INFO_TABLE             *HandoffInformationTable;
497*f439973dSWarner Losh   EFI_HOB_MEMORY_ALLOCATION              *MemoryAllocation;
498*f439973dSWarner Losh   EFI_HOB_MEMORY_ALLOCATION_BSP_STORE    *MemoryAllocationBspStore;
499*f439973dSWarner Losh   EFI_HOB_MEMORY_ALLOCATION_STACK        *MemoryAllocationStack;
500*f439973dSWarner Losh   EFI_HOB_MEMORY_ALLOCATION_MODULE       *MemoryAllocationModule;
501*f439973dSWarner Losh   EFI_HOB_RESOURCE_DESCRIPTOR            *ResourceDescriptor;
502*f439973dSWarner Losh   EFI_HOB_GUID_TYPE                      *Guid;
503*f439973dSWarner Losh   EFI_HOB_FIRMWARE_VOLUME                *FirmwareVolume;
504*f439973dSWarner Losh   EFI_HOB_FIRMWARE_VOLUME2               *FirmwareVolume2;
505*f439973dSWarner Losh   EFI_HOB_FIRMWARE_VOLUME3               *FirmwareVolume3;
506*f439973dSWarner Losh   EFI_HOB_CPU                            *Cpu;
507*f439973dSWarner Losh   EFI_HOB_MEMORY_POOL                    *Pool;
508*f439973dSWarner Losh   EFI_HOB_UEFI_CAPSULE                   *Capsule;
509*f439973dSWarner Losh   UINT8                                  *Raw;
510*f439973dSWarner Losh } EFI_PEI_HOB_POINTERS;
511*f439973dSWarner Losh 
512*f439973dSWarner Losh #endif
513