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 <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
Ard Biesheuvel 2017-12-08 14:55:22 +00:00
parent 2b129e87c0
commit 6c4194c99e
2 changed files with 26 additions and 0 deletions

View File

@ -515,6 +515,8 @@ PlatformBootManagerBeforeConsole (
PlatformRegisterOptionsAndKeys (); PlatformRegisterOptionsAndKeys ();
} }
#define VERSION_STRING_PREFIX L"Tianocore/EDK2 firmware version "
/** /**
Do the platform specific action after the console is ready Do the platform specific action after the console is ready
Possible things that can be done in PlatformBootManagerAfterConsole: Possible things that can be done in PlatformBootManagerAfterConsole:
@ -534,14 +536,37 @@ PlatformBootManagerAfterConsole (
{ {
ESRT_MANAGEMENT_PROTOCOL *EsrtManagement; ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
EFI_STATUS Status; EFI_STATUS Status;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
UINTN FirmwareVerLength;
UINTN PosX;
UINTN PosY;
FirmwareVerLength = StrLen (PcdGetPtr (PcdFirmwareVersionString));
// //
// Show the splash screen. // Show the splash screen.
// //
Status = BootLogoEnableLogo (); Status = BootLogoEnableLogo ();
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
Print (L"Press ESCAPE for boot options "); 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. // Connect the rest of the devices.
// //

View File

@ -59,6 +59,7 @@
gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport
[FixedPcd] [FixedPcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity