-/*++\r
-\r
-Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
-Module Name:\r
-\r
- PeiHob.h\r
-\r
-Abstract:\r
-\r
- PEI Hand Off Block (HOB) definition.\r
-\r
- The HOB is a memory data structure used to hand-off system information from\r
- PEI to DXE (the next phase).\r
-\r
---*/\r
-\r
-#ifndef _PEI_HOB_H_\r
-#define _PEI_HOB_H_\r
-\r
-#include "BootMode.h"\r
-\r
-//\r
-// Every Hob must start with this data structure.\r
-//\r
-typedef struct {\r
- UINT16 HobType;\r
- UINT16 HobLength;\r
- UINT32 Reserved;\r
-} EFI_HOB_GENERIC_HEADER;\r
-\r
-//\r
-// End of HOB List HOB\r
-//\r
-#define EFI_HOB_TYPE_END_OF_HOB_LIST 0xffff\r
-\r
-//\r
-// Handoff Information Table HOB\r
-//\r
-#define EFI_HOB_TYPE_HANDOFF 0x0001\r
-\r
-#define EFI_HOB_HANDOFF_TABLE_VERSION 0x0009\r
-\r
-typedef UINT32 EFI_BOOT_MODE;\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- UINT32 Version;\r
- EFI_BOOT_MODE BootMode;\r
- EFI_PHYSICAL_ADDRESS EfiMemoryTop;\r
- EFI_PHYSICAL_ADDRESS EfiMemoryBottom;\r
- EFI_PHYSICAL_ADDRESS EfiFreeMemoryTop;\r
- EFI_PHYSICAL_ADDRESS EfiFreeMemoryBottom;\r
- EFI_PHYSICAL_ADDRESS EfiEndOfHobList;\r
-} EFI_HOB_HANDOFF_INFO_TABLE;\r
-\r
-//\r
-// Memory Descriptor HOB\r
-//\r
-#define EFI_HOB_TYPE_MEMORY_ALLOCATION 0x0002\r
-\r
-typedef struct {\r
- EFI_GUID Name;\r
- EFI_PHYSICAL_ADDRESS MemoryBaseAddress;\r
- UINT64 MemoryLength;\r
- EFI_MEMORY_TYPE MemoryType;\r
- UINT8 Reserved[4];\r
-} EFI_HOB_MEMORY_ALLOCATION_HEADER;\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;\r
- //\r
- // Additional data pertaining to the "Name" Guid memory\r
- // may go here.\r
- //\r
-} EFI_HOB_MEMORY_ALLOCATION;\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;\r
-} EFI_HOB_MEMORY_ALLOCATION_BSP_STORE;\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;\r
-} EFI_HOB_MEMORY_ALLOCATION_STACK;\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_HOB_MEMORY_ALLOCATION_HEADER MemoryAllocationHeader;\r
- EFI_GUID ModuleName;\r
- EFI_PHYSICAL_ADDRESS EntryPoint;\r
-} EFI_HOB_MEMORY_ALLOCATION_MODULE;\r
-\r
-#define EFI_HOB_TYPE_RESOURCE_DESCRIPTOR 0x0003\r
-\r
-typedef UINT32 EFI_RESOURCE_TYPE;\r
-\r
-#define EFI_RESOURCE_SYSTEM_MEMORY 0\r
-#define EFI_RESOURCE_MEMORY_MAPPED_IO 1\r
-#define EFI_RESOURCE_IO 2\r
-#define EFI_RESOURCE_FIRMWARE_DEVICE 3\r
-#define EFI_RESOURCE_MEMORY_MAPPED_IO_PORT 4\r
-#define EFI_RESOURCE_MEMORY_RESERVED 5\r
-#define EFI_RESOURCE_IO_RESERVED 6\r
-#define EFI_RESOURCE_MAX_MEMORY_TYPE 7\r
-\r
-typedef UINT32 EFI_RESOURCE_ATTRIBUTE_TYPE;\r
-\r
-#define EFI_RESOURCE_ATTRIBUTE_PRESENT 0x00000001\r
-#define EFI_RESOURCE_ATTRIBUTE_INITIALIZED 0x00000002\r
-#define EFI_RESOURCE_ATTRIBUTE_TESTED 0x00000004\r
-#define EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC 0x00000008\r
-#define EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC 0x00000010\r
-#define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 0x00000020\r
-#define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 0x00000040\r
-#define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED 0x00000080\r
-#define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED 0x00000100\r
-#define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED 0x00000200\r
-#define EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE 0x00000400\r
-#define EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE 0x00000800\r
-#define EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE 0x00001000\r
-#define EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE 0x00002000\r
-#define EFI_RESOURCE_ATTRIBUTE_16_BIT_IO 0x00004000\r
-#define EFI_RESOURCE_ATTRIBUTE_32_BIT_IO 0x00008000\r
-#define EFI_RESOURCE_ATTRIBUTE_64_BIT_IO 0x00010000\r
-#define EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED 0x00020000\r
-//\r
-// The following values are defined in PI 1.2 errata B.\r
-//\r
-#define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTABLE 0x00100000\r
-#define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE 0x00200000\r
-#define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE 0x00400000\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_GUID Owner;\r
- EFI_RESOURCE_TYPE ResourceType;\r
- EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute;\r
- EFI_PHYSICAL_ADDRESS PhysicalStart;\r
- UINT64 ResourceLength;\r
-} EFI_HOB_RESOURCE_DESCRIPTOR;\r
-\r
-//\r
-// GUID Extension HOB\r
-// The HobLength is variable as it includes the GUID specific data.\r
-//\r
-#define EFI_HOB_TYPE_GUID_EXTENSION 0x0004\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_GUID Name;\r
-\r
- //\r
- // Guid specific data goes here\r
- //\r
-} EFI_HOB_GUID_TYPE;\r
-\r
-//\r
-// Firmware Volume HOB\r
-//\r
-#define EFI_HOB_TYPE_FV 0x0005\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_PHYSICAL_ADDRESS BaseAddress;\r
- UINT64 Length;\r
-} EFI_HOB_FIRMWARE_VOLUME;\r
-\r
-//\r
-// CPU HOB\r
-//\r
-#define EFI_HOB_TYPE_CPU 0x0006\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- UINT8 SizeOfMemorySpace;\r
- UINT8 SizeOfIoSpace;\r
- UINT8 Reserved[6];\r
-} EFI_HOB_CPU;\r
-\r
-//\r
-// PEI Core Memory Pool HOB\r
-// The HobLength is variable as the HOB contains pool allocations by\r
-// the PeiServices AllocatePool function\r
-//\r
-#define EFI_HOB_TYPE_PEI_MEMORY_POOL 0x0007\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
-} EFI_HOB_MEMORY_POOL;\r
-\r
-//\r
-// Capsule volume HOB -- identical to a firmware volume\r
-//\r
-#define EFI_HOB_TYPE_CV 0x0008\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_PHYSICAL_ADDRESS BaseAddress;\r
- UINT64 Length;\r
-} EFI_HOB_CAPSULE_VOLUME;\r
-\r
-#if (PI_SPECIFICATION_VERSION >= 0x00010000)\r
-\r
-#define EFI_HOB_TYPE_FV2 0x0009\r
-\r
-typedef struct {\r
- EFI_HOB_GENERIC_HEADER Header;\r
- EFI_PHYSICAL_ADDRESS BaseAddress;\r
- UINT64 Length;\r
- EFI_GUID FvName;\r
- EFI_GUID FileName;\r
-} EFI_HOB_FIRMWARE_VOLUME2;\r
-\r
-#define EFI_HOB_TYPE_LOAD_PEIM_UNUSED 0x000A\r
-\r
-#endif\r
-\r
-#define EFI_HOB_TYPE_UNUSED 0xFFFE\r
-\r
-//\r
-// Union of all the possible HOB Types\r
-//\r
-typedef union {\r
- EFI_HOB_GENERIC_HEADER *Header;\r
- EFI_HOB_HANDOFF_INFO_TABLE *HandoffInformationTable;\r
- EFI_HOB_MEMORY_ALLOCATION *MemoryAllocation;\r
- EFI_HOB_MEMORY_ALLOCATION_BSP_STORE *MemoryAllocationBspStore;\r
- EFI_HOB_MEMORY_ALLOCATION_STACK *MemoryAllocationStack;\r
- EFI_HOB_MEMORY_ALLOCATION_MODULE *MemoryAllocationModule;\r
- EFI_HOB_RESOURCE_DESCRIPTOR *ResourceDescriptor;\r
- EFI_HOB_GUID_TYPE *Guid;\r
- EFI_HOB_FIRMWARE_VOLUME *FirmwareVolume;\r
-#if (PI_SPECIFICATION_VERSION >= 0x00010000)\r
- EFI_HOB_FIRMWARE_VOLUME2 *FirmwareVolume2;\r
-#endif\r
- EFI_HOB_CPU *Cpu;\r
- EFI_HOB_MEMORY_POOL *Pool;\r
- EFI_HOB_CAPSULE_VOLUME *CapsuleVolume;\r
- UINT8 *Raw;\r
-} EFI_PEI_HOB_POINTERS;\r
-\r
-#define GET_HOB_TYPE(Hob) ((Hob).Header->HobType)\r
-#define GET_HOB_LENGTH(Hob) ((Hob).Header->HobLength)\r
-#define GET_NEXT_HOB(Hob) ((Hob).Raw + GET_HOB_LENGTH (Hob))\r
-#define END_OF_HOB_LIST(Hob) (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_END_OF_HOB_LIST)\r
-\r
-#endif\r