]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CorebootModulePkg/CbSupportPei/CbSupportPei.c
CorebootPayloadPkg DSC: Add build option to disable deprecated APIs
[mirror_edk2.git] / CorebootModulePkg / CbSupportPei / CbSupportPei.c
old mode 100644 (file)
new mode 100755 (executable)
index 148062f..9d58034
@@ -1,8 +1,8 @@
 /** @file\r
-  This PEIM will parse coreboot table in memory and report resource information into pei core. \r
+  This PEIM will parse coreboot table in memory and report resource information into pei core.\r
   This file contains the main entrypoint of the PEIM.\r
-  \r
-Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>\r
+\r
+Copyright (c) 2014 - 2016, 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
@@ -14,12 +14,15 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 #include "CbSupportPei.h"\r
 \r
+#define LEGACY_8259_MASK_REGISTER_MASTER  0x21\r
+#define LEGACY_8259_MASK_REGISTER_SLAVE   0xA1\r
+\r
 EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {\r
-  { EfiACPIReclaimMemory,   0x008 },     \r
-  { EfiACPIMemoryNVS,       0x004 },     \r
-  { EfiReservedMemoryType,  0x004 },     \r
-  { EfiRuntimeServicesData, 0x080 },\r
-  { EfiRuntimeServicesCode, 0x080 },\r
+  { EfiACPIReclaimMemory,   FixedPcdGet32 (PcdMemoryTypeEfiACPIReclaimMemory) },\r
+  { EfiACPIMemoryNVS,       FixedPcdGet32 (PcdMemoryTypeEfiACPIMemoryNVS) },\r
+  { EfiReservedMemoryType,  FixedPcdGet32 (PcdMemoryTypeEfiReservedMemoryType) },\r
+  { EfiRuntimeServicesData, FixedPcdGet32 (PcdMemoryTypeEfiRuntimeServicesData) },\r
+  { EfiRuntimeServicesCode, FixedPcdGet32 (PcdMemoryTypeEfiRuntimeServicesCode) },\r
   { EfiMaxMemoryType,       0     }\r
 };\r
 \r
@@ -32,11 +35,11 @@ EFI_PEI_PPI_DESCRIPTOR   mPpiBootMode[] = {
 };\r
 \r
 /**\r
-  Create memory mapped io resource hob. \r
-  \r
+  Create memory mapped io resource hob.\r
+\r
   @param  MmioBase    Base address of the memory mapped io range\r
   @param  MmioSize    Length of the memory mapped io range\r
-  \r
+\r
 **/\r
 VOID\r
 BuildMemoryMappedIoRangeHob (\r
@@ -44,7 +47,7 @@ BuildMemoryMappedIoRangeHob (
   UINT64                      MmioSize\r
   )\r
 {\r
-       BuildResourceDescriptorHob (\r
+  BuildResourceDescriptorHob (\r
     EFI_RESOURCE_MEMORY_MAPPED_IO,\r
     (EFI_RESOURCE_ATTRIBUTE_PRESENT    |\r
     EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
@@ -53,12 +56,12 @@ BuildMemoryMappedIoRangeHob (
     MmioBase,\r
     MmioSize\r
     );\r
-    \r
+\r
   BuildMemoryAllocationHob (\r
     MmioBase,\r
     MmioSize,\r
     EfiMemoryMappedIO\r
-    ); \r
+    );\r
 }\r
 \r
 /**\r
@@ -76,21 +79,21 @@ IsFvHeaderValid (
   IN EFI_FIRMWARE_VOLUME_HEADER    *FwVolHeader\r
   )\r
 {\r
-       UINT16 Checksum;\r
-       \r
-       // Skip nv storage fv\r
-       if (CompareMem (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem2Guid, sizeof(EFI_GUID)) != 0 ) {\r
-         return FALSE;\r
-       }\r
-       \r
-       if ( (FwVolHeader->Revision != EFI_FVH_REVISION)   ||\r
-          (FwVolHeader->Signature != EFI_FVH_SIGNATURE) ||\r
-          (FwVolHeader->FvLength == ((UINTN) -1))       ||\r
-          ((FwVolHeader->HeaderLength & 0x01 ) !=0) )  {\r
-               return FALSE;\r
-       }\r
-       \r
-       Checksum = CalculateCheckSum16 ((UINT16 *) FwVolHeader, FwVolHeader->HeaderLength);\r
+  UINT16 Checksum;\r
+\r
+  // Skip nv storage fv\r
+  if (CompareMem (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem2Guid, sizeof(EFI_GUID)) != 0 ) {\r
+    return FALSE;\r
+  }\r
+\r
+  if ( (FwVolHeader->Revision != EFI_FVH_REVISION)   ||\r
+     (FwVolHeader->Signature != EFI_FVH_SIGNATURE) ||\r
+     (FwVolHeader->FvLength == ((UINTN) -1))       ||\r
+     ((FwVolHeader->HeaderLength & 0x01 ) !=0) )  {\r
+    return FALSE;\r
+  }\r
+\r
+  Checksum = CalculateCheckSum16 ((UINT16 *) FwVolHeader, FwVolHeader->HeaderLength);\r
   if (Checksum != 0) {\r
     DEBUG (( DEBUG_ERROR,\r
               "ERROR - Invalid Firmware Volume Header Checksum, change 0x%04x to 0x%04x\r\n",\r
@@ -99,51 +102,51 @@ IsFvHeaderValid (
     return FALSE;\r
   }\r
 \r
-  return TRUE; \r
+  return TRUE;\r
 }\r
 \r
 /**\r
   Install FvInfo PPI and create fv hobs for remained fvs\r
-  \r
+\r
 **/\r
 VOID\r
 CbPeiReportRemainedFvs (\r
   VOID\r
   )\r
 {\r
-       UINT8*  TempPtr;\r
-       UINT8*  EndPtr;\r
-       \r
-       TempPtr = (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase);\r
-       EndPtr = (UINT8* )(UINTN) (PcdGet32 (PcdPayloadFdMemBase) + PcdGet32 (PcdPayloadFdMemSize));\r
-       \r
-       for (;TempPtr < EndPtr;) {\r
-               if (IsFvHeaderValid ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)) {\r
-                       if (TempPtr != (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase))  {\r
-                               // Skip the PEI FV\r
-                               DEBUG((EFI_D_ERROR, "Found one valid fv : 0x%lx.\n", TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength));      \r
-                               \r
-                               PeiServicesInstallFvInfoPpi (\r
-                           NULL,\r
-                           (VOID *) (UINTN) TempPtr,\r
-                           (UINT32) (UINTN) ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength,\r
-                           NULL,\r
-                           NULL\r
-                           );\r
-                               BuildFvHob ((EFI_PHYSICAL_ADDRESS)(UINTN) TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength);                          \r
-                       }                               \r
-               }\r
-               TempPtr += ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength;           \r
-       }       \r
+  UINT8*  TempPtr;\r
+  UINT8*  EndPtr;\r
+\r
+  TempPtr = (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase);\r
+  EndPtr = (UINT8* )(UINTN) (PcdGet32 (PcdPayloadFdMemBase) + PcdGet32 (PcdPayloadFdMemSize));\r
+\r
+  for (;TempPtr < EndPtr;) {\r
+    if (IsFvHeaderValid ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)) {\r
+      if (TempPtr != (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase))  {\r
+        // Skip the PEI FV\r
+        DEBUG((EFI_D_ERROR, "Found one valid fv : 0x%lx.\n", TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength));\r
+\r
+        PeiServicesInstallFvInfoPpi (\r
+          NULL,\r
+          (VOID *) (UINTN) TempPtr,\r
+          (UINT32) (UINTN) ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength,\r
+          NULL,\r
+          NULL\r
+          );\r
+        BuildFvHob ((EFI_PHYSICAL_ADDRESS)(UINTN) TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength);\r
+      }\r
+    }\r
+    TempPtr += ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength;\r
+  }\r
 }\r
 \r
 /**\r
   This is the entrypoint of PEIM\r
-  \r
+\r
   @param  FileHandle  Handle of the file being invoked.\r
   @param  PeiServices Describes the list of possible PEI Services.\r
 \r
-  @retval EFI_SUCCESS if it completed successfully.  \r
+  @retval EFI_SUCCESS if it completed successfully.\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
@@ -152,41 +155,47 @@ CbPeiEntryPoint (
   IN CONST EFI_PEI_SERVICES     **PeiServices\r
   )\r
 {\r
-       EFI_STATUS Status;\r
-       UINT64 LowMemorySize, HighMemorySize;\r
-       UINT64 PeiMemSize = SIZE_64MB;   // 64 MB\r
-       EFI_PHYSICAL_ADDRESS PeiMemBase = 0;\r
-       UINT32               RegEax;\r
+  EFI_STATUS Status;\r
+  UINT64 LowMemorySize, HighMemorySize;\r
+  UINT64 PeiMemSize = SIZE_64MB;   // 64 MB\r
+  EFI_PHYSICAL_ADDRESS PeiMemBase = 0;\r
+  UINT32               RegEax;\r
   UINT8                PhysicalAddressBits;\r
   VOID*                pCbHeader;\r
   VOID*                pAcpiTable;\r
-       UINT32               AcpiTableSize;\r
-       VOID*                pSmbiosTable;\r
-       UINT32               SmbiosTableSize;\r
-       SYSTEM_TABLE_INFO*   pSystemTableInfo;\r
-       FRAME_BUFFER_INFO    FbInfo;\r
-       FRAME_BUFFER_INFO*   pFbInfo;\r
-       ACPI_BOARD_INFO*     pAcpiBoardInfo;\r
-       UINTN                PmCtrlRegBase, PmTimerRegBase, ResetRegAddress, ResetValue;\r
-       \r
-       LowMemorySize = 0;\r
-       HighMemorySize = 0;\r
-       \r
-       Status = CbParseMemoryInfo (&LowMemorySize, &HighMemorySize);\r
-       if (EFI_ERROR(Status)) \r
-               return Status;\r
-               \r
-       DEBUG((EFI_D_ERROR, "LowMemorySize: 0x%lx.\n", LowMemorySize));\r
-       DEBUG((EFI_D_ERROR, "HighMemorySize: 0x%lx.\n", HighMemorySize));\r
-       \r
-       ASSERT (LowMemorySize > 0);\r
-       \r
-       BuildResourceDescriptorHob (            \r
+  UINT32               AcpiTableSize;\r
+  VOID*                pSmbiosTable;\r
+  UINT32               SmbiosTableSize;\r
+  SYSTEM_TABLE_INFO*   pSystemTableInfo;\r
+  FRAME_BUFFER_INFO    FbInfo;\r
+  FRAME_BUFFER_INFO*   pFbInfo;\r
+  ACPI_BOARD_INFO*     pAcpiBoardInfo;\r
+  UINTN                PmCtrlRegBase, PmTimerRegBase, ResetRegAddress, ResetValue;\r
+  UINTN                PmEvtBase;\r
+  UINTN                PmGpeEnBase;\r
+\r
+  LowMemorySize = 0;\r
+  HighMemorySize = 0;\r
+\r
+  Status = CbParseMemoryInfo (&LowMemorySize, &HighMemorySize);\r
+  if (EFI_ERROR(Status))\r
+    return Status;\r
+\r
+  DEBUG((EFI_D_ERROR, "LowMemorySize: 0x%lx.\n", LowMemorySize));\r
+  DEBUG((EFI_D_ERROR, "HighMemorySize: 0x%lx.\n", HighMemorySize));\r
+\r
+  ASSERT (LowMemorySize > 0);\r
+\r
+  //\r
+  // Report lower 640KB of RAM. Attribute EFI_RESOURCE_ATTRIBUTE_TESTED  \r
+ // is intentionally omitted to prevent erasing of the coreboot header  \r
+ // record before it is processed by CbParseMemoryInfo.\r
+  //\r
+  BuildResourceDescriptorHob (\r
     EFI_RESOURCE_SYSTEM_MEMORY,\r
     (\r
     EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
     EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
-    EFI_RESOURCE_ATTRIBUTE_TESTED |\r
     EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
     EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |\r
     EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |\r
@@ -195,9 +204,9 @@ CbPeiEntryPoint (
     (EFI_PHYSICAL_ADDRESS)(0),\r
     (UINT64)(0xA0000)\r
     );\r
-    \r
-    \r
-  BuildResourceDescriptorHob (            \r
+\r
+\r
+  BuildResourceDescriptorHob (\r
     EFI_RESOURCE_MEMORY_RESERVED,\r
     (\r
     EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
@@ -211,10 +220,10 @@ CbPeiEntryPoint (
     (EFI_PHYSICAL_ADDRESS)(0xA0000),\r
     (UINT64)(0x60000)\r
     );\r
-    \r
+\r
    BuildResourceDescriptorHob (\r
-         EFI_RESOURCE_SYSTEM_MEMORY,\r
-         (\r
+    EFI_RESOURCE_SYSTEM_MEMORY,\r
+    (\r
        EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
        EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
        EFI_RESOURCE_ATTRIBUTE_TESTED |\r
@@ -226,11 +235,11 @@ CbPeiEntryPoint (
     (EFI_PHYSICAL_ADDRESS)(0x100000),\r
     (UINT64) (LowMemorySize - 0x100000)\r
     );\r
-    \r
+\r
   if (HighMemorySize > 0) {\r
-       BuildResourceDescriptorHob (\r
-         EFI_RESOURCE_SYSTEM_MEMORY,\r
-         (\r
+    BuildResourceDescriptorHob (\r
+    EFI_RESOURCE_SYSTEM_MEMORY,\r
+    (\r
        EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
        EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
        EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
@@ -240,30 +249,30 @@ CbPeiEntryPoint (
     ),\r
     (EFI_PHYSICAL_ADDRESS)(0x100000000ULL),\r
     HighMemorySize\r
-    );         \r
-  }  \r
-       \r
-       //\r
-       // Should be 64k aligned\r
-       //\r
-       PeiMemBase = (LowMemorySize - PeiMemSize) & (~(BASE_64KB - 1));\r
-       \r
-       DEBUG((EFI_D_ERROR, "PeiMemBase: 0x%lx.\n", PeiMemBase));\r
-       DEBUG((EFI_D_ERROR, "PeiMemSize: 0x%lx.\n", PeiMemSize)); \r
-   \r
-       Status = PeiServicesInstallPeiMemory (\r
-              PeiMemBase,            \r
-              PeiMemSize\r
-              );\r
-       ASSERT_EFI_ERROR (Status);      \r
-       \r
-       //\r
-       // Set cache on the physical memory\r
-       //      \r
-       MtrrSetMemoryAttribute (BASE_1MB, LowMemorySize - BASE_1MB, CacheWriteBack);\r
+    );\r
+  }\r
+\r
+  //\r
+  // Should be 64k aligned\r
+  //\r
+  PeiMemBase = (LowMemorySize - PeiMemSize) & (~(BASE_64KB - 1));\r
+\r
+  DEBUG((EFI_D_ERROR, "PeiMemBase: 0x%lx.\n", PeiMemBase));\r
+  DEBUG((EFI_D_ERROR, "PeiMemSize: 0x%lx.\n", PeiMemSize));\r
+\r
+  Status = PeiServicesInstallPeiMemory (\r
+         PeiMemBase,\r
+         PeiMemSize\r
+         );\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  //\r
+  // Set cache on the physical memory\r
+  //\r
+  MtrrSetMemoryAttribute (BASE_1MB, LowMemorySize - BASE_1MB, CacheWriteBack);\r
   MtrrSetMemoryAttribute (0, 0xA0000, CacheWriteBack);\r
-       \r
-       //\r
+\r
+  //\r
   // Create Memory Type Information HOB\r
   //\r
   BuildGuidDataHob (\r
@@ -271,58 +280,59 @@ CbPeiEntryPoint (
     mDefaultMemoryTypeInformation,\r
     sizeof(mDefaultMemoryTypeInformation)\r
     );\r
-       \r
-       //\r
-       // Create Fv hob\r
-       //\r
-       CbPeiReportRemainedFvs ();      \r
-       \r
-       BuildMemoryAllocationHob (\r
+\r
+  //\r
+  // Create Fv hob\r
+  //\r
+  CbPeiReportRemainedFvs ();\r
+\r
+  BuildMemoryAllocationHob (\r
     PcdGet32 (PcdPayloadFdMemBase),\r
     PcdGet32 (PcdPayloadFdMemSize),\r
     EfiBootServicesData\r
     );\r
-       \r
+\r
   //\r
   // Build CPU memory space and IO space hob\r
   //\r
   AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL);\r
   if (RegEax >= 0x80000008) {\r
-    AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL); \r
+    AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL);\r
     PhysicalAddressBits = (UINT8) RegEax;\r
   } else {\r
     PhysicalAddressBits  = 36;\r
   }\r
   //\r
   // Create a CPU hand-off information\r
-  // \r
+  //\r
   BuildCpuHob (PhysicalAddressBits, 16);\r
-  \r
+\r
   //\r
   // Report Local APIC range\r
   //\r
   BuildMemoryMappedIoRangeHob (0xFEC80000, SIZE_512KB);\r
-      \r
-       //\r
-       // Boot mode\r
-       //\r
-       Status = PeiServicesSetBootMode (BOOT_WITH_FULL_CONFIGURATION);\r
+\r
+  //\r
+  // Boot mode\r
+  //\r
+  Status = PeiServicesSetBootMode (BOOT_WITH_FULL_CONFIGURATION);\r
   ASSERT_EFI_ERROR (Status);\r
-  \r
+\r
   Status = PeiServicesInstallPpi (mPpiBootMode);\r
   ASSERT_EFI_ERROR (Status);\r
-  \r
+\r
    //\r
   // Set pcd to save the upper coreboot header in case the dxecore will\r
   // erase 0~4k memory\r
   //\r
   pCbHeader = NULL;\r
-  if ((CbParseGetCbHeader (1, &pCbHeader) == RETURN_SUCCESS) \r
-       && ((UINTN)pCbHeader > BASE_4KB)) {\r
-       DEBUG((EFI_D_ERROR, "Actual Coreboot header: %p.\n", pCbHeader));       \r
-       PcdSet32 (PcdCbHeaderPointer, (UINT32)(UINTN)pCbHeader);\r
+  if ((CbParseGetCbHeader (1, &pCbHeader) == RETURN_SUCCESS)\r
+    && ((UINTN)pCbHeader > BASE_4KB)) {\r
+    DEBUG((EFI_D_ERROR, "Actual Coreboot header: %p.\n", pCbHeader));\r
+    Status = PcdSet32S (PcdCbHeaderPointer, (UINT32)(UINTN)pCbHeader);\r
+    ASSERT_EFI_ERROR (Status);\r
   }\r
-  \r
+\r
   //\r
   // Create guid hob for system tables like acpi table and smbios table\r
   //\r
@@ -332,49 +342,57 @@ CbPeiEntryPoint (
   SmbiosTableSize = 0;\r
   Status = CbParseAcpiTable (&pAcpiTable, &AcpiTableSize);\r
   if (EFI_ERROR (Status)) {\r
-       // ACPI table is oblidgible \r
-       DEBUG ((EFI_D_ERROR, "Failed to find the required acpi table\n"));\r
-       ASSERT (FALSE);\r
+    // ACPI table is oblidgible\r
+    DEBUG ((EFI_D_ERROR, "Failed to find the required acpi table\n"));\r
+    ASSERT (FALSE);\r
   }\r
   CbParseSmbiosTable (&pSmbiosTable, &SmbiosTableSize);\r
-  \r
-       pSystemTableInfo = NULL;\r
-       pSystemTableInfo = BuildGuidHob (&gUefiSystemTableInfoGuid, sizeof (SYSTEM_TABLE_INFO));\r
-       ASSERT (pSystemTableInfo != NULL);\r
-       pSystemTableInfo->AcpiTableBase = (UINT64) (UINTN)pAcpiTable;\r
-       pSystemTableInfo->AcpiTableSize = AcpiTableSize;        \r
-       pSystemTableInfo->SmbiosTableBase = (UINT64) (UINTN)pSmbiosTable;\r
-       pSystemTableInfo->SmbiosTableSize = SmbiosTableSize;\r
-       DEBUG ((EFI_D_ERROR, "Detected Acpi Table at 0x%lx, length 0x%x\n", pSystemTableInfo->AcpiTableBase, pSystemTableInfo->AcpiTableSize)); \r
-       DEBUG ((EFI_D_ERROR, "Detected Smbios Table at 0x%lx, length 0x%x\n", pSystemTableInfo->SmbiosTableBase, pSystemTableInfo->SmbiosTableSize));   \r
-       DEBUG ((EFI_D_ERROR, "Create system table info guid hob\n"));\r
-       \r
-       //\r
-       // Create guid hob for acpi board information\r
-       //      \r
-       Status = CbParseFadtInfo (&PmCtrlRegBase, &PmTimerRegBase, &ResetRegAddress, &ResetValue);\r
-       ASSERT_EFI_ERROR (Status);\r
-       pAcpiBoardInfo = NULL;\r
-       pAcpiBoardInfo = BuildGuidHob (&gUefiAcpiBoardInfoGuid, sizeof (ACPI_BOARD_INFO));\r
-       ASSERT (pAcpiBoardInfo != NULL);\r
-       pAcpiBoardInfo->PmCtrlRegBase = (UINT64)PmCtrlRegBase;\r
-       pAcpiBoardInfo->PmTimerRegBase = (UINT64)PmTimerRegBase;\r
-       pAcpiBoardInfo->ResetRegAddress = (UINT64)ResetRegAddress;\r
-       pAcpiBoardInfo->ResetValue = (UINT8)ResetValue;         \r
-       DEBUG ((EFI_D_ERROR, "Create acpi board info guid hob\n"));\r
-       \r
-       //\r
-       // Create guid hob for frame buffer information\r
-       //\r
-       ZeroMem (&FbInfo, sizeof (FRAME_BUFFER_INFO)); \r
-       Status = CbParseFbInfo (&FbInfo);\r
-       if (!EFI_ERROR (Status)) {\r
-               pFbInfo = BuildGuidHob (&gUefiFrameBufferInfoGuid, sizeof (FRAME_BUFFER_INFO));\r
-               ASSERT (pSystemTableInfo != NULL);\r
-               CopyMem (pFbInfo, &FbInfo, sizeof (FRAME_BUFFER_INFO)); \r
-               DEBUG ((EFI_D_ERROR, "Create frame buffer info guid hob\n"));           \r
-       }\r
-         \r
+\r
+  pSystemTableInfo = NULL;\r
+  pSystemTableInfo = BuildGuidHob (&gUefiSystemTableInfoGuid, sizeof (SYSTEM_TABLE_INFO));\r
+  ASSERT (pSystemTableInfo != NULL);\r
+  pSystemTableInfo->AcpiTableBase = (UINT64) (UINTN)pAcpiTable;\r
+  pSystemTableInfo->AcpiTableSize = AcpiTableSize;\r
+  pSystemTableInfo->SmbiosTableBase = (UINT64) (UINTN)pSmbiosTable;\r
+  pSystemTableInfo->SmbiosTableSize = SmbiosTableSize;\r
+  DEBUG ((EFI_D_ERROR, "Detected Acpi Table at 0x%lx, length 0x%x\n", pSystemTableInfo->AcpiTableBase, pSystemTableInfo->AcpiTableSize));\r
+  DEBUG ((EFI_D_ERROR, "Detected Smbios Table at 0x%lx, length 0x%x\n", pSystemTableInfo->SmbiosTableBase, pSystemTableInfo->SmbiosTableSize));\r
+  DEBUG ((EFI_D_ERROR, "Create system table info guid hob\n"));\r
+\r
+  //\r
+  // Create guid hob for acpi board information\r
+  //\r
+  Status = CbParseFadtInfo (&PmCtrlRegBase, &PmTimerRegBase, &ResetRegAddress, &ResetValue, &PmEvtBase, &PmGpeEnBase);\r
+  ASSERT_EFI_ERROR (Status);\r
+  pAcpiBoardInfo = NULL;\r
+  pAcpiBoardInfo = BuildGuidHob (&gUefiAcpiBoardInfoGuid, sizeof (ACPI_BOARD_INFO));\r
+  ASSERT (pAcpiBoardInfo != NULL);\r
+  pAcpiBoardInfo->PmCtrlRegBase = (UINT64)PmCtrlRegBase;\r
+  pAcpiBoardInfo->PmTimerRegBase = (UINT64)PmTimerRegBase;\r
+  pAcpiBoardInfo->ResetRegAddress = (UINT64)ResetRegAddress;\r
+  pAcpiBoardInfo->ResetValue = (UINT8)ResetValue;\r
+  pAcpiBoardInfo->PmEvtBase = (UINT64)PmEvtBase;\r
+  pAcpiBoardInfo->PmGpeEnBase = (UINT64)PmGpeEnBase;\r
+  DEBUG ((EFI_D_ERROR, "Create acpi board info guid hob\n"));\r
+\r
+  //\r
+  // Create guid hob for frame buffer information\r
+  //\r
+  ZeroMem (&FbInfo, sizeof (FRAME_BUFFER_INFO));\r
+  Status = CbParseFbInfo (&FbInfo);\r
+  if (!EFI_ERROR (Status)) {\r
+    pFbInfo = BuildGuidHob (&gUefiFrameBufferInfoGuid, sizeof (FRAME_BUFFER_INFO));\r
+    ASSERT (pSystemTableInfo != NULL);\r
+    CopyMem (pFbInfo, &FbInfo, sizeof (FRAME_BUFFER_INFO));\r
+    DEBUG ((EFI_D_ERROR, "Create frame buffer info guid hob\n"));\r
+  }\r
+\r
+  //\r
+  // 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
+\r
   return EFI_SUCCESS;\r
 }\r
 \r