PiHob.h

Go to the documentation of this file.
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

Generated on Tue Apr 6 20:01:07 2010 for gPXE by  doxygen 1.5.7.1