diff mbox series

[edk2] ArmPkg/PlatformBootManagerLib: print firmware version to console

Message ID 20171208150149.10731-1-ard.biesheuvel@linaro.org
State New
Headers show
Series [edk2] ArmPkg/PlatformBootManagerLib: print firmware version to console | expand

Commit Message

Ard Biesheuvel Dec. 8, 2017, 3:01 p.m. UTC
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

Comments

Leif Lindholm Dec. 8, 2017, 4:31 p.m. UTC | #1
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
Ard Biesheuvel Dec. 8, 2017, 4:37 p.m. UTC | #2
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 mbox series

Patch

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