summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--UefiPayloadPkg/Include/Library/BlParseLib.h14
-rw-r--r--UefiPayloadPkg/Library/CbParseLib/CbParseLib.c16
-rw-r--r--UefiPayloadPkg/Library/SblParseLib/SblParseLib.c47
-rw-r--r--UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf1
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c8
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 ();