]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/DxeIpl/HobGeneration.c
change the GetPcd64 to FixedGetPcd64 to pass ECC
[mirror_edk2.git] / DuetPkg / DxeIpl / HobGeneration.c
index 0158ea7884d7c0593cccf9f66358465db4e8cd30..c5b6c7c1b22cce6902a53986d475d5767e389cda 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2006 - 2007, Intel Corporation                                                         \r
+Copyright (c) 2006 - 2010, Intel Corporation                                                         \r
 All rights reserved. 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
@@ -24,9 +24,10 @@ Revision History:
 #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
@@ -92,7 +93,7 @@ HOB_TEMPLATE  gHobTemplate = {
       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
@@ -190,11 +191,35 @@ HOB_TEMPLATE  gHobTemplate = {
     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
@@ -239,31 +264,47 @@ HOB_TEMPLATE  gHobTemplate = {
     }\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
@@ -304,25 +345,37 @@ HOB_TEMPLATE  gHobTemplate = {
   },\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
+    {\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
     NULL\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
@@ -330,12 +383,18 @@ HOB_TEMPLATE  gHobTemplate = {
     }\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
@@ -356,21 +415,27 @@ HOB_TEMPLATE  gHobTemplate = {
     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
@@ -381,21 +446,27 @@ HOB_TEMPLATE  gHobTemplate = {
     }\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
@@ -403,22 +474,45 @@ HOB_TEMPLATE  gHobTemplate = {
       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
@@ -427,21 +521,27 @@ HOB_TEMPLATE  gHobTemplate = {
     }\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
@@ -450,21 +550,27 @@ HOB_TEMPLATE  gHobTemplate = {
     }\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
@@ -635,9 +741,13 @@ PrepareHobDxeCore (
   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
@@ -810,7 +920,8 @@ PrepareHobNvStorage (
   // 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
@@ -847,21 +958,18 @@ PrepareHobCpu (
   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