1 /** @file 2 3 Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 HobGeneration.h 14 15 Abstract: 16 17 Revision History: 18 19 **/ 20 21 #ifndef _DXELDR_HOB_GENERATION_H_ 22 #define _DXELDR_HOB_GENERATION_H_ 23 24 #include "DxeIpl.h" 25 26 #define EFI_MEMORY_BELOW_1MB_START 0x86000 27 #define EFI_MEMORY_BELOW_1MB_END 0x9F800 28 #define EFI_MEMORY_STACK_PAGE_NUM 0x20 29 #define CONSUMED_MEMORY 0x100000 * 80 30 31 #define NV_STORAGE_START 0x15000 32 #define NV_STORAGE_STATE 0x19000 33 34 #pragma pack(1) 35 36 typedef struct { 37 EFI_HOB_GUID_TYPE Hob; 38 EFI_MEMORY_TYPE_INFORMATION Info[10]; 39 } MEMORY_TYPE_INFORMATION_HOB; 40 41 typedef struct { 42 EFI_HOB_GUID_TYPE Hob; 43 EFI_PHYSICAL_ADDRESS Table; 44 } TABLE_HOB; 45 46 typedef struct { 47 EFI_HOB_GUID_TYPE Hob; 48 EFI_PHYSICAL_ADDRESS Interface; 49 } PROTOCOL_HOB; 50 51 typedef struct { 52 EFI_HOB_GUID_TYPE Hob; 53 // Note: we get only one PCI Segment now. 54 EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION PciExpressBaseAddressInfo; 55 } PCI_EXPRESS_BASE_HOB; 56 57 typedef struct { 58 EFI_HOB_GUID_TYPE Hob; 59 EFI_ACPI_DESCRIPTION AcpiDescription; 60 } ACPI_DESCRIPTION_HOB; 61 62 typedef struct { 63 EFI_HOB_GUID_TYPE Hob; 64 EFI_FLASH_MAP_FS_ENTRY_DATA FvbInfo; 65 } FVB_HOB; 66 67 typedef struct { 68 EFI_HOB_HANDOFF_INFO_TABLE Phit; 69 EFI_HOB_FIRMWARE_VOLUME Bfv; 70 EFI_HOB_RESOURCE_DESCRIPTOR BfvResource; 71 EFI_HOB_CPU Cpu; 72 EFI_HOB_MEMORY_ALLOCATION_STACK Stack; 73 EFI_HOB_MEMORY_ALLOCATION MemoryAllocation; 74 EFI_HOB_RESOURCE_DESCRIPTOR MemoryFreeUnder1MB; 75 EFI_HOB_RESOURCE_DESCRIPTOR MemoryAbove1MB; 76 EFI_HOB_RESOURCE_DESCRIPTOR MemoryAbove4GB; 77 EFI_HOB_MEMORY_ALLOCATION_MODULE DxeCore; 78 EFI_HOB_RESOURCE_DESCRIPTOR MemoryDxeCore; 79 MEMORY_TYPE_INFORMATION_HOB MemoryTypeInfo; 80 TABLE_HOB Acpi; 81 TABLE_HOB Acpi20; 82 TABLE_HOB Smbios; 83 TABLE_HOB Mps; 84 /** 85 PROTOCOL_HOB FlushInstructionCache; 86 PROTOCOL_HOB TransferControl; 87 PROTOCOL_HOB PeCoffLoader; 88 PROTOCOL_HOB EfiDecompress; 89 PROTOCOL_HOB TianoDecompress; 90 **/ 91 PROTOCOL_HOB SerialStatusCode; 92 MEMORY_DESC_HOB MemoryDescriptor; 93 PCI_EXPRESS_BASE_HOB PciExpress; 94 ACPI_DESCRIPTION_HOB AcpiInfo; 95 96 EFI_HOB_RESOURCE_DESCRIPTOR NvStorageFvResource; 97 98 FVB_HOB NvStorageFvb; 99 FVB_HOB NvStorage; 100 101 EFI_HOB_RESOURCE_DESCRIPTOR NvFtwFvResource; 102 FVB_HOB NvFtwFvb; 103 FVB_HOB NvFtwWorking; 104 FVB_HOB NvFtwSpare; 105 106 EFI_HOB_GENERIC_HEADER EndOfHobList; 107 } HOB_TEMPLATE; 108 109 #pragma pack() 110 111 extern HOB_TEMPLATE *gHob; 112 113 VOID * 114 PrepareHobStack ( 115 IN VOID *StackTop 116 ); 117 118 VOID 119 PrepareHobBfv ( 120 VOID *Bfv, 121 UINTN BfvLength 122 ); 123 124 VOID * 125 PrepareHobMemory ( 126 IN UINTN NumberOfMemoryMapEntries, 127 IN EFI_MEMORY_DESCRIPTOR *EfiMemoryDescriptor 128 ); 129 130 VOID 131 PrepareHobDxeCore ( 132 VOID *DxeCoreEntryPoint, 133 EFI_PHYSICAL_ADDRESS DxeCoreImageBase, 134 UINT64 DxeCoreLength 135 ); 136 137 VOID * 138 PreparePageTable ( 139 VOID *PageNumberTop, 140 UINT8 SizeOfMemorySpace 141 ); 142 143 VOID * 144 PrepareHobMemoryDescriptor ( 145 VOID *MemoryDescriptorTop, 146 UINTN MemDescCount, 147 EFI_MEMORY_DESCRIPTOR *MemDesc 148 ); 149 150 VOID 151 PrepareHobPhit ( 152 VOID *MemoryTop, 153 VOID *FreeMemoryTop 154 ); 155 156 VOID * 157 PrepareHobNvStorage ( 158 VOID *NvStorageTop 159 ); 160 161 VOID 162 PrepareHobCpu ( 163 VOID 164 ); 165 166 VOID 167 CompleteHobGeneration ( 168 VOID 169 ); 170 171 #endif 172