00001 /** @file 00002 HOB related definitions in PI. 00003 00004 Copyright (c) 2006 - 2008, Intel Corporation 00005 All rights reserved. This program and the accompanying materials 00006 are licensed and made available under the terms and conditions of the BSD License 00007 which accompanies this distribution. The full text of the license may be found at 00008 http://opensource.org/licenses/bsd-license.php 00009 00010 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 00011 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 00012 00013 @par Revision Reference: 00014 PI Version 1.0 00015 00016 **/ 00017 00018 #ifndef __PI_HOB_H__ 00019 #define __PI_HOB_H__ 00020 00021 #include <gpxe/efi/ProcessorBind.h> 00022 #include <gpxe/efi/Pi/PiBootMode.h> 00023 #include <gpxe/efi/Uefi/UefiBaseType.h> 00024 #include <gpxe/efi/Uefi/UefiMultiPhase.h> 00025 00026 // 00027 // HobType of EFI_HOB_GENERIC_HEADER. 00028 // 00029 #define EFI_HOB_TYPE_HANDOFF 0x0001 00030 #define EFI_HOB_TYPE_MEMORY_ALLOCATION 0x0002 00031 #define EFI_HOB_TYPE_RESOURCE_DESCRIPTOR 0x0003 00032 #define EFI_HOB_TYPE_GUID_EXTENSION 0x0004 00033 #define EFI_HOB_TYPE_FV 0x0005 00034 #define EFI_HOB_TYPE_CPU 0x0006 00035 #define EFI_HOB_TYPE_MEMORY_POOL 0x0007 00036 #define EFI_HOB_TYPE_FV2 0x0009 00037 #define EFI_HOB_TYPE_LOAD_PEIM 0x000A 00038 #define EFI_HOB_TYPE_UNUSED 0xFFFE 00039 #define EFI_HOB_TYPE_END_OF_HOB_LIST 0xFFFF 00040 00041 /// 00042 /// Describes the format and size of the data inside the HOB. 00043 /// All HOBs must contain this generic HOB header. 00044 /// 00045 typedef struct { 00046 UINT16 HobType; 00047 UINT16 HobLength; 00048 UINT32 Reserved; 00049 } EFI_HOB_GENERIC_HEADER; 00050 00051 00052 /// 00053 /// Value of version ofinEFI_HOB_HANDOFF_INFO_TABLE. 00054 /// 00055 #define EFI_HOB_HANDOFF_TABLE_VERSION 0x0009 00056 00057 /// 00058 /// Contains general state information used by the HOB producer phase. 00059 /// This HOB must be the first one in the HOB list. 00060 /// 00061 typedef struct { 00062 EFI_HOB_GENERIC_HEADER Header; 00063 UINT32 Version; 00064 EFI_BOOT_MODE BootMode; 00065 EFI_PHYSICAL_ADDRESS EfiMemoryTop; 00066 EFI_PHYSICAL_ADDRESS EfiMemoryBottom; 00067 EFI_PHYSICAL_ADDRESS EfiFreeMemoryTop; 00068 EFI_PHYSICAL_ADDRESS EfiFreeMemoryBottom; 00069 EFI_PHYSICAL_ADDRESS EfiEndOfHobList; 00070 } EFI_HOB_HANDOFF_INFO_TABLE; 00071 00072 /// 00073 /// EFI_HOB_MEMORY_ALLOCATION_HEADER describes the 00074 /// various attributes of the logical memory allocation. The type field will be used for 00075 /// subsequent inclusion in the UEFI memory map. 00076 /// 00077 typedef struct { 00078 /// 00079 /// A GUID that defines the memory allocation region's type and purpose, as well as 00080 /// other fields within the memory allocation HOB. This GUID is used to define the 00081 /// additional data within the HOB that may be present for the memory allocation HOB. 00082 /// Type EFI_GUID is defined in InstallProtocolInterface() in the UEFI 2.0 00083 /// specification. 00084 /// 00085 EFI_GUID Name; 00086 00087 /// 00088 /// The base address of memory allocated by this HOB. Type 00089 /// EFI_PHYSICAL_ADDRESS is defined in AllocatePages() in the UEFI 2.0 00090 /// specification. 00091 /// 00092 EFI_PHYSICAL_ADDRESS MemoryBaseAddress; 00093 00094 /// 00095 /// The length in bytes of memory allocated by this HOB. 00096 /// 00097 UINT64 MemoryLength; 00098 00099 /// 00100 /// Defines the type of memory allocated by this HOB. The memory type definition 00101 /// follows the EFI_MEMORY_TYPE definition. Type EFI_MEMORY_TYPE is defined 00102 /// in AllocatePages() in the UEFI 2.0 specification. 00103 /// 00104 EFI_MEMORY_TYPE MemoryType; 00105 00106 /// 00107 /// Padding for Itanium processor family 00108 /// 00109 UINT8 Reserved[4]; 00110 } EFI_HOB_MEMORY_ALLOCATION_HEADER; 00111 00112 /// 00113 /// Describes all memory ranges used during the HOB producer 00114 /// phase that exist outside the HOB list. This HOB type 00115 /// describes how memory is used, 00116 /// not the physical attributes of memory. 00117 /// 00118 typedef struct { 00119 EFI_HOB_GENERIC_HEADER Header; 00120 EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor; 00121 // 00122 // Additional data pertaining to the "Name" Guid memory 00123 // may go here. 00124 // 00125 } EFI_HOB_MEMORY_ALLOCATION; 00126 00127 00128 /// 00129 /// Describes the memory stack that is produced by the HOB producer 00130 /// phase and upon which all postmemory-installed executable 00131 /// content in the HOB producer phase is executing. 00132 /// 00133 typedef struct { 00134 EFI_HOB_GENERIC_HEADER Header; 00135 EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor; 00136 } EFI_HOB_MEMORY_ALLOCATION_STACK; 00137 00138 /// 00139 /// Defines the location of the boot-strap 00140 /// processor (BSP) BSPStore ("Backing Store Pointer Store"). 00141 /// This HOB is valid for the Itanium processor family only 00142 /// register overflow store. 00143 /// 00144 typedef struct { 00145 EFI_HOB_GENERIC_HEADER Header; 00146 EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor; 00147 } EFI_HOB_MEMORY_ALLOCATION_BSP_STORE; 00148 00149 /// 00150 /// Defines the location and entry point of the HOB consumer phase. 00151 /// 00152 typedef struct { 00153 EFI_HOB_GENERIC_HEADER Header; 00154 EFI_HOB_MEMORY_ALLOCATION_HEADER MemoryAllocationHeader; 00155 EFI_GUID ModuleName; 00156 EFI_PHYSICAL_ADDRESS EntryPoint; 00157 } EFI_HOB_MEMORY_ALLOCATION_MODULE; 00158 00159 /// 00160 /// Resource type 00161 /// 00162 typedef UINT32 EFI_RESOURCE_TYPE; 00163 00164 // 00165 // Value of ResourceType in EFI_HOB_RESOURCE_DESCRIPTOR. 00166 // 00167 #define EFI_RESOURCE_SYSTEM_MEMORY 0x00000000 00168 #define EFI_RESOURCE_MEMORY_MAPPED_IO 0x00000001 00169 #define EFI_RESOURCE_IO 0x00000002 00170 #define EFI_RESOURCE_FIRMWARE_DEVICE 0x00000003 00171 #define EFI_RESOURCE_MEMORY_MAPPED_IO_PORT 0x00000004 00172 #define EFI_RESOURCE_MEMORY_RESERVED 0x00000005 00173 #define EFI_RESOURCE_IO_RESERVED 0x00000006 00174 #define EFI_RESOURCE_MAX_MEMORY_TYPE 0x00000007 00175 00176 /// 00177 /// type of recount attribute type 00178 /// 00179 typedef UINT32 EFI_RESOURCE_ATTRIBUTE_TYPE; 00180 00181 // 00182 // These types can be ORed together as needed. 00183 // 00184 // The first three enumerations describe settings 00185 // 00186 #define EFI_RESOURCE_ATTRIBUTE_PRESENT 0x00000001 00187 #define EFI_RESOURCE_ATTRIBUTE_INITIALIZED 0x00000002 00188 #define EFI_RESOURCE_ATTRIBUTE_TESTED 0x00000004 00189 // 00190 // The rest of the settings describe capabilities 00191 // 00192 #define EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC 0x00000008 00193 #define EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC 0x00000010 00194 #define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 0x00000020 00195 #define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 0x00000040 00196 #define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED 0x00000080 00197 #define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED 0x00000100 00198 #define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED 0x00000200 00199 #define EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE 0x00000400 00200 #define EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE 0x00000800 00201 #define EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE 0x00001000 00202 #define EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE 0x00002000 00203 #define EFI_RESOURCE_ATTRIBUTE_16_BIT_IO 0x00004000 00204 #define EFI_RESOURCE_ATTRIBUTE_32_BIT_IO 0x00008000 00205 #define EFI_RESOURCE_ATTRIBUTE_64_BIT_IO 0x00010000 00206 #define EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED 0x00020000 00207 00208 /// 00209 /// Describes the resource properties of all fixed, 00210 /// nonrelocatable resource ranges found on the processor 00211 /// host bus during the HOB producer phase. 00212 /// 00213 typedef struct { 00214 EFI_HOB_GENERIC_HEADER Header; 00215 EFI_GUID Owner; 00216 EFI_RESOURCE_TYPE ResourceType; 00217 EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute; 00218 EFI_PHYSICAL_ADDRESS PhysicalStart; 00219 UINT64 ResourceLength; 00220 } EFI_HOB_RESOURCE_DESCRIPTOR; 00221 00222 /// 00223 /// Allows writers of executable content in the HOB producer phase to 00224 /// maintain and manage HOBs with specific GUID. 00225 /// 00226 typedef struct { 00227 EFI_HOB_GENERIC_HEADER Header; 00228 EFI_GUID Name; 00229 00230 /// 00231 /// Guid specific data goes here 00232 /// 00233 } EFI_HOB_GUID_TYPE; 00234 00235 /// 00236 /// Details the location of firmware volumes that contain firmware files. 00237 /// 00238 typedef struct { 00239 EFI_HOB_GENERIC_HEADER Header; 00240 EFI_PHYSICAL_ADDRESS BaseAddress; 00241 UINT64 Length; 00242 } EFI_HOB_FIRMWARE_VOLUME; 00243 00244 /// 00245 /// Details the location of a firmware volume which was extracted 00246 /// from a file within another firmware volume. 00247 /// 00248 typedef struct { 00249 EFI_HOB_GENERIC_HEADER Header; 00250 EFI_PHYSICAL_ADDRESS BaseAddress; 00251 UINT64 Length; 00252 EFI_GUID FvName; 00253 EFI_GUID FileName; 00254 } EFI_HOB_FIRMWARE_VOLUME2; 00255 00256 00257 /// 00258 /// Describes processor information, such as address space and I/O space capabilities. 00259 /// 00260 typedef struct { 00261 EFI_HOB_GENERIC_HEADER Header; 00262 UINT8 SizeOfMemorySpace; 00263 UINT8 SizeOfIoSpace; 00264 UINT8 Reserved[6]; 00265 } EFI_HOB_CPU; 00266 00267 00268 /// 00269 /// Describes pool memory allocations. 00270 /// 00271 typedef struct { 00272 EFI_HOB_GENERIC_HEADER Header; 00273 } EFI_HOB_MEMORY_POOL; 00274 00275 /// 00276 /// Union of all the possible HOB Types 00277 /// 00278 typedef union { 00279 EFI_HOB_GENERIC_HEADER *Header; 00280 EFI_HOB_HANDOFF_INFO_TABLE *HandoffInformationTable; 00281 EFI_HOB_MEMORY_ALLOCATION *MemoryAllocation; 00282 EFI_HOB_MEMORY_ALLOCATION_BSP_STORE *MemoryAllocationBspStore; 00283 EFI_HOB_MEMORY_ALLOCATION_STACK *MemoryAllocationStack; 00284 EFI_HOB_MEMORY_ALLOCATION_MODULE *MemoryAllocationModule; 00285 EFI_HOB_RESOURCE_DESCRIPTOR *ResourceDescriptor; 00286 EFI_HOB_GUID_TYPE *Guid; 00287 EFI_HOB_FIRMWARE_VOLUME *FirmwareVolume; 00288 EFI_HOB_FIRMWARE_VOLUME2 *FirmwareVolume2; 00289 EFI_HOB_CPU *Cpu; 00290 EFI_HOB_MEMORY_POOL *Pool; 00291 UINT8 *Raw; 00292 } EFI_PEI_HOB_POINTERS; 00293 00294 00295 #endif
1.5.7.1