Signed-off-by: Guo Dong <guo.d...@intel.com> --- UefiPayloadPkg/Include/Library/BlParseLib.h | 25 +++++++++++++++++++++---- UefiPayloadPkg/Library/CbParseLib/CbParseLib.c | 35 ++++++++++++++++++++++++++++------- UefiPayloadPkg/Library/SblParseLib/SblParseLib.c | 39 ++++++++++++++++++++++++++++++++++----- UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c | 32 ++++++++++++-------------------- UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h | 1 - 5 files changed, 95 insertions(+), 37 deletions(-)
diff --git a/UefiPayloadPkg/Include/Library/BlParseLib.h b/UefiPayloadPkg/Include/Library/BlParseLib.h index 20a526d15c..8058c1a17b 100644 --- a/UefiPayloadPkg/Include/Library/BlParseLib.h +++ b/UefiPayloadPkg/Include/Library/BlParseLib.h @@ -10,6 +10,8 @@ #include <Guid/GraphicsInfoHob.h> #include <Guid/MemoryMapInfoGuid.h> #include <Guid/SerialPortInfoGuid.h> +#include <UniversalPayload/AcpiTable.h> +#include <UniversalPayload/SmbiosTable.h> #include <Guid/SystemTableInfoGuid.h> #include <Guid/AcpiBoardInfoGuid.h> @@ -56,9 +58,9 @@ ParseMemoryInfo ( ); /** - Acquire acpi table and smbios table from slim bootloader + Acquire smbios table from slim bootloader - @param SystemTableInfo Pointer to the system table info + @param SystemTableInfo Pointer to the SMBIOS table info @retval RETURN_SUCCESS Successfully find out the tables. @retval RETURN_NOT_FOUND Failed to find the tables. @@ -66,8 +68,23 @@ ParseMemoryInfo ( **/ RETURN_STATUS EFIAPI -ParseSystemTable ( - OUT SYSTEM_TABLE_INFO *SystemTableInfo +ParseSmbiosTable ( + OUT UNIVERSAL_PAYLOAD_SMBIOS_TABLE *SmbiosTable + ); + +/** + Acquire acpi table from slim bootloader + + @param AcpiTableHob Pointer to the ACPI table info + + @retval RETURN_SUCCESS Successfully find out the tables. + @retval RETURN_NOT_FOUND Failed to find the tables. + +**/ +RETURN_STATUS +EFIAPI +ParseAcpiTableInfo ( + OUT UNIVERSAL_PAYLOAD_ACPI_TABLE *AcpiTableHob ); diff --git a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c index 4e23cff50e..2ed771507e 100644 --- a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c +++ b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c @@ -408,7 +408,7 @@ ParseMemoryInfo ( /** - Acquire acpi table and smbios table from coreboot + Acquire smbios table from coreboot @param SystemTableInfo Pointer to the system table info @@ -418,8 +418,8 @@ ParseMemoryInfo ( **/ RETURN_STATUS EFIAPI -ParseSystemTable ( - OUT SYSTEM_TABLE_INFO *SystemTableInfo +ParseSmbiosTable ( + OUT UNIVERSAL_PAYLOAD_SMBIOS_TABLE *SmbiosTable ) { EFI_STATUS Status; @@ -430,15 +430,36 @@ ParseSystemTable ( if (EFI_ERROR (Status)) { return EFI_NOT_FOUND; } - SystemTableInfo->SmbiosTableBase = (UINT64) (UINTN)MemTable; - SystemTableInfo->SmbiosTableSize = MemTableSize; + SmbiosTable->SmBiosEntryPoint = (UINT64) (UINTN)MemTable; + + return RETURN_SUCCESS; +} + +/** + Acquire acpi table from slim coreboot + + @param AcpiTableHob Pointer to the ACPI table info + @retval RETURN_SUCCESS Successfully find out the tables. + @retval RETURN_NOT_FOUND Failed to find the tables. + +**/ + +RETURN_STATUS +EFIAPI +ParseAcpiTableInfo ( + OUT UNIVERSAL_PAYLOAD_ACPI_TABLE *AcpiTableHob + ) +{ + EFI_STATUS Status; + VOID *MemTable; + UINT32 MemTableSize; + Status = ParseCbMemTable (SIGNATURE_32 ('I', 'P', 'C', 'A'), &MemTable, &MemTableSize); if (EFI_ERROR (Status)) { return EFI_NOT_FOUND; } - SystemTableInfo->AcpiTableBase = (UINT64) (UINTN)MemTable; - SystemTableInfo->AcpiTableSize = MemTableSize; + AcpiTableHob->Rsdp = (UINT64) (UINTN)MemTable; return Status; } diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c index 7214fd87d2..4e597dc6ea 100644 --- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c +++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c @@ -110,9 +110,9 @@ ParseMemoryInfo ( } /** - Acquire acpi table and smbios table from slim bootloader + Acquire smbios table from slim bootloader - @param SystemTableInfo Pointer to the system table info + @param SystemTableInfo Pointer to the SMBIOS table info @retval RETURN_SUCCESS Successfully find out the tables. @retval RETURN_NOT_FOUND Failed to find the tables. @@ -120,8 +120,8 @@ ParseMemoryInfo ( **/ RETURN_STATUS EFIAPI -ParseSystemTable ( - OUT SYSTEM_TABLE_INFO *SystemTableInfo +ParseSmbiosTable ( + OUT UNIVERSAL_PAYLOAD_SMBIOS_TABLE *SmbiosTable ) { SYSTEM_TABLE_INFO *TableInfo; @@ -132,7 +132,36 @@ ParseSystemTable ( return RETURN_NOT_FOUND; } - CopyMem (SystemTableInfo, TableInfo, sizeof (SYSTEM_TABLE_INFO)); + SmbiosTable->SmBiosEntryPoint = TableInfo->SmbiosTableBase; + + return RETURN_SUCCESS; +} + + +/** + Acquire acpi table from slim bootloader + + @param AcpiTableHob Pointer to the ACPI table info + + @retval RETURN_SUCCESS Successfully find out the tables. + @retval RETURN_NOT_FOUND Failed to find the tables. + +**/ +RETURN_STATUS +EFIAPI +ParseAcpiTableInfo ( + OUT UNIVERSAL_PAYLOAD_ACPI_TABLE *AcpiTableHob + ) +{ + SYSTEM_TABLE_INFO *TableInfo; + + TableInfo = (SYSTEM_TABLE_INFO *)GetGuidHobDataFromSbl (&gUefiSystemTableInfoGuid); + if (TableInfo == NULL) { + ASSERT (FALSE); + return RETURN_NOT_FOUND; + } + + AcpiTableHob->Rsdp = TableInfo->AcpiTableBase; return RETURN_SUCCESS; } diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c index ae16f25c7c..64a76e84b1 100644 --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c @@ -385,8 +385,6 @@ BuildHobFromBl ( ) { EFI_STATUS Status; - SYSTEM_TABLE_INFO SysTableInfo; - SYSTEM_TABLE_INFO *NewSysTableInfo; ACPI_BOARD_INFO AcpiBoardInfo; ACPI_BOARD_INFO *NewAcpiBoardInfo; EFI_PEI_GRAPHICS_INFO_HOB GfxInfo; @@ -437,41 +435,35 @@ BuildHobFromBl ( // - // Create guid hob for system tables like acpi table and smbios table - // - Status = ParseSystemTable(&SysTableInfo); - ASSERT_EFI_ERROR (Status); - if (!EFI_ERROR (Status)) { - NewSysTableInfo = BuildGuidHob (&gUefiSystemTableInfoGuid, sizeof (SYSTEM_TABLE_INFO)); - ASSERT (NewSysTableInfo != NULL); - CopyMem (NewSysTableInfo, &SysTableInfo, sizeof (SYSTEM_TABLE_INFO)); - DEBUG ((DEBUG_INFO, "Detected Acpi Table at 0x%lx, length 0x%x\n", SysTableInfo.AcpiTableBase, SysTableInfo.AcpiTableSize)); - DEBUG ((DEBUG_INFO, "Detected Smbios Table at 0x%lx, length 0x%x\n", SysTableInfo.SmbiosTableBase, SysTableInfo.SmbiosTableSize)); - } - // - // Creat SmBios table Hob + // Create smbios table guid hob // SmBiosTableHob = BuildGuidHob (&gUniversalPayloadSmbiosTableGuid, sizeof (UNIVERSAL_PAYLOAD_SMBIOS_TABLE)); ASSERT (SmBiosTableHob != NULL); SmBiosTableHob->Header.Revision = UNIVERSAL_PAYLOAD_SMBIOS_TABLE_REVISION; SmBiosTableHob->Header.Length = sizeof (UNIVERSAL_PAYLOAD_SMBIOS_TABLE); - SmBiosTableHob->SmBiosEntryPoint = SysTableInfo.SmbiosTableBase; DEBUG ((DEBUG_INFO, "Create smbios table gUniversalPayloadSmbiosTableGuid guid hob\n")); + Status = ParseSmbiosTable(SmBiosTableHob); + if (!EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "Detected Smbios Table at 0x%lx\n", SmBiosTableHob->SmBiosEntryPoint)); + } // - // Creat ACPI table Hob + // Create acpi table guid hob // AcpiTableHob = BuildGuidHob (&gUniversalPayloadAcpiTableGuid, sizeof (UNIVERSAL_PAYLOAD_ACPI_TABLE)); ASSERT (AcpiTableHob != NULL); AcpiTableHob->Header.Revision = UNIVERSAL_PAYLOAD_ACPI_TABLE_REVISION; AcpiTableHob->Header.Length = sizeof (UNIVERSAL_PAYLOAD_ACPI_TABLE); - AcpiTableHob->Rsdp = SysTableInfo.AcpiTableBase; - DEBUG ((DEBUG_INFO, "Create smbios table gUniversalPayloadAcpiTableGuid guid hob\n")); + DEBUG ((DEBUG_INFO, "Create ACPI table gUniversalPayloadAcpiTableGuid guid hob\n")); + Status = ParseAcpiTableInfo(AcpiTableHob); + if (!EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "Detected ACPI Table at 0x%lx\n", AcpiTableHob->Rsdp)); + } // // Create guid hob for acpi board information // - Status = ParseAcpiInfo (SysTableInfo.AcpiTableBase, &AcpiBoardInfo); + Status = ParseAcpiInfo (AcpiTableHob->Rsdp, &AcpiBoardInfo); ASSERT_EFI_ERROR (Status); if (!EFI_ERROR (Status)) { NewAcpiBoardInfo = BuildGuidHob (&gUefiAcpiBoardInfoGuid, sizeof (ACPI_BOARD_INFO)); diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h index 331724c687..82590bf7c6 100644 --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h @@ -27,7 +27,6 @@ #include <IndustryStandard/Acpi.h> #include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h> #include <Guid/SerialPortInfoGuid.h> -#include <Guid/SystemTableInfoGuid.h> #include <Guid/MemoryMapInfoGuid.h> #include <Guid/AcpiBoardInfoGuid.h> #include <Guid/GraphicsInfoHob.h> -- 2.33.0.windows.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#80556): https://edk2.groups.io/g/devel/message/80556 Mute This Topic: https://groups.io/mt/85567529/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-