UefiPayloadPkg: consume the BootManagerMenuFile HOB
Consume the BootManagerMenuFile HOB in PlatformBootManagerLib This Lib is in UefiPayloadPkg Cc: Maurice Ma <maurice.ma@intel.com> Cc: Guo Dong <guo.dong@intel.com> Cc: Benjamin You <benjamin.you@intel.com> Reviewed-by: Guo Dong <guo.dong@intel.com> Signed-off-by: DunTan <dun.tan@intel.com>
This commit is contained in:
@ -10,6 +10,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
|||||||
#include "PlatformBootManager.h"
|
#include "PlatformBootManager.h"
|
||||||
#include "PlatformConsole.h"
|
#include "PlatformConsole.h"
|
||||||
#include <Protocol/PlatformBootManagerOverride.h>
|
#include <Protocol/PlatformBootManagerOverride.h>
|
||||||
|
#include <Guid/BootManagerMenu.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
|
||||||
UNIVERSAL_PAYLOAD_PLATFORM_BOOT_MANAGER_OVERRIDE_PROTOCOL *mUniversalPayloadPlatformBootManagerOverrideInstance = NULL;
|
UNIVERSAL_PAYLOAD_PLATFORM_BOOT_MANAGER_OVERRIDE_PROTOCOL *mUniversalPayloadPlatformBootManagerOverrideInstance = NULL;
|
||||||
|
|
||||||
@ -286,3 +288,53 @@ PlatformBootManagerUnableToBoot (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Get/update PcdBootManagerMenuFile from GUID HOB which will be assigned in bootloader.
|
||||||
|
|
||||||
|
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||||
|
@param SystemTable A pointer to the EFI System Table.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||||
|
@retval other Some error occurs.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
PlatformBootManagerLibConstructor (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
UINTN Size;
|
||||||
|
VOID *GuidHob;
|
||||||
|
UNIVERSAL_PAYLOAD_GENERIC_HEADER *GenericHeader;
|
||||||
|
UNIVERSAL_PAYLOAD_BOOT_MANAGER_MENU *BootManagerMenuFile;
|
||||||
|
|
||||||
|
GuidHob = GetFirstGuidHob (&gEdkiiBootManagerMenuFileGuid);
|
||||||
|
|
||||||
|
if (GuidHob == NULL) {
|
||||||
|
//
|
||||||
|
// If the HOB is not create, the default value of PcdBootManagerMenuFile will be used.
|
||||||
|
//
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
GenericHeader = (UNIVERSAL_PAYLOAD_GENERIC_HEADER *) GET_GUID_HOB_DATA (GuidHob);
|
||||||
|
if ((sizeof (UNIVERSAL_PAYLOAD_GENERIC_HEADER) > GET_GUID_HOB_DATA_SIZE (GuidHob)) || (GenericHeader->Length > GET_GUID_HOB_DATA_SIZE (GuidHob))) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
if (GenericHeader->Revision == UNIVERSAL_PAYLOAD_BOOT_MANAGER_MENU_REVISION) {
|
||||||
|
BootManagerMenuFile = (UNIVERSAL_PAYLOAD_BOOT_MANAGER_MENU *) GET_GUID_HOB_DATA (GuidHob);
|
||||||
|
if (BootManagerMenuFile->Header.Length < UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD (UNIVERSAL_PAYLOAD_BOOT_MANAGER_MENU, FileName)) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
Size = sizeof (BootManagerMenuFile->FileName);
|
||||||
|
Status = PcdSetPtrS (PcdBootManagerMenuFile, &Size, &BootManagerMenuFile->FileName);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
} else {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
MODULE_TYPE = DXE_DRIVER
|
MODULE_TYPE = DXE_DRIVER
|
||||||
VERSION_STRING = 1.0
|
VERSION_STRING = 1.0
|
||||||
LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
|
LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
|
||||||
|
CONSTRUCTOR = PlatformBootManagerLibConstructor
|
||||||
|
|
||||||
#
|
#
|
||||||
# The following information is for reference only and not required by the build tools.
|
# The following information is for reference only and not required by the build tools.
|
||||||
@ -46,9 +46,11 @@
|
|||||||
HiiLib
|
HiiLib
|
||||||
PrintLib
|
PrintLib
|
||||||
PlatformHookLib
|
PlatformHookLib
|
||||||
|
HobLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEndOfDxeEventGroupGuid
|
gEfiEndOfDxeEventGroupGuid
|
||||||
|
gEdkiiBootManagerMenuFileGuid
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiGenericMemTestProtocolGuid ## CONSUMES
|
gEfiGenericMemTestProtocolGuid ## CONSUMES
|
||||||
@ -70,3 +72,4 @@
|
|||||||
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits
|
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile
|
||||||
|
@ -307,7 +307,6 @@
|
|||||||
!endif
|
!endif
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE
|
gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable|TRUE
|
gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable|TRUE
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
|
|
||||||
|
|
||||||
gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile|{ 0x57, 0x72, 0xcf, 0x80, 0xab, 0x87, 0xf9, 0x47, 0xa3, 0xfe, 0xD5, 0x0B, 0x76, 0xd8, 0x95, 0x41 }
|
gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile|{ 0x57, 0x72, 0xcf, 0x80, 0xab, 0x87, 0xf9, 0x47, 0xa3, 0xfe, 0xD5, 0x0B, 0x76, 0xd8, 0x95, 0x41 }
|
||||||
|
|
||||||
@ -316,6 +315,7 @@
|
|||||||
!endif
|
!endif
|
||||||
|
|
||||||
[PcdsPatchableInModule.common]
|
[PcdsPatchableInModule.common]
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x7
|
gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x7
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F
|
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F
|
||||||
!if $(SOURCE_DEBUG_ENABLE)
|
!if $(SOURCE_DEBUG_ENABLE)
|
||||||
|
Reference in New Issue
Block a user