Message ID | 20171208150149.10731-1-ard.biesheuvel@linaro.org |
---|---|
State | New |
Headers | show |
Series | [edk2] ArmPkg/PlatformBootManagerLib: print firmware version to console | expand |
On Fri, Dec 08, 2017 at 03:01:49PM +0000, Ard Biesheuvel wrote: > 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> > --- > ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c | 25 ++++++++++++++++++++ > ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf | 1 + > 2 files changed, 26 insertions(+) > > diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c > index 95e739c66c29..ccdb3e0a5d78 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 fce7349ff867..71f1d04a87ee 100644 > --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf > +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf > @@ -59,6 +59,7 @@ [FeaturePcd] > gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport > > [FixedPcd] > + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity > -- > 2.11.0 > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On 8 December 2017 at 16:31, Leif Lindholm <leif.lindholm@linaro.org> wrote: > On Fri, Dec 08, 2017 at 03:01:49PM +0000, Ard Biesheuvel wrote: >> 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> > Thanks. Pushed as 6c4194c99e2e >> --- >> ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c | 25 ++++++++++++++++++++ >> ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf | 1 + >> 2 files changed, 26 insertions(+) >> >> diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c >> index 95e739c66c29..ccdb3e0a5d78 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 fce7349ff867..71f1d04a87ee 100644 >> --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf >> +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf >> @@ -59,6 +59,7 @@ [FeaturePcd] >> gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport >> >> [FixedPcd] >> + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString >> gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate >> gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits >> gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity >> -- >> 2.11.0 >> _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c index 95e739c66c29..ccdb3e0a5d78 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 fce7349ff867..71f1d04a87ee 100644 --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf @@ -59,6 +59,7 @@ [FeaturePcd] gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport [FixedPcd] + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
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> --- ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c | 25 ++++++++++++++++++++ ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf | 1 + 2 files changed, 26 insertions(+) -- 2.11.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel