From 6c4194c99e2ec6251b657ec8fb5834332f544b7b Mon Sep 17 00:00:00 2001 From: Ard Biesheuvel Date: Fri, 8 Dec 2017 14:55:22 +0000 Subject: [PATCH] ArmPkg/PlatformBootManagerLib: print firmware version to console If gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString is set to a non-empty string, print it to the console at boot. Note that this is independent of DEBUG/RELEASE or graphical vs serial console, although we do attempt to stay clear of the logo and progress bar in graphical mode, by printing it top center. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm --- .../PlatformBootManagerLib/PlatformBm.c | 25 +++++++++++++++++++ .../PlatformBootManagerLib.inf | 1 + 2 files changed, 26 insertions(+) diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c index 95e739c66c..ccdb3e0a5d 100644 --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c @@ -515,6 +515,8 @@ PlatformBootManagerBeforeConsole ( PlatformRegisterOptionsAndKeys (); } +#define VERSION_STRING_PREFIX L"Tianocore/EDK2 firmware version " + /** Do the platform specific action after the console is ready Possible things that can be done in PlatformBootManagerAfterConsole: @@ -534,14 +536,37 @@ PlatformBootManagerAfterConsole ( { ESRT_MANAGEMENT_PROTOCOL *EsrtManagement; EFI_STATUS Status; + EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; + UINTN FirmwareVerLength; + UINTN PosX; + UINTN PosY; + + FirmwareVerLength = StrLen (PcdGetPtr (PcdFirmwareVersionString)); // // Show the splash screen. // Status = BootLogoEnableLogo (); if (EFI_ERROR (Status)) { + if (FirmwareVerLength > 0) { + Print (VERSION_STRING_PREFIX L"%s", + PcdGetPtr (PcdFirmwareVersionString)); + } Print (L"Press ESCAPE for boot options "); + } else if (FirmwareVerLength > 0) { + Status = gBS->HandleProtocol (gST->ConsoleOutHandle, + &gEfiGraphicsOutputProtocolGuid, (VOID **)&GraphicsOutput); + if (!EFI_ERROR (Status)) { + PosX = (GraphicsOutput->Mode->Info->HorizontalResolution - + (StrLen (VERSION_STRING_PREFIX) + FirmwareVerLength) * + EFI_GLYPH_WIDTH) / 2; + PosY = 0; + + PrintXY (PosX, PosY, NULL, NULL, VERSION_STRING_PREFIX L"%s", + PcdGetPtr (PcdFirmwareVersionString)); + } } + // // Connect the rest of the devices. // diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf index fce7349ff8..71f1d04a87 100644 --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf @@ -59,6 +59,7 @@ gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport [FixedPcd] + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity -- 2.39.2