]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c
BlSupportSmm: fix definition of SetSmrr()
[mirror_edk2.git] / UefiPayloadPkg / UefiPayloadEntry / UniversalPayloadEntry.c
index a67653eb115140f39cf55cf6d6904de1fb3ce591..edb3c204717120784772d7869e078c28dd100f5b 100644 (file)
@@ -7,7 +7,7 @@
 \r
 #include "UefiPayloadEntry.h"\r
 \r
-#define MEMORY_ATTRIBUTE_MASK         (EFI_RESOURCE_ATTRIBUTE_PRESENT             | \\r
+#define MEMORY_ATTRIBUTE_MASK  (EFI_RESOURCE_ATTRIBUTE_PRESENT             |        \\r
                                        EFI_RESOURCE_ATTRIBUTE_INITIALIZED         | \\r
                                        EFI_RESOURCE_ATTRIBUTE_TESTED              | \\r
                                        EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED      | \\r
                                        EFI_RESOURCE_ATTRIBUTE_64_BIT_IO           | \\r
                                        EFI_RESOURCE_ATTRIBUTE_PERSISTENT          )\r
 \r
-#define TESTED_MEMORY_ATTRIBUTES      (EFI_RESOURCE_ATTRIBUTE_PRESENT     | \\r
+#define TESTED_MEMORY_ATTRIBUTES  (EFI_RESOURCE_ATTRIBUTE_PRESENT     |     \\r
                                        EFI_RESOURCE_ATTRIBUTE_INITIALIZED | \\r
                                        EFI_RESOURCE_ATTRIBUTE_TESTED      )\r
 \r
 extern VOID  *mHobList;\r
 \r
+/**\r
+  Print all HOBs info from the HOB list.\r
+\r
+  @return The pointer to the HOB list.\r
+**/\r
+VOID\r
+PrintHob (\r
+  IN CONST VOID  *HobStart\r
+  );\r
+\r
 /**\r
   Some bootloader may pass a pcd database, and UPL also contain a PCD database.\r
   Dxe PCD driver has the assumption that the two PCD database can be catenated and\r
-  the local token number should be successive\r
+  the local token number should be successive.\r
   This function will fix up the UPL PCD database to meet that assumption.\r
 \r
   @param[in]   DxeFv         The FV where to find the Universal PCD database.\r
@@ -38,17 +48,17 @@ extern VOID  *mHobList;
 **/\r
 EFI_STATUS\r
 FixUpPcdDatabase (\r
-  IN  EFI_FIRMWARE_VOLUME_HEADER *DxeFv\r
+  IN  EFI_FIRMWARE_VOLUME_HEADER  *DxeFv\r
   )\r
 {\r
-  EFI_STATUS                  Status;\r
-  EFI_FFS_FILE_HEADER         *FileHeader;\r
-  VOID                        *PcdRawData;\r
-  PEI_PCD_DATABASE            *PeiDatabase;\r
-  PEI_PCD_DATABASE            *UplDatabase;\r
-  EFI_HOB_GUID_TYPE           *GuidHob;\r
-  DYNAMICEX_MAPPING           *ExMapTable;\r
-  UINTN                       Index;\r
+  EFI_STATUS           Status;\r
+  EFI_FFS_FILE_HEADER  *FileHeader;\r
+  VOID                 *PcdRawData;\r
+  PEI_PCD_DATABASE     *PeiDatabase;\r
+  PEI_PCD_DATABASE     *UplDatabase;\r
+  EFI_HOB_GUID_TYPE    *GuidHob;\r
+  DYNAMICEX_MAPPING    *ExMapTable;\r
+  UINTN                Index;\r
 \r
   GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
   if (GuidHob == NULL) {\r
@@ -57,7 +67,8 @@ FixUpPcdDatabase (
     //\r
     return EFI_SUCCESS;\r
   }\r
-  PeiDatabase = (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
+\r
+  PeiDatabase = (PEI_PCD_DATABASE *)GET_GUID_HOB_DATA (GuidHob);\r
   DEBUG ((DEBUG_INFO, "Find the Pei PCD data base, the total local token number is %d\n", PeiDatabase->LocalTokenCount));\r
 \r
   Status = FvFindFileByTypeGuid (DxeFv, EFI_FV_FILETYPE_DRIVER, PcdGetPtr (PcdPcdDriverFile), &FileHeader);\r
@@ -65,18 +76,20 @@ FixUpPcdDatabase (
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
+\r
   Status = FileFindSection (FileHeader, EFI_SECTION_RAW, &PcdRawData);\r
   ASSERT_EFI_ERROR (Status);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
-  UplDatabase = (PEI_PCD_DATABASE *) PcdRawData;\r
-  ExMapTable  = (DYNAMICEX_MAPPING *) (UINTN) ((UINTN) PcdRawData + UplDatabase->ExMapTableOffset);\r
+  UplDatabase = (PEI_PCD_DATABASE *)PcdRawData;\r
+  ExMapTable  = (DYNAMICEX_MAPPING *)(UINTN)((UINTN)PcdRawData + UplDatabase->ExMapTableOffset);\r
 \r
   for (Index = 0; Index < UplDatabase->ExTokenCount; Index++) {\r
     ExMapTable[Index].TokenNumber += PeiDatabase->LocalTokenCount;\r
   }\r
+\r
   DEBUG ((DEBUG_INFO, "Fix up UPL PCD database successfully\n"));\r
   return EFI_SUCCESS;\r
 }\r
@@ -88,14 +101,15 @@ FixUpPcdDatabase (
 **/\r
 VOID\r
 AddNewHob (\r
-  IN EFI_PEI_HOB_POINTERS    *Hob\r
+  IN EFI_PEI_HOB_POINTERS  *Hob\r
   )\r
 {\r
-  EFI_PEI_HOB_POINTERS    NewHob;\r
+  EFI_PEI_HOB_POINTERS  NewHob;\r
 \r
   if (Hob->Raw == NULL) {\r
     return;\r
   }\r
+\r
   NewHob.Header = CreateHob (Hob->Header->HobType, Hob->Header->HobLength);\r
 \r
   if (NewHob.Header != NULL) {\r
@@ -104,24 +118,25 @@ AddNewHob (
 }\r
 \r
 /**\r
-  Found the Resource Descriptor HOB that contains a range\r
+  Found the Resource Descriptor HOB that contains a range (Base, Top)\r
 \r
+  @param[in] HobList    Hob start address\r
   @param[in] Base       Memory start address\r
-  @param[in] Top        Memory Top.\r
+  @param[in] Top        Memory end address.\r
 \r
-  @return     The pointer to the Resource Descriptor HOB.\r
+  @retval     The pointer to the Resource Descriptor HOB.\r
 **/\r
 EFI_HOB_RESOURCE_DESCRIPTOR *\r
 FindResourceDescriptorByRange (\r
-  VOID                      *HobList,\r
-  EFI_PHYSICAL_ADDRESS      Base,\r
-  EFI_PHYSICAL_ADDRESS      Top\r
+  IN VOID                  *HobList,\r
+  IN EFI_PHYSICAL_ADDRESS  Base,\r
+  IN EFI_PHYSICAL_ADDRESS  Top\r
   )\r
 {\r
-  EFI_PEI_HOB_POINTERS             Hob;\r
-  EFI_HOB_RESOURCE_DESCRIPTOR      *ResourceHob;\r
+  EFI_PEI_HOB_POINTERS         Hob;\r
+  EFI_HOB_RESOURCE_DESCRIPTOR  *ResourceHob;\r
 \r
-  for (Hob.Raw = (UINT8 *) HobList; !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB(Hob)) {\r
+  for (Hob.Raw = (UINT8 *)HobList; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {\r
     //\r
     // Skip all HOBs except Resource Descriptor HOBs\r
     //\r
@@ -136,6 +151,7 @@ FindResourceDescriptorByRange (
     if (ResourceHob->ResourceType != EFI_RESOURCE_SYSTEM_MEMORY) {\r
       continue;\r
     }\r
+\r
     if ((ResourceHob->ResourceAttribute & MEMORY_ATTRIBUTE_MASK) != TESTED_MEMORY_ATTRIBUTES) {\r
       continue;\r
     }\r
@@ -146,11 +162,14 @@ FindResourceDescriptorByRange (
     if (Base < ResourceHob->PhysicalStart) {\r
       continue;\r
     }\r
+\r
     if (Top > (ResourceHob->PhysicalStart + ResourceHob->ResourceLength)) {\r
       continue;\r
     }\r
+\r
     return ResourceHob;\r
   }\r
+\r
   return NULL;\r
 }\r
 \r
@@ -161,21 +180,22 @@ FindResourceDescriptorByRange (
   @param[in] MinimalNeededSize       Minimal needed size.\r
   @param[in] ExceptResourceHob       Ignore this Resource Descriptor.\r
 \r
-  @return     The pointer to the Resource Descriptor HOB.\r
+  @retval     The pointer to the Resource Descriptor HOB.\r
 **/\r
 EFI_HOB_RESOURCE_DESCRIPTOR *\r
 FindAnotherHighestBelow4GResourceDescriptor (\r
-  IN VOID                        *HobList,\r
-  IN UINTN                       MinimalNeededSize,\r
-  IN EFI_HOB_RESOURCE_DESCRIPTOR *ExceptResourceHob\r
+  IN VOID                         *HobList,\r
+  IN UINTN                        MinimalNeededSize,\r
+  IN EFI_HOB_RESOURCE_DESCRIPTOR  *ExceptResourceHob\r
   )\r
 {\r
-  EFI_PEI_HOB_POINTERS             Hob;\r
-  EFI_HOB_RESOURCE_DESCRIPTOR      *ResourceHob;\r
-  EFI_HOB_RESOURCE_DESCRIPTOR      *ReturnResourceHob;\r
+  EFI_PEI_HOB_POINTERS         Hob;\r
+  EFI_HOB_RESOURCE_DESCRIPTOR  *ResourceHob;\r
+  EFI_HOB_RESOURCE_DESCRIPTOR  *ReturnResourceHob;\r
+\r
   ReturnResourceHob = NULL;\r
 \r
-  for (Hob.Raw = (UINT8 *) HobList; !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB(Hob)) {\r
+  for (Hob.Raw = (UINT8 *)HobList; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {\r
     //\r
     // Skip all HOBs except Resource Descriptor HOBs\r
     //\r
@@ -190,6 +210,7 @@ FindAnotherHighestBelow4GResourceDescriptor (
     if (ResourceHob->ResourceType != EFI_RESOURCE_SYSTEM_MEMORY) {\r
       continue;\r
     }\r
+\r
     if ((ResourceHob->ResourceAttribute & MEMORY_ATTRIBUTE_MASK) != TESTED_MEMORY_ATTRIBUTES) {\r
       continue;\r
     }\r
@@ -200,12 +221,14 @@ FindAnotherHighestBelow4GResourceDescriptor (
     if (ResourceHob == ExceptResourceHob) {\r
       continue;\r
     }\r
+\r
     //\r
     // Skip Resource Descriptor HOBs that are beyond 4G\r
     //\r
     if ((ResourceHob->PhysicalStart + ResourceHob->ResourceLength) > BASE_4GB) {\r
       continue;\r
     }\r
+\r
     //\r
     // Skip Resource Descriptor HOBs that are too small\r
     //\r
@@ -224,12 +247,46 @@ FindAnotherHighestBelow4GResourceDescriptor (
       }\r
     }\r
   }\r
+\r
   return ReturnResourceHob;\r
 }\r
 \r
+/**\r
+  Check the HOB and decide if it is need inside Payload\r
+\r
+  Payload maintainer may make decision which HOB is need or needn't\r
+  Then add the check logic in the function.\r
+\r
+  @param[in] Hob The HOB to check\r
+\r
+  @retval TRUE  If HOB is need inside Payload\r
+  @retval FALSE If HOB is needn't inside Payload\r
+**/\r
+BOOLEAN\r
+IsHobNeed (\r
+  EFI_PEI_HOB_POINTERS  Hob\r
+  )\r
+{\r
+  if (Hob.Header->HobType == EFI_HOB_TYPE_HANDOFF) {\r
+    return FALSE;\r
+  }\r
+\r
+  if (Hob.Header->HobType == EFI_HOB_TYPE_MEMORY_ALLOCATION) {\r
+    if (CompareGuid (&Hob.MemoryAllocationModule->MemoryAllocationHeader.Name, &gEfiHobMemoryAllocModuleGuid)) {\r
+      return FALSE;\r
+    }\r
+  }\r
+\r
+  // Arrive here mean the HOB is need\r
+  return TRUE;\r
+}\r
+\r
 /**\r
   It will build HOBs based on information from bootloaders.\r
 \r
+  @param[in]  BootloaderParameter   The starting memory address of bootloader parameter block.\r
+  @param[out] DxeFv                 The pointer to the DXE FV in memory.\r
+\r
   @retval EFI_SUCCESS        If it completed successfully.\r
   @retval Others             If it failed to build required HOBs.\r
 **/\r
@@ -239,37 +296,38 @@ BuildHobs (
   OUT EFI_FIRMWARE_VOLUME_HEADER  **DxeFv\r
   )\r
 {\r
-  EFI_PEI_HOB_POINTERS             Hob;\r
-  UINTN                            MinimalNeededSize;\r
-  EFI_PHYSICAL_ADDRESS             FreeMemoryBottom;\r
-  EFI_PHYSICAL_ADDRESS             FreeMemoryTop;\r
-  EFI_PHYSICAL_ADDRESS             MemoryBottom;\r
-  EFI_PHYSICAL_ADDRESS             MemoryTop;\r
-  EFI_HOB_RESOURCE_DESCRIPTOR      *PhitResourceHob;\r
-  EFI_HOB_RESOURCE_DESCRIPTOR      *ResourceHob;\r
-  UNIVERSAL_PAYLOAD_EXTRA_DATA     *ExtraData;\r
-  UINT8                            *GuidHob;\r
-  EFI_HOB_FIRMWARE_VOLUME          *FvHob;\r
-\r
-  Hob.Raw = (UINT8 *) BootloaderParameter;\r
+  EFI_PEI_HOB_POINTERS          Hob;\r
+  UINTN                         MinimalNeededSize;\r
+  EFI_PHYSICAL_ADDRESS          FreeMemoryBottom;\r
+  EFI_PHYSICAL_ADDRESS          FreeMemoryTop;\r
+  EFI_PHYSICAL_ADDRESS          MemoryBottom;\r
+  EFI_PHYSICAL_ADDRESS          MemoryTop;\r
+  EFI_HOB_RESOURCE_DESCRIPTOR   *PhitResourceHob;\r
+  EFI_HOB_RESOURCE_DESCRIPTOR   *ResourceHob;\r
+  UNIVERSAL_PAYLOAD_EXTRA_DATA  *ExtraData;\r
+  UINT8                         *GuidHob;\r
+  EFI_HOB_FIRMWARE_VOLUME       *FvHob;\r
+  UNIVERSAL_PAYLOAD_ACPI_TABLE  *AcpiTable;\r
+  ACPI_BOARD_INFO               *AcpiBoardInfo;\r
+\r
+  Hob.Raw           = (UINT8 *)BootloaderParameter;\r
   MinimalNeededSize = FixedPcdGet32 (PcdSystemMemoryUefiRegionSize);\r
 \r
   ASSERT (Hob.Raw != NULL);\r
-  ASSERT ((UINTN) Hob.HandoffInformationTable->EfiFreeMemoryTop == Hob.HandoffInformationTable->EfiFreeMemoryTop);\r
-  ASSERT ((UINTN) Hob.HandoffInformationTable->EfiMemoryTop == Hob.HandoffInformationTable->EfiMemoryTop);\r
-  ASSERT ((UINTN) Hob.HandoffInformationTable->EfiFreeMemoryBottom == Hob.HandoffInformationTable->EfiFreeMemoryBottom);\r
-  ASSERT ((UINTN) Hob.HandoffInformationTable->EfiMemoryBottom == Hob.HandoffInformationTable->EfiMemoryBottom);\r
-\r
+  ASSERT ((UINTN)Hob.HandoffInformationTable->EfiFreeMemoryTop == Hob.HandoffInformationTable->EfiFreeMemoryTop);\r
+  ASSERT ((UINTN)Hob.HandoffInformationTable->EfiMemoryTop == Hob.HandoffInformationTable->EfiMemoryTop);\r
+  ASSERT ((UINTN)Hob.HandoffInformationTable->EfiFreeMemoryBottom == Hob.HandoffInformationTable->EfiFreeMemoryBottom);\r
+  ASSERT ((UINTN)Hob.HandoffInformationTable->EfiMemoryBottom == Hob.HandoffInformationTable->EfiMemoryBottom);\r
 \r
   //\r
   // Try to find Resource Descriptor HOB that contains Hob range EfiMemoryBottom..EfiMemoryTop\r
   //\r
-  PhitResourceHob = FindResourceDescriptorByRange(Hob.Raw, Hob.HandoffInformationTable->EfiMemoryBottom, Hob.HandoffInformationTable->EfiMemoryTop);\r
+  PhitResourceHob = FindResourceDescriptorByRange (Hob.Raw, Hob.HandoffInformationTable->EfiMemoryBottom, Hob.HandoffInformationTable->EfiMemoryTop);\r
   if (PhitResourceHob == NULL) {\r
     //\r
     // Boot loader's Phit Hob is not in an available Resource Descriptor, find another Resource Descriptor for new Phit Hob\r
     //\r
-    ResourceHob = FindAnotherHighestBelow4GResourceDescriptor(Hob.Raw, MinimalNeededSize, NULL);\r
+    ResourceHob = FindAnotherHighestBelow4GResourceDescriptor (Hob.Raw, MinimalNeededSize, NULL);\r
     if (ResourceHob == NULL) {\r
       return EFI_NOT_FOUND;\r
     }\r
@@ -299,7 +357,7 @@ BuildHobs (
     // In the Resource Descriptor HOB contains boot loader Hob, there is no enough free memory size for payload hob\r
     // Find another Resource Descriptor Hob\r
     //\r
-    ResourceHob = FindAnotherHighestBelow4GResourceDescriptor(Hob.Raw, MinimalNeededSize, PhitResourceHob);\r
+    ResourceHob = FindAnotherHighestBelow4GResourceDescriptor (Hob.Raw, MinimalNeededSize, PhitResourceHob);\r
     if (ResourceHob == NULL) {\r
       return EFI_NOT_FOUND;\r
     }\r
@@ -309,7 +367,8 @@ BuildHobs (
     FreeMemoryTop    = ResourceHob->PhysicalStart + ResourceHob->ResourceLength;\r
     MemoryTop        = FreeMemoryTop;\r
   }\r
-  HobConstructor ((VOID *) (UINTN) MemoryBottom, (VOID *) (UINTN) MemoryTop, (VOID *) (UINTN) FreeMemoryBottom, (VOID *) (UINTN) FreeMemoryTop);\r
+\r
+  HobConstructor ((VOID *)(UINTN)MemoryBottom, (VOID *)(UINTN)MemoryTop, (VOID *)(UINTN)FreeMemoryBottom, (VOID *)(UINTN)FreeMemoryTop);\r
   //\r
   // From now on, mHobList will point to the new Hob range.\r
   //\r
@@ -317,64 +376,83 @@ BuildHobs (
   //\r
   // Create an empty FvHob for the DXE FV that contains DXE core.\r
   //\r
-  BuildFvHob ((EFI_PHYSICAL_ADDRESS) 0, 0);\r
+  BuildFvHob ((EFI_PHYSICAL_ADDRESS)0, 0);\r
   //\r
   // Since payload created new Hob, move all hobs except PHIT from boot loader hob list.\r
   //\r
   while (!END_OF_HOB_LIST (Hob)) {\r
-    if (Hob.Header->HobType != EFI_HOB_TYPE_HANDOFF) {\r
+    if (IsHobNeed (Hob)) {\r
       // Add this hob to payload HOB\r
       AddNewHob (&Hob);\r
     }\r
+\r
     Hob.Raw = GET_NEXT_HOB (Hob);\r
   }\r
 \r
   //\r
   // Get DXE FV location\r
   //\r
-  GuidHob = GetFirstGuidHob(&gUniversalPayloadExtraDataGuid);\r
+  GuidHob = GetFirstGuidHob (&gUniversalPayloadExtraDataGuid);\r
   ASSERT (GuidHob != NULL);\r
-  ExtraData = (UNIVERSAL_PAYLOAD_EXTRA_DATA *) GET_GUID_HOB_DATA (GuidHob);\r
+  ExtraData = (UNIVERSAL_PAYLOAD_EXTRA_DATA *)GET_GUID_HOB_DATA (GuidHob);\r
   ASSERT (ExtraData->Count == 1);\r
   ASSERT (AsciiStrCmp (ExtraData->Entry[0].Identifier, "uefi_fv") == 0);\r
 \r
-  *DxeFv = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) ExtraData->Entry[0].Base;\r
+  *DxeFv = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)ExtraData->Entry[0].Base;\r
   ASSERT ((*DxeFv)->FvLength == ExtraData->Entry[0].Size);\r
 \r
+  //\r
+  // Create guid hob for acpi board information\r
+  //\r
+  GuidHob = GetFirstGuidHob (&gUniversalPayloadAcpiTableGuid);\r
+  if (GuidHob != NULL) {\r
+    AcpiTable     = (UNIVERSAL_PAYLOAD_ACPI_TABLE *)GET_GUID_HOB_DATA (GuidHob);\r
+    AcpiBoardInfo = BuildHobFromAcpi ((UINT64)AcpiTable->Rsdp);\r
+    ASSERT (AcpiBoardInfo != NULL);\r
+  }\r
+\r
   //\r
   // Update DXE FV information to first fv hob in the hob list, which\r
   // is the empty FvHob created before.\r
   //\r
-  FvHob = GetFirstHob (EFI_HOB_TYPE_FV);\r
-  FvHob->BaseAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) *DxeFv;\r
-  FvHob->Length = (*DxeFv)->FvLength;\r
+  FvHob              = GetFirstHob (EFI_HOB_TYPE_FV);\r
+  FvHob->BaseAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)*DxeFv;\r
+  FvHob->Length      = (*DxeFv)->FvLength;\r
   return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
   Entry point to the C language phase of UEFI payload.\r
 \r
+  @param[in]   BootloaderParameter    The starting address of bootloader parameter block.\r
+\r
   @retval      It will not return if SUCCESS, and return error when passing bootloader parameter.\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 _ModuleEntryPoint (\r
-  IN UINTN                     BootloaderParameter\r
+  IN UINTN  BootloaderParameter\r
   )\r
 {\r
-  EFI_STATUS                    Status;\r
-  PHYSICAL_ADDRESS              DxeCoreEntryPoint;\r
-  EFI_HOB_HANDOFF_INFO_TABLE    *HandoffHobTable;\r
-  EFI_PEI_HOB_POINTERS          Hob;\r
-  EFI_FIRMWARE_VOLUME_HEADER    *DxeFv;\r
+  EFI_STATUS                  Status;\r
+  PHYSICAL_ADDRESS            DxeCoreEntryPoint;\r
+  EFI_PEI_HOB_POINTERS        Hob;\r
+  EFI_FIRMWARE_VOLUME_HEADER  *DxeFv;\r
 \r
-  mHobList = (VOID *) BootloaderParameter;\r
+  mHobList = (VOID *)BootloaderParameter;\r
   DxeFv    = NULL;\r
   // Call constructor for all libraries\r
   ProcessLibraryConstructorList ();\r
 \r
   DEBUG ((DEBUG_INFO, "Entering Universal Payload...\n"));\r
-  DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof(UINTN)));\r
+  DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof (UINTN)));\r
+\r
+  DEBUG_CODE (\r
+    //\r
+    // Dump the Hobs from boot loader\r
+    //\r
+    PrintHob (mHobList);\r
+    );\r
 \r
   // Initialize floating point operating environment to be compliant with UEFI spec.\r
   InitializeFloatingPointUnits ();\r
@@ -391,10 +469,9 @@ _ModuleEntryPoint (
   // Mask off all legacy 8259 interrupt sources\r
   //\r
   IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF);\r
-  IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE,  0xFF);\r
+  IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF);\r
 \r
-  HandoffHobTable = (EFI_HOB_HANDOFF_INFO_TABLE *) GetFirstHob(EFI_HOB_TYPE_HANDOFF);\r
-  Hob.HandoffInformationTable = HandoffHobTable;\r
+  Hob.HandoffInformationTable = (EFI_HOB_HANDOFF_INFO_TABLE *)GetFirstHob (EFI_HOB_TYPE_HANDOFF);\r
   HandOffToDxeCore (DxeCoreEntryPoint, Hob);\r
 \r
   // Should not get here\r