Discussion:
[edk2] [PATCH 0/2] Fix UEFI payload boot issue on QEMU virtual platform
Maurice Ma
2015-06-01 20:09:17 UTC
Permalink
Fixed coreboot UEFI payload boot issue on QEMU by masking off
all legacy 8259 interrupt sources in PEI phase. It improves the
payload robustness by removing the interrupt masking assumption
required by the original UEFI payload.

Replaced the tabs with whitespaces to conform to the code standard.

Maurice Ma (2):
CorebootModulePkg/CbSupportPei: Mask off all legacy 8259 interrupt
sources
CorebootModulePkg/CbSupportPei: Relace tabs with whitespaces

CorebootModulePkg/CbSupportPei/CbSupportPei.c | 367 ++++++++++++------------
CorebootModulePkg/CbSupportPei/CbSupportPei.h | 3 +-
CorebootModulePkg/CbSupportPei/CbSupportPei.inf | 3 +-
3 files changed, 192 insertions(+), 181 deletions(-)
mode change 100644 => 100755 CorebootModulePkg/CbSupportPei/CbSupportPei.c
--
1.8.3.1


------------------------------------------------------------------------------
Maurice Ma
2015-06-01 20:09:18 UTC
Permalink
The current coreboot UEFI payload has an assumption that all interrupt
sources should be masked off before transferring control to the payload.
However, it is not the case on some platforms, such as QEMU. It will
cause boot failure due to unexpected pending interrupt in the payload.

To resolve it all legacy 8259 interrupt sources need to be masked piror
to the DXE phase. The fix was tested on QEMU virtual platform.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Maurice Ma <***@intel.com>
---
CorebootModulePkg/CbSupportPei/CbSupportPei.c | 13 +++++++++++--
CorebootModulePkg/CbSupportPei/CbSupportPei.h | 3 ++-
CorebootModulePkg/CbSupportPei/CbSupportPei.inf | 3 ++-
3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.c b/CorebootModulePkg/CbSupportPei/CbSupportPei.c
index 148062f..8ec7ba8 100644
--- a/CorebootModulePkg/CbSupportPei/CbSupportPei.c
+++ b/CorebootModulePkg/CbSupportPei/CbSupportPei.c
@@ -2,7 +2,7 @@
This PEIM will parse coreboot table in memory and report resource information into pei core.
This file contains the main entrypoint of the PEIM.

-Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -14,6 +14,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include "CbSupportPei.h"

+#define LEGACY_8259_MASK_REGISTER_MASTER 0x21
+#define LEGACY_8259_MASK_REGISTER_SLAVE 0xA1
+
EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {
{ EfiACPIReclaimMemory, 0x008 },
{ EfiACPIMemoryNVS, 0x004 },
@@ -374,7 +377,13 @@ CbPeiEntryPoint (
CopyMem (pFbInfo, &FbInfo, sizeof (FRAME_BUFFER_INFO));
DEBUG ((EFI_D_ERROR, "Create frame buffer info guid hob\n"));
}
-
+
+ //
+ // Mask off all legacy 8259 interrupt sources
+ //
+ IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF);
+ IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF);
+
return EFI_SUCCESS;
}

diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.h b/CorebootModulePkg/CbSupportPei/CbSupportPei.h
index 5448385..3c9a3fe 100644
--- a/CorebootModulePkg/CbSupportPei/CbSupportPei.h
+++ b/CorebootModulePkg/CbSupportPei/CbSupportPei.h
@@ -1,7 +1,7 @@
/** @file
The header file of Coreboot Support PEIM.

-Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -27,6 +27,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Library/PcdLib.h>
#include <Library/CbParseLib.h>
#include <Library/MtrrLib.h>
+#include <Library/IoLib.h>

#include <Guid/SmramMemoryReserve.h>
#include <Guid/MemoryTypeInformation.h>
diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.inf b/CorebootModulePkg/CbSupportPei/CbSupportPei.inf
index 9328151..b88b6f0 100644
--- a/CorebootModulePkg/CbSupportPei/CbSupportPei.inf
+++ b/CorebootModulePkg/CbSupportPei/CbSupportPei.inf
@@ -4,7 +4,7 @@
# Parses coreboot table in memory and report resource information into pei core. It will install
# the memory as required.
#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@@ -51,6 +51,7 @@
PcdLib
CbParseLib
MtrrLib
+ IoLib

[Guids]
gEfiSmmPeiSmramMemoryReserveGuid
--
1.8.3.1


------------------------------------------------------------------------------
Maurice Ma
2015-06-01 20:09:19 UTC
Permalink
Replace tabs with whitespaces and remove the trailing whitespaces
at the end of lines to conform to the coding style.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Maurice Ma <***@intel.com>
---
CorebootModulePkg/CbSupportPei/CbSupportPei.c | 354 +++++++++++++-------------
1 file changed, 177 insertions(+), 177 deletions(-)
mode change 100644 => 100755 CorebootModulePkg/CbSupportPei/CbSupportPei.c

diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.c b/CorebootModulePkg/CbSupportPei/CbSupportPei.c
old mode 100644
new mode 100755
index 8ec7ba8..b3705fa
--- a/CorebootModulePkg/CbSupportPei/CbSupportPei.c
+++ b/CorebootModulePkg/CbSupportPei/CbSupportPei.c
@@ -1,7 +1,7 @@
/** @file
- This PEIM will parse coreboot table in memory and report resource information into pei core.
+ This PEIM will parse coreboot table in memory and report resource information into pei core.
This file contains the main entrypoint of the PEIM.
-
+
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -18,9 +18,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define LEGACY_8259_MASK_REGISTER_SLAVE 0xA1

EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {
- { EfiACPIReclaimMemory, 0x008 },
- { EfiACPIMemoryNVS, 0x004 },
- { EfiReservedMemoryType, 0x004 },
+ { EfiACPIReclaimMemory, 0x008 },
+ { EfiACPIMemoryNVS, 0x004 },
+ { EfiReservedMemoryType, 0x004 },
{ EfiRuntimeServicesData, 0x080 },
{ EfiRuntimeServicesCode, 0x080 },
{ EfiMaxMemoryType, 0 }
@@ -35,11 +35,11 @@ EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = {
};

/**
- Create memory mapped io resource hob.
-
+ Create memory mapped io resource hob.
+
@param MmioBase Base address of the memory mapped io range
@param MmioSize Length of the memory mapped io range
-
+
**/
VOID
BuildMemoryMappedIoRangeHob (
@@ -47,7 +47,7 @@ BuildMemoryMappedIoRangeHob (
UINT64 MmioSize
)
{
- BuildResourceDescriptorHob (
+ BuildResourceDescriptorHob (
EFI_RESOURCE_MEMORY_MAPPED_IO,
(EFI_RESOURCE_ATTRIBUTE_PRESENT |
EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
@@ -56,12 +56,12 @@ BuildMemoryMappedIoRangeHob (
MmioBase,
MmioSize
);
-
+
BuildMemoryAllocationHob (
MmioBase,
MmioSize,
EfiMemoryMappedIO
- );
+ );
}

/**
@@ -79,21 +79,21 @@ IsFvHeaderValid (
IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader
)
{
- UINT16 Checksum;
-
- // Skip nv storage fv
- if (CompareMem (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem2Guid, sizeof(EFI_GUID)) != 0 ) {
- return FALSE;
- }
-
- if ( (FwVolHeader->Revision != EFI_FVH_REVISION) ||
- (FwVolHeader->Signature != EFI_FVH_SIGNATURE) ||
- (FwVolHeader->FvLength == ((UINTN) -1)) ||
- ((FwVolHeader->HeaderLength & 0x01 ) !=0) ) {
- return FALSE;
- }
-
- Checksum = CalculateCheckSum16 ((UINT16 *) FwVolHeader, FwVolHeader->HeaderLength);
+ UINT16 Checksum;
+
+ // Skip nv storage fv
+ if (CompareMem (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem2Guid, sizeof(EFI_GUID)) != 0 ) {
+ return FALSE;
+ }
+
+ if ( (FwVolHeader->Revision != EFI_FVH_REVISION) ||
+ (FwVolHeader->Signature != EFI_FVH_SIGNATURE) ||
+ (FwVolHeader->FvLength == ((UINTN) -1)) ||
+ ((FwVolHeader->HeaderLength & 0x01 ) !=0) ) {
+ return FALSE;
+ }
+
+ Checksum = CalculateCheckSum16 ((UINT16 *) FwVolHeader, FwVolHeader->HeaderLength);
if (Checksum != 0) {
DEBUG (( DEBUG_ERROR,
"ERROR - Invalid Firmware Volume Header Checksum, change 0x%04x to 0x%04x\r\n",
@@ -102,51 +102,51 @@ IsFvHeaderValid (
return FALSE;
}

- return TRUE;
+ return TRUE;
}

/**
Install FvInfo PPI and create fv hobs for remained fvs
-
+
**/
VOID
CbPeiReportRemainedFvs (
VOID
)
{
- UINT8* TempPtr;
- UINT8* EndPtr;
-
- TempPtr = (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase);
- EndPtr = (UINT8* )(UINTN) (PcdGet32 (PcdPayloadFdMemBase) + PcdGet32 (PcdPayloadFdMemSize));
-
- for (;TempPtr < EndPtr;) {
- if (IsFvHeaderValid ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)) {
- if (TempPtr != (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase)) {
- // Skip the PEI FV
- DEBUG((EFI_D_ERROR, "Found one valid fv : 0x%lx.\n", TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength));
-
- PeiServicesInstallFvInfoPpi (
- NULL,
- (VOID *) (UINTN) TempPtr,
- (UINT32) (UINTN) ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength,
- NULL,
- NULL
- );
- BuildFvHob ((EFI_PHYSICAL_ADDRESS)(UINTN) TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength);
- }
- }
- TempPtr += ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength;
- }
+ UINT8* TempPtr;
+ UINT8* EndPtr;
+
+ TempPtr = (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase);
+ EndPtr = (UINT8* )(UINTN) (PcdGet32 (PcdPayloadFdMemBase) + PcdGet32 (PcdPayloadFdMemSize));
+
+ for (;TempPtr < EndPtr;) {
+ if (IsFvHeaderValid ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)) {
+ if (TempPtr != (UINT8* )(UINTN) PcdGet32 (PcdPayloadFdMemBase)) {
+ // Skip the PEI FV
+ DEBUG((EFI_D_ERROR, "Found one valid fv : 0x%lx.\n", TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength));
+
+ PeiServicesInstallFvInfoPpi (
+ NULL,
+ (VOID *) (UINTN) TempPtr,
+ (UINT32) (UINTN) ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength,
+ NULL,
+ NULL
+ );
+ BuildFvHob ((EFI_PHYSICAL_ADDRESS)(UINTN) TempPtr, ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength);
+ }
+ }
+ TempPtr += ((EFI_FIRMWARE_VOLUME_HEADER* )TempPtr)->FvLength;
+ }
}

/**
This is the entrypoint of PEIM
-
+
@param FileHandle Handle of the file being invoked.
@param PeiServices Describes the list of possible PEI Services.

- @retval EFI_SUCCESS if it completed successfully.
+ @retval EFI_SUCCESS if it completed successfully.
**/
EFI_STATUS
EFIAPI
@@ -155,36 +155,36 @@ CbPeiEntryPoint (
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
- EFI_STATUS Status;
- UINT64 LowMemorySize, HighMemorySize;
- UINT64 PeiMemSize = SIZE_64MB; // 64 MB
- EFI_PHYSICAL_ADDRESS PeiMemBase = 0;
- UINT32 RegEax;
+ EFI_STATUS Status;
+ UINT64 LowMemorySize, HighMemorySize;
+ UINT64 PeiMemSize = SIZE_64MB; // 64 MB
+ EFI_PHYSICAL_ADDRESS PeiMemBase = 0;
+ UINT32 RegEax;
UINT8 PhysicalAddressBits;
VOID* pCbHeader;
VOID* pAcpiTable;
- UINT32 AcpiTableSize;
- VOID* pSmbiosTable;
- UINT32 SmbiosTableSize;
- SYSTEM_TABLE_INFO* pSystemTableInfo;
- FRAME_BUFFER_INFO FbInfo;
- FRAME_BUFFER_INFO* pFbInfo;
- ACPI_BOARD_INFO* pAcpiBoardInfo;
- UINTN PmCtrlRegBase, PmTimerRegBase, ResetRegAddress, ResetValue;
-
- LowMemorySize = 0;
- HighMemorySize = 0;
-
- Status = CbParseMemoryInfo (&LowMemorySize, &HighMemorySize);
- if (EFI_ERROR(Status))
- return Status;
-
- DEBUG((EFI_D_ERROR, "LowMemorySize: 0x%lx.\n", LowMemorySize));
- DEBUG((EFI_D_ERROR, "HighMemorySize: 0x%lx.\n", HighMemorySize));
-
- ASSERT (LowMemorySize > 0);
-
- BuildResourceDescriptorHob (
+ UINT32 AcpiTableSize;
+ VOID* pSmbiosTable;
+ UINT32 SmbiosTableSize;
+ SYSTEM_TABLE_INFO* pSystemTableInfo;
+ FRAME_BUFFER_INFO FbInfo;
+ FRAME_BUFFER_INFO* pFbInfo;
+ ACPI_BOARD_INFO* pAcpiBoardInfo;
+ UINTN PmCtrlRegBase, PmTimerRegBase, ResetRegAddress, ResetValue;
+
+ LowMemorySize = 0;
+ HighMemorySize = 0;
+
+ Status = CbParseMemoryInfo (&LowMemorySize, &HighMemorySize);
+ if (EFI_ERROR(Status))
+ return Status;
+
+ DEBUG((EFI_D_ERROR, "LowMemorySize: 0x%lx.\n", LowMemorySize));
+ DEBUG((EFI_D_ERROR, "HighMemorySize: 0x%lx.\n", HighMemorySize));
+
+ ASSERT (LowMemorySize > 0);
+
+ BuildResourceDescriptorHob (
EFI_RESOURCE_SYSTEM_MEMORY,
(
EFI_RESOURCE_ATTRIBUTE_PRESENT |
@@ -198,9 +198,9 @@ CbPeiEntryPoint (
(EFI_PHYSICAL_ADDRESS)(0),
(UINT64)(0xA0000)
);
-
-
- BuildResourceDescriptorHob (
+
+
+ BuildResourceDescriptorHob (
EFI_RESOURCE_MEMORY_RESERVED,
(
EFI_RESOURCE_ATTRIBUTE_PRESENT |
@@ -214,10 +214,10 @@ CbPeiEntryPoint (
(EFI_PHYSICAL_ADDRESS)(0xA0000),
(UINT64)(0x60000)
);
-
+
BuildResourceDescriptorHob (
- EFI_RESOURCE_SYSTEM_MEMORY,
- (
+ EFI_RESOURCE_SYSTEM_MEMORY,
+ (
EFI_RESOURCE_ATTRIBUTE_PRESENT |
EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
EFI_RESOURCE_ATTRIBUTE_TESTED |
@@ -229,11 +229,11 @@ CbPeiEntryPoint (
(EFI_PHYSICAL_ADDRESS)(0x100000),
(UINT64) (LowMemorySize - 0x100000)
);
-
+
if (HighMemorySize > 0) {
- BuildResourceDescriptorHob (
- EFI_RESOURCE_SYSTEM_MEMORY,
- (
+ BuildResourceDescriptorHob (
+ EFI_RESOURCE_SYSTEM_MEMORY,
+ (
EFI_RESOURCE_ATTRIBUTE_PRESENT |
EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
@@ -243,30 +243,30 @@ CbPeiEntryPoint (
),
(EFI_PHYSICAL_ADDRESS)(0x100000000ULL),
HighMemorySize
- );
- }
-
- //
- // Should be 64k aligned
- //
- PeiMemBase = (LowMemorySize - PeiMemSize) & (~(BASE_64KB - 1));
-
- DEBUG((EFI_D_ERROR, "PeiMemBase: 0x%lx.\n", PeiMemBase));
- DEBUG((EFI_D_ERROR, "PeiMemSize: 0x%lx.\n", PeiMemSize));
-
- Status = PeiServicesInstallPeiMemory (
- PeiMemBase,
- PeiMemSize
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Set cache on the physical memory
- //
- MtrrSetMemoryAttribute (BASE_1MB, LowMemorySize - BASE_1MB, CacheWriteBack);
+ );
+ }
+
+ //
+ // Should be 64k aligned
+ //
+ PeiMemBase = (LowMemorySize - PeiMemSize) & (~(BASE_64KB - 1));
+
+ DEBUG((EFI_D_ERROR, "PeiMemBase: 0x%lx.\n", PeiMemBase));
+ DEBUG((EFI_D_ERROR, "PeiMemSize: 0x%lx.\n", PeiMemSize));
+
+ Status = PeiServicesInstallPeiMemory (
+ PeiMemBase,
+ PeiMemSize
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Set cache on the physical memory
+ //
+ MtrrSetMemoryAttribute (BASE_1MB, LowMemorySize - BASE_1MB, CacheWriteBack);
MtrrSetMemoryAttribute (0, 0xA0000, CacheWriteBack);
-
- //
+
+ //
// Create Memory Type Information HOB
//
BuildGuidDataHob (
@@ -274,58 +274,58 @@ CbPeiEntryPoint (
mDefaultMemoryTypeInformation,
sizeof(mDefaultMemoryTypeInformation)
);
-
- //
- // Create Fv hob
- //
- CbPeiReportRemainedFvs ();
-
- BuildMemoryAllocationHob (
+
+ //
+ // Create Fv hob
+ //
+ CbPeiReportRemainedFvs ();
+
+ BuildMemoryAllocationHob (
PcdGet32 (PcdPayloadFdMemBase),
PcdGet32 (PcdPayloadFdMemSize),
EfiBootServicesData
);
-
+
//
// Build CPU memory space and IO space hob
//
AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL);
if (RegEax >= 0x80000008) {
- AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL);
+ AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL);
PhysicalAddressBits = (UINT8) RegEax;
} else {
PhysicalAddressBits = 36;
}
//
// Create a CPU hand-off information
- //
+ //
BuildCpuHob (PhysicalAddressBits, 16);
-
+
//
// Report Local APIC range
//
BuildMemoryMappedIoRangeHob (0xFEC80000, SIZE_512KB);
-
- //
- // Boot mode
- //
- Status = PeiServicesSetBootMode (BOOT_WITH_FULL_CONFIGURATION);
+
+ //
+ // Boot mode
+ //
+ Status = PeiServicesSetBootMode (BOOT_WITH_FULL_CONFIGURATION);
ASSERT_EFI_ERROR (Status);
-
+
Status = PeiServicesInstallPpi (mPpiBootMode);
ASSERT_EFI_ERROR (Status);
-
+
//
// Set pcd to save the upper coreboot header in case the dxecore will
// erase 0~4k memory
//
pCbHeader = NULL;
- if ((CbParseGetCbHeader (1, &pCbHeader) == RETURN_SUCCESS)
- && ((UINTN)pCbHeader > BASE_4KB)) {
- DEBUG((EFI_D_ERROR, "Actual Coreboot header: %p.\n", pCbHeader));
- PcdSet32 (PcdCbHeaderPointer, (UINT32)(UINTN)pCbHeader);
+ if ((CbParseGetCbHeader (1, &pCbHeader) == RETURN_SUCCESS)
+ && ((UINTN)pCbHeader > BASE_4KB)) {
+ DEBUG((EFI_D_ERROR, "Actual Coreboot header: %p.\n", pCbHeader));
+ PcdSet32 (PcdCbHeaderPointer, (UINT32)(UINTN)pCbHeader);
}
-
+
//
// Create guid hob for system tables like acpi table and smbios table
//
@@ -335,48 +335,48 @@ CbPeiEntryPoint (
SmbiosTableSize = 0;
Status = CbParseAcpiTable (&pAcpiTable, &AcpiTableSize);
if (EFI_ERROR (Status)) {
- // ACPI table is oblidgible
- DEBUG ((EFI_D_ERROR, "Failed to find the required acpi table\n"));
- ASSERT (FALSE);
+ // ACPI table is oblidgible
+ DEBUG ((EFI_D_ERROR, "Failed to find the required acpi table\n"));
+ ASSERT (FALSE);
}
CbParseSmbiosTable (&pSmbiosTable, &SmbiosTableSize);
-
- pSystemTableInfo = NULL;
- pSystemTableInfo = BuildGuidHob (&gUefiSystemTableInfoGuid, sizeof (SYSTEM_TABLE_INFO));
- ASSERT (pSystemTableInfo != NULL);
- pSystemTableInfo->AcpiTableBase = (UINT64) (UINTN)pAcpiTable;
- pSystemTableInfo->AcpiTableSize = AcpiTableSize;
- pSystemTableInfo->SmbiosTableBase = (UINT64) (UINTN)pSmbiosTable;
- pSystemTableInfo->SmbiosTableSize = SmbiosTableSize;
- DEBUG ((EFI_D_ERROR, "Detected Acpi Table at 0x%lx, length 0x%x\n", pSystemTableInfo->AcpiTableBase, pSystemTableInfo->AcpiTableSize));
- DEBUG ((EFI_D_ERROR, "Detected Smbios Table at 0x%lx, length 0x%x\n", pSystemTableInfo->SmbiosTableBase, pSystemTableInfo->SmbiosTableSize));
- DEBUG ((EFI_D_ERROR, "Create system table info guid hob\n"));
-
- //
- // Create guid hob for acpi board information
- //
- Status = CbParseFadtInfo (&PmCtrlRegBase, &PmTimerRegBase, &ResetRegAddress, &ResetValue);
- ASSERT_EFI_ERROR (Status);
- pAcpiBoardInfo = NULL;
- pAcpiBoardInfo = BuildGuidHob (&gUefiAcpiBoardInfoGuid, sizeof (ACPI_BOARD_INFO));
- ASSERT (pAcpiBoardInfo != NULL);
- pAcpiBoardInfo->PmCtrlRegBase = (UINT64)PmCtrlRegBase;
- pAcpiBoardInfo->PmTimerRegBase = (UINT64)PmTimerRegBase;
- pAcpiBoardInfo->ResetRegAddress = (UINT64)ResetRegAddress;
- pAcpiBoardInfo->ResetValue = (UINT8)ResetValue;
- DEBUG ((EFI_D_ERROR, "Create acpi board info guid hob\n"));
-
- //
- // Create guid hob for frame buffer information
- //
- ZeroMem (&FbInfo, sizeof (FRAME_BUFFER_INFO));
- Status = CbParseFbInfo (&FbInfo);
- if (!EFI_ERROR (Status)) {
- pFbInfo = BuildGuidHob (&gUefiFrameBufferInfoGuid, sizeof (FRAME_BUFFER_INFO));
- ASSERT (pSystemTableInfo != NULL);
- CopyMem (pFbInfo, &FbInfo, sizeof (FRAME_BUFFER_INFO));
- DEBUG ((EFI_D_ERROR, "Create frame buffer info guid hob\n"));
- }
+
+ pSystemTableInfo = NULL;
+ pSystemTableInfo = BuildGuidHob (&gUefiSystemTableInfoGuid, sizeof (SYSTEM_TABLE_INFO));
+ ASSERT (pSystemTableInfo != NULL);
+ pSystemTableInfo->AcpiTableBase = (UINT64) (UINTN)pAcpiTable;
+ pSystemTableInfo->AcpiTableSize = AcpiTableSize;
+ pSystemTableInfo->SmbiosTableBase = (UINT64) (UINTN)pSmbiosTable;
+ pSystemTableInfo->SmbiosTableSize = SmbiosTableSize;
+ DEBUG ((EFI_D_ERROR, "Detected Acpi Table at 0x%lx, length 0x%x\n", pSystemTableInfo->AcpiTableBase, pSystemTableInfo->AcpiTableSize));
+ DEBUG ((EFI_D_ERROR, "Detected Smbios Table at 0x%lx, length 0x%x\n", pSystemTableInfo->SmbiosTableBase, pSystemTableInfo->SmbiosTableSize));
+ DEBUG ((EFI_D_ERROR, "Create system table info guid hob\n"));
+
+ //
+ // Create guid hob for acpi board information
+ //
+ Status = CbParseFadtInfo (&PmCtrlRegBase, &PmTimerRegBase, &ResetRegAddress, &ResetValue);
+ ASSERT_EFI_ERROR (Status);
+ pAcpiBoardInfo = NULL;
+ pAcpiBoardInfo = BuildGuidHob (&gUefiAcpiBoardInfoGuid, sizeof (ACPI_BOARD_INFO));
+ ASSERT (pAcpiBoardInfo != NULL);
+ pAcpiBoardInfo->PmCtrlRegBase = (UINT64)PmCtrlRegBase;
+ pAcpiBoardInfo->PmTimerRegBase = (UINT64)PmTimerRegBase;
+ pAcpiBoardInfo->ResetRegAddress = (UINT64)ResetRegAddress;
+ pAcpiBoardInfo->ResetValue = (UINT8)ResetValue;
+ DEBUG ((EFI_D_ERROR, "Create acpi board info guid hob\n"));
+
+ //
+ // Create guid hob for frame buffer information
+ //
+ ZeroMem (&FbInfo, sizeof (FRAME_BUFFER_INFO));
+ Status = CbParseFbInfo (&FbInfo);
+ if (!EFI_ERROR (Status)) {
+ pFbInfo = BuildGuidHob (&gUefiFrameBufferInfoGuid, sizeof (FRAME_BUFFER_INFO));
+ ASSERT (pSystemTableInfo != NULL);
+ CopyMem (pFbInfo, &FbInfo, sizeof (FRAME_BUFFER_INFO));
+ DEBUG ((EFI_D_ERROR, "Create frame buffer info guid hob\n"));
+ }

//
// Mask off all legacy 8259 interrupt sources
--
1.8.3.1


------------------------------------------------------------------------------
Loading...