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