diff options
-rw-r--r-- | UefiPayloadPkg/Include/Library/BlParseLib.h | 14 | ||||
-rw-r--r-- | UefiPayloadPkg/Library/CbParseLib/CbParseLib.c | 16 | ||||
-rw-r--r-- | UefiPayloadPkg/Library/SblParseLib/SblParseLib.c | 47 | ||||
-rw-r--r-- | UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf | 1 | ||||
-rw-r--r-- | UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c | 8 |
5 files changed, 84 insertions, 2 deletions
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.<BR>
+ Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -15,7 +15,7 @@ #include <Library/HobLib.h>
#include <Library/BlParseLib.h>
#include <IndustryStandard/Acpi.h>
-
+#include <UniversalPayload/PciRootBridges.h>
/**
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 @@ -322,6 +322,14 @@ BuildHobFromBl ( }
//
+ // 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.
//
Status = ParsePlatformInfo ();
|