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