/** @file\r
\r
-Copyright (c) 2006 - 2007, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
+Copyright (c) 2006 - 2010, 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
#include "Debug.h"\r
\r
#define EFI_DXE_FILE_GUID \\r
- { 0xb1644c1a, 0xc16a, 0x4c5b, 0x88, 0xde, 0xea, 0xfb, 0xa9, 0x7e, 0x74, 0xd8 }\r
+ { 0xb1644c1a, 0xc16a, 0x4c5b, {0x88, 0xde, 0xea, 0xfb, 0xa9, 0x7e, 0x74, 0xd8 }}\r
\r
-#define CPUID_EXTENDED_ADD_SIZE 0x80000008\r
+#define EFI_CPUID_EXTENDED_FUNCTION 0x80000000\r
+#define CPUID_EXTENDED_ADD_SIZE 0x80000008\r
\r
HOB_TEMPLATE gHobTemplate = {\r
{ // Phit\r
0x0, // EFI_PHYSICAL_ADDRESS MemoryBaseAddress;\r
0x0, // UINT64 MemoryLength;\r
EfiBootServicesData, // EFI_MEMORY_TYPE MemoryType; \r
- 0, 0, 0, 0 // Reserved Reserved[4]; \r
+ {0, 0, 0, 0} // Reserved Reserved[4]; \r
}\r
},\r
{ // MemoryAllocation for HOB's & Images\r
EFI_DXE_FILE_GUID,\r
0x0 // EFI_PHYSICAL_ADDRESS of EntryPoint;\r
},\r
+ { // MemoryDxeCore\r
+ {\r
+ EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, // HobType\r
+ sizeof (EFI_HOB_RESOURCE_DESCRIPTOR), // HobLength\r
+ 0 // Reserved\r
+ },\r
+ {\r
+ 0 // Owner Guid\r
+ },\r
+ EFI_RESOURCE_SYSTEM_MEMORY, // ResourceType\r
+ (EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
+// EFI_RESOURCE_ATTRIBUTE_TESTED | // Do not mark as TESTED, or DxeCore will find it and use it before check Allocation\r
+ EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
+ EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | \r
+ EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | \r
+ EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | \r
+ EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE), \r
+ 0x0, // PhysicalStart\r
+ 0 // ResourceLength\r
+ },\r
{ // Memory Map Hints to reduce fragmentation in the memory map\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (MEMORY_TYPE_INFORMATION_HOB), // Hob size\r
- 0, // reserved\r
- EFI_MEMORY_TYPE_INFORMATION_GUID,\r
+ {\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (MEMORY_TYPE_INFORMATION_HOB), // Hob size\r
+ 0, // reserved\r
+ },\r
+ EFI_MEMORY_TYPE_INFORMATION_GUID\r
+ },\r
{\r
{\r
EfiACPIReclaimMemory,\r
}\r
},\r
{ // Pointer to ACPI Table\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (TABLE_HOB), // Hob size\r
- 0, // reserved\r
- EFI_ACPI_TABLE_GUID,\r
+ {\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (TABLE_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_ACPI_TABLE_GUID\r
+ },\r
0\r
},\r
{ // Pointer to ACPI20 Table\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (TABLE_HOB), // Hob size\r
- 0, // reserved\r
- EFI_ACPI_20_TABLE_GUID,\r
+ {\r
+ { \r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (TABLE_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_ACPI_20_TABLE_GUID\r
+ },\r
0\r
},\r
{ // Pointer to SMBIOS Table\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (TABLE_HOB), // Hob size\r
- 0, // reserved\r
- EFI_SMBIOS_TABLE_GUID,\r
+ {\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (TABLE_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ SMBIOS_TABLE_GUID\r
+ },\r
0\r
},\r
{ // Pointer to MPS Table\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (TABLE_HOB), // Hob size\r
- 0, // reserved\r
- EFI_MPS_TABLE_GUID,\r
+ {\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (TABLE_HOB), // Hob size\r
+ 0, // reserved\r
+ },\r
+ EFI_MPS_TABLE_GUID\r
+ },\r
0\r
},\r
/**\r
},\r
**/\r
{ // Pointer to ReportStatusCode\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (PROTOCOL_HOB), // Hob size\r
- 0, // reserved\r
- EFI_STATUS_CODE_RUNTIME_PROTOCOL_GUID,\r
- NULL\r
+ {\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (PROTOCOL_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_STATUS_CODE_RUNTIME_PROTOCOL_GUID\r
+ },\r
+ 0\r
},\r
{ // EFILDR Memory Descriptor\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (MEMORY_DESC_HOB), // Hob size\r
- 0, // reserved\r
- EFI_LDR_MEMORY_DESCRIPTOR_GUID,\r
+ {\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (MEMORY_DESC_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_LDR_MEMORY_DESCRIPTOR_GUID\r
+ },\r
0,\r
NULL\r
},\r
{ // Pci Express Base Address Hob\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (PCI_EXPRESS_BASE_HOB), // Hob size\r
- 0, // reserved\r
- EFI_PCI_EXPRESS_BASE_ADDRESS_GUID,\r
+ {\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (PCI_EXPRESS_BASE_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_PCI_EXPRESS_BASE_ADDRESS_GUID\r
+ },\r
{\r
0,\r
0,\r
}\r
},\r
{ // Acpi Description Hob\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (ACPI_DESCRIPTION_HOB), // Hob size\r
- 0, // reserved\r
- EFI_ACPI_DESCRIPTION_GUID,\r
{\r
- 0,\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (ACPI_DESCRIPTION_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_ACPI_DESCRIPTION_GUID\r
+ },\r
+ {\r
+ {\r
+ 0,\r
+ },\r
}\r
},\r
{ // NV Storage FV Resource\r
NV_STORAGE_FVB_SIZE // ResourceLength\r
},\r
{ // FVB holding NV Storage\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (FVB_HOB),\r
- 0,\r
- EFI_FLASH_MAP_HOB_GUID,\r
{\r
- 0, 0, 0, // Reserved[3]\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (FVB_HOB),\r
+ 0\r
+ },\r
+ EFI_FLASH_MAP_HOB_GUID\r
+ },\r
+ {\r
+ {0, 0, 0}, // Reserved[3]\r
EFI_FLASH_AREA_GUID_DEFINED, // AreaType\r
- EFI_SYSTEM_NV_DATA_HOB_GUID, // AreaTypeGuid\r
+ EFI_SYSTEM_NV_DATA_FV_GUID , // AreaTypeGuid\r
1,\r
{\r
- EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
- 0, // SubAreaData.Reserved\r
- 0, // SubAreaData.Base (Fixed later)\r
- NV_STORAGE_FVB_SIZE, // SubAreaData.Length\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ {\r
+ EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
+ 0, // SubAreaData.Reserved\r
+ 0, // SubAreaData.Base (Fixed later)\r
+ NV_STORAGE_FVB_SIZE, // SubAreaData.Length\r
+ EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ }\r
}, \r
0, // VolumeSignature (Fixed later)\r
NV_STORAGE_FILE_PATH, // Mapped file without padding\r
}\r
},\r
{ // NV Storage Hob\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (FVB_HOB), // Hob size\r
- 0, // reserved\r
- EFI_FLASH_MAP_HOB_GUID,\r
{\r
- 0, 0, 0, // Reserved[3]\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (FVB_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_FLASH_MAP_HOB_GUID\r
+ },\r
+ {\r
+ {0, 0, 0}, // Reserved[3]\r
EFI_FLASH_AREA_EFI_VARIABLES, // AreaType\r
{ 0 }, // AreaTypeGuid\r
1,\r
{\r
- EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
- 0, // SubAreaData.Reserved\r
- 0, // SubAreaData.Base (Fixed later)\r
- NV_STORAGE_SIZE, // SubAreaData.Length\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ {\r
+ EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
+ 0, // SubAreaData.Reserved\r
+ 0, // SubAreaData.Base (Fixed later)\r
+ NV_STORAGE_SIZE, // SubAreaData.Length\r
+ EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ }\r
}, \r
0,\r
NV_STORAGE_FILE_PATH,\r
0\r
}\r
},\r
+ { // NV Ftw FV Resource\r
+ {\r
+ EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, // HobType\r
+ sizeof (EFI_HOB_RESOURCE_DESCRIPTOR), // HobLength\r
+ 0 // Reserved\r
+ },\r
+ {\r
+ 0 // Owner Guid\r
+ },\r
+ EFI_RESOURCE_FIRMWARE_DEVICE, // ResourceType\r
+ (EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
+ EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
+ EFI_RESOURCE_ATTRIBUTE_TESTED |\r
+ EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE), // ResourceAttribute\r
+ 0, // PhysicalStart (Fixed later)\r
+ NV_FTW_FVB_SIZE // ResourceLength\r
+ }, \r
{ // FVB holding FTW spaces including Working & Spare space\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (FVB_HOB),\r
- 0,\r
- EFI_FLASH_MAP_HOB_GUID,\r
{\r
- 0, 0, 0, // Reserved[3]\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (FVB_HOB),\r
+ 0\r
+ },\r
+ EFI_FLASH_MAP_HOB_GUID\r
+ },\r
+ {\r
+ {0, 0, 0}, // Reserved[3]\r
EFI_FLASH_AREA_GUID_DEFINED, // AreaType\r
- EFI_SYSTEM_NV_DATA_HOB_GUID, // AreaTypeGuid\r
+ EFI_SYSTEM_NV_DATA_FV_GUID, // AreaTypeGuid\r
1,\r
{\r
- EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
- 0, // SubAreaData.Reserved\r
- 0, // SubAreaData.Base (Fixed later)\r
- NV_FTW_FVB_SIZE, // SubAreaData.Length\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ {\r
+ EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
+ 0, // SubAreaData.Reserved\r
+ 0, // SubAreaData.Base (Fixed later)\r
+ NV_FTW_FVB_SIZE, // SubAreaData.Length\r
+ EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ }\r
}, \r
0,\r
L"", // Empty String indicates using memory\r
}\r
},\r
{ // NV Ftw working Hob\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (FVB_HOB), // Hob size\r
- 0, // reserved\r
- EFI_FLASH_MAP_HOB_GUID,\r
{\r
- 0, 0, 0, // Reserved[3]\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (FVB_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_FLASH_MAP_HOB_GUID\r
+ },\r
+ {\r
+ {0, 0, 0}, // Reserved[3]\r
EFI_FLASH_AREA_FTW_STATE, // AreaType\r
{ 0 }, // AreaTypeGuid\r
1,\r
{\r
- EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
- 0, // SubAreaData.Reserved\r
- 0, // SubAreaData.Base (Fixed later)\r
- NV_FTW_WORKING_SIZE, // SubAreaData.Length\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ {\r
+ EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
+ 0, // SubAreaData.Reserved\r
+ 0, // SubAreaData.Base (Fixed later)\r
+ NV_FTW_WORKING_SIZE, // SubAreaData.Length\r
+ EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ }\r
}, \r
0, // VolumeSignature\r
L"",\r
}\r
},\r
{ // NV Ftw spare Hob\r
- EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
- sizeof (FVB_HOB), // Hob size\r
- 0, // reserved\r
- EFI_FLASH_MAP_HOB_GUID,\r
{\r
- 0, 0, 0, // Reserved[3]\r
+ {\r
+ EFI_HOB_TYPE_GUID_EXTENSION, // Hob type\r
+ sizeof (FVB_HOB), // Hob size\r
+ 0 // reserved\r
+ },\r
+ EFI_FLASH_MAP_HOB_GUID\r
+ },\r
+ {\r
+ {0, 0, 0}, // Reserved[3]\r
EFI_FLASH_AREA_FTW_BACKUP, // AreaType\r
{ 0 }, // AreaTypeGuid\r
1,\r
{\r
- EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
- 0, // SubAreaData.Reserved\r
- 0, // SubAreaData.Base (Fixed later)\r
- NV_FTW_SPARE_SIZE, // SubAreaData.Length\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ {\r
+ EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes\r
+ 0, // SubAreaData.Reserved\r
+ 0, // SubAreaData.Base (Fixed later)\r
+ NV_FTW_SPARE_SIZE, // SubAreaData.Length\r
+ EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem\r
+ }\r
}, \r
0,\r
L"",\r
//\r
// Process region above 4GB\r
//\r
- if (EfiMemoryDescriptor[Index].PhysicalStart >= 0x100000000) {\r
+ if (EfiMemoryDescriptor[Index].PhysicalStart >= 0x100000000LL) {\r
if (EfiMemoryDescriptor[Index].Type == EfiConventionalMemory) {\r
if (gHob->MemoryAbove4GB.PhysicalStart == 0) {\r
gHob->MemoryAbove4GB.PhysicalStart = EfiMemoryDescriptor[Index].PhysicalStart;\r
UINTN BfvLength\r
)\r
{\r
- UINTN BfvLengthPageSize;\r
+ //UINTN BfvLengthPageSize;\r
\r
//\r
// Calculate BFV location at top of the memory region.\r
// This is like a RAM Disk. Align to page boundry.\r
//\r
- BfvLengthPageSize = EFI_PAGES_TO_SIZE (EFI_SIZE_TO_PAGES (BfvLength));\r
+ //BfvLengthPageSize = EFI_PAGES_TO_SIZE (EFI_SIZE_TO_PAGES (BfvLength));\r
\r
gHob->Bfv.BaseAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Bfv;\r
gHob->Bfv.Length = BfvLength;\r
UINT64 DxeCoreLength\r
)\r
{\r
- gHob->DxeCore.MemoryAllocationHeader.MemoryBaseAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)DxeCoreImageBase;\r
+ gHob->DxeCore.MemoryAllocationHeader.MemoryBaseAddress = DxeCoreImageBase;\r
gHob->DxeCore.MemoryAllocationHeader.MemoryLength = DxeCoreLength;\r
gHob->DxeCore.EntryPoint = (EFI_PHYSICAL_ADDRESS)(UINTN)DxeCoreEntryPoint;\r
+\r
+\r
+ gHob->MemoryDxeCore.PhysicalStart = DxeCoreImageBase;\r
+ gHob->MemoryDxeCore.ResourceLength = DxeCoreLength; \r
}\r
\r
VOID *\r
+-------------------+\r
*/\r
{\r
- static VARIABLE_STORE_HEADER VarStoreHeader = {\r
+ STATIC VARIABLE_STORE_HEADER VarStoreHeader = {\r
VARIABLE_STORE_SIGNATURE,\r
0xffffffff, // will be fixed in Variable driver\r
VARIABLE_STORE_FORMATTED,\r
0\r
};\r
\r
- static EFI_FIRMWARE_VOLUME_HEADER NvStorageFvbHeader = {\r
+ STATIC EFI_FIRMWARE_VOLUME_HEADER NvStorageFvbHeader = {\r
{\r
0,\r
}, // ZeroVector[16]\r
}\r
};\r
\r
- static EFI_FV_BLOCK_MAP_ENTRY BlockMapEntryEnd = {0, 0};\r
+ STATIC EFI_FV_BLOCK_MAP_ENTRY BlockMapEntryEnd = {0, 0};\r
\r
EFI_PHYSICAL_ADDRESS StorageFvbBase;\r
EFI_PHYSICAL_ADDRESS FtwFvbBase;\r
// Create the FVB holding FTW spaces\r
//\r
FtwFvbBase = (EFI_PHYSICAL_ADDRESS)((UINTN) StorageFvbBase + NV_STORAGE_FVB_SIZE);\r
- gHob->NvFtwFvb.FvbInfo.Entries[0].Base = FtwFvbBase;\r
+ gHob->NvFtwFvResource.PhysicalStart =\r
+ gHob->NvFtwFvb.FvbInfo.Entries[0].Base = FtwFvbBase;\r
//\r
// Put FTW Working in front\r
//\r
VOID\r
)\r
{\r
- EFI_CPUID_REGISTER Reg;\r
- UINT8 CpuMemoryAddrBitNumber;\r
+ UINT32 CpuidEax;\r
\r
//\r
// Create a CPU hand-off information\r
//\r
- CpuMemoryAddrBitNumber = 36;\r
- AsmCpuid (EFI_CPUID_EXTENDED_FUNCTION, &Reg.RegEax, &Reg.RegEbx, &Reg.RegEcx, &Reg.RegEdx);\r
+ gHob->Cpu.SizeOfMemorySpace = 36;\r
\r
- if (Reg.RegEax >= CPUID_EXTENDED_ADD_SIZE) {\r
- AsmCpuid (CPUID_EXTENDED_ADD_SIZE, &Reg.RegEax, &Reg.RegEbx, &Reg.RegEcx, &Reg.RegEdx);\r
- CpuMemoryAddrBitNumber = (UINT8)(UINTN)(Reg.RegEax & 0xFF);\r
+ AsmCpuid (EFI_CPUID_EXTENDED_FUNCTION, &CpuidEax, NULL, NULL, NULL);\r
+ if (CpuidEax >= CPUID_EXTENDED_ADD_SIZE) {\r
+ AsmCpuid (CPUID_EXTENDED_ADD_SIZE, &CpuidEax, NULL, NULL, NULL);\r
+ gHob->Cpu.SizeOfMemorySpace = (UINT8)(CpuidEax & 0xFF);\r
}\r
- \r
- gHob->Cpu.SizeOfMemorySpace = CpuMemoryAddrBitNumber;\r
}\r
\r
VOID\r