diff --git a/UefiPayloadPkg/Include/Library/BlParseLib.h b/UefiPayloadPkg/Include/Library/BlParseLib.h index 1244190d4e..49eac31248 100644 --- a/UefiPayloadPkg/Include/Library/BlParseLib.h +++ b/UefiPayloadPkg/Include/Library/BlParseLib.h @@ -116,4 +116,18 @@ ParseGfxDeviceInfo ( OUT EFI_PEI_GRAPHICS_DEVICE_INFO_HOB *GfxDeviceInfo ); +/** + Parse and handle the misc info provided by bootloader + + @retval RETURN_SUCCESS The misc information was parsed successfully. + @retval RETURN_NOT_FOUND Could not find required misc info. + @retval RETURN_OUT_OF_RESOURCES Insufficant memory space. + +**/ +RETURN_STATUS +EFIAPI +ParseMiscInfo ( + VOID + ); + #endif diff --git a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c index 4f90687e40..f81aa0f301 100644 --- a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c +++ b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c @@ -560,3 +560,19 @@ ParseGfxDeviceInfo ( return RETURN_NOT_FOUND; } +/** + Parse and handle the misc info provided by bootloader + + @retval RETURN_SUCCESS The misc information was parsed successfully. + @retval RETURN_NOT_FOUND Could not find required misc info. + @retval RETURN_OUT_OF_RESOURCES Insufficant memory space. + +**/ +RETURN_STATUS +EFIAPI +ParseMiscInfo ( + VOID + ) +{ + return RETURN_SUCCESS; +} diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c index 7214fd87d2..ccdcbfc07d 100644 --- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c +++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c @@ -1,7 +1,7 @@ /** @file This library will parse the Slim Bootloader to get required information. - Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.
+ Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -15,7 +15,7 @@ #include #include #include - +#include /** This function retrieves the parameter base address from boot loader. @@ -221,3 +221,46 @@ ParseGfxDeviceInfo ( return RETURN_SUCCESS; } +/** + Parse and handle the misc info provided by bootloader + + @retval RETURN_SUCCESS The misc information was parsed successfully. + @retval RETURN_NOT_FOUND Could not find required misc info. + @retval RETURN_OUT_OF_RESOURCES Insufficant memory space. + +**/ +RETURN_STATUS +EFIAPI +ParseMiscInfo ( + VOID + ) +{ + RETURN_STATUS Status; + UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *BlRootBridgesHob; + UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *PldRootBridgesHob; + + Status = RETURN_NOT_FOUND; + BlRootBridgesHob = (UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *) GetGuidHobDataFromSbl ( + &gUniversalPayloadPciRootBridgeInfoGuid + ); + if (BlRootBridgesHob != NULL) { + // + // Migrate bootloader root bridge info hob from bootloader to payload. + // + PldRootBridgesHob = BuildGuidHob ( + &gUniversalPayloadPciRootBridgeInfoGuid, + BlRootBridgesHob->Header.Length + ); + ASSERT (PldRootBridgesHob != NULL); + if (PldRootBridgesHob != NULL) { + CopyMem (PldRootBridgesHob, BlRootBridgesHob, BlRootBridgesHob->Header.Length); + DEBUG ((DEBUG_INFO, "Create PCI root bridge info guid hob\n")); + Status = RETURN_SUCCESS; + } else { + Status = RETURN_OUT_OF_RESOURCES; + } + } + + return Status; +} + diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf index 665a5a8adc..535cca58a6 100644 --- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf +++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf @@ -41,6 +41,7 @@ gLoaderMemoryMapInfoGuid gEfiGraphicsInfoHobGuid gEfiGraphicsDeviceInfoHobGuid + gUniversalPayloadPciRootBridgeInfoGuid [Pcd] gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c index f2ac3d2c69..5a1e578668 100644 --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c @@ -321,6 +321,14 @@ BuildHobFromBl ( return Status; } + // + // Parse the misc info provided by bootloader + // + Status = ParseMiscInfo (); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_WARN, "Error when parsing misc info, Status = %r\n", Status)); + } + // // Parse platform specific information. //