]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/DxeIpl/HobGeneration.c
UefiCpuPkg/PiSmmCpuDxeSmm: patch "gSmbase" with PatchInstructionX86()
[mirror_edk2.git] / DuetPkg / DxeIpl / HobGeneration.c
index 624d6763a20092bb532aaed5dc3701981192cc8d..03e44d594d73c6442e6100c6c8d7cb491600317d 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
 \r
-Copyright (c) 2006 - 2007, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
+Copyright (c) 2006 - 2014, 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
@@ -23,10 +23,9 @@ Revision History:
 #include "FlashLayout.h"\r
 #include "Debug.h"\r
 \r
-#define EFI_DXE_FILE_GUID \\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
+#define EBDA_VALUE_ADDRESS           0x40E\r
 \r
 HOB_TEMPLATE  gHobTemplate = {\r
   { // Phit\r
@@ -92,7 +91,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
@@ -187,14 +186,38 @@ HOB_TEMPLATE  gHobTemplate = {
         0, 0, 0, 0                                  // UINT8                 Reserved[4]; \r
       },\r
     },\r
-    EFI_DXE_FILE_GUID,\r
+    DXE_CORE_FILE_NAME_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 +262,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 +343,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
-    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
+      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 +381,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 +413,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 +444,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 +472,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 +519,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 +548,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
@@ -499,12 +603,21 @@ Return:
 --*/\r
 {\r
   UINTN                Index;\r
+  UINT64               EbdaAddress;\r
 \r
   //\r
   // Prepare Low Memory\r
   // 0x18 pages is 72 KB.\r
   //\r
-  gHob->MemoryFreeUnder1MB.ResourceLength = EFI_MEMORY_BELOW_1MB_END - EFI_MEMORY_BELOW_1MB_START;\r
+  EbdaAddress = ((UINT64)(*(UINT16 *)(UINTN)(EBDA_VALUE_ADDRESS))) << 4;\r
+  if (EbdaAddress < 0x9A000 || EbdaAddress > EFI_MEMORY_BELOW_1MB_END) {\r
+    //\r
+    // EBDA should not go below 0x9A000 in any implementation,\r
+    // so add check here to make sure EBDA_VALUE_ADDRESS has a valid value.\r
+    //\r
+    EbdaAddress = EFI_MEMORY_BELOW_1MB_END;\r
+  }\r
+  gHob->MemoryFreeUnder1MB.ResourceLength = EbdaAddress - EFI_MEMORY_BELOW_1MB_START;\r
   gHob->MemoryFreeUnder1MB.PhysicalStart  = EFI_MEMORY_BELOW_1MB_START;\r
 \r
   //\r
@@ -610,13 +723,13 @@ PrepareHobBfv (
   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
+  // This is like a RAM Disk. Align to page boundary.\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
@@ -635,9 +748,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
@@ -669,7 +786,7 @@ PrepareHobNvStorage (
            +-------------------+\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
@@ -678,7 +795,7 @@ PrepareHobNvStorage (
     0\r
   };\r
   \r
-  static EFI_FIRMWARE_VOLUME_HEADER NvStorageFvbHeader = {\r
+  STATIC EFI_FIRMWARE_VOLUME_HEADER NvStorageFvbHeader = {\r
     {\r
       0,\r
     },  // ZeroVector[16]\r
@@ -705,7 +822,7 @@ PrepareHobNvStorage (
     }\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
@@ -810,7 +927,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 +965,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