[edk2-devel] [PATCH v1 3/3] LogoFeaturePkg, BoardModulePkg: Set existing logo as BGRT

Benjamin Doron benjamin.doron00 at gmail.com
Mon Jul 25 17:12:07 UTC 2022


In MinPlatform, FSP-S displays the logo to the user early. However, this
means that no BGRT is written either. To reduce duplication in the flash
image, a new LogoDxe will set this BMP as the BGRT buffer. The previous
LogoDxe drivers here, along with a BootLogoEnableLogo() patch to BDS
libraries, would begin displaying the Intel logo over the board FDF's
choice - presently, these are the TianoCore logo.

Also begin using BootLogoUpdateProgress().

Tested on KabylakeOpenBoardPkg, the boot logo becomes also a BGRT logo.

A follow-up patch can be considered to set all platforms to use Intel's
logo.

Cc: Sai Chaganty <rangasai.v.chaganty at intel.com>
Cc: Isaac Oram <isaac.w.oram at intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone at intel.com>
Cc: Ankit Sinha <ankit.sinha at intel.com>
Cc: Eric Dong <eric.dong at intel.com>
Cc: Dandan Bi <dandan.bi at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>
Signed-off-by: Benjamin Doron <benjamin.doron00 at gmail.com>
---
 Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc                 |   8 -
 Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc               |   6 +-
 Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf                |   6 +-
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf                  |  10 --
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf               |  52 ------
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c                        | 183 +++++++-------------
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf                      |  10 --
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg                      | Bin 9741 -> 0 bytes
 Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf                   |  24 ++-
 Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec                    |   2 +-
 Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc                    |   3 -
 Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c           |   3 +-
 Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.inf         |   1 +
 Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManager.c      |  31 ++++
 Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManagerLib.inf |   5 +
 Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc                       |   1 +
 16 files changed, 120 insertions(+), 225 deletions(-)

diff --git a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc
index 5365f0a1b844..da663f5c833f 100644
--- a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc
+++ b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc
@@ -77,11 +77,3 @@
   gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable      |FALSE
   gUserAuthFeaturePkgTokenSpaceGuid.PcdUseVersion1                          |FALSE
   gVirtualKeyboardFeaturePkgTokenSpaceGuid.PcdVirtualKeyboardFeatureEnable  |FALSE
-
-#
-# There seems to be some build parsing odd behavior that requires this PCD to be specified even though
-# the *.fdf that consumes it is dependent on the feature flag.
-# This section is to ensure that boards have these PCD instantiated.
-#
-[PcdsFeatureFlag]
-  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
index 0acce1c7dfaf..3e990a84f8ec 100644
--- a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc
@@ -47,8 +47,4 @@
 # @todo: Change below line to [Components.$(DXE_ARCH)] after https://bugzilla.tianocore.org/show_bug.cgi?id=2308
 #        is completed.
 [Components.X64]
-  !if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
-    LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
-  !else
-    LogoFeaturePkg/LogoDxe/LogoDxe.inf
-  !endif
+  LogoFeaturePkg/LogoDxe/LogoDxe.inf
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
index fead9f3b0298..f8e368434f72 100644
--- a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf
@@ -6,8 +6,4 @@
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 #
 ##
-!if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable == TRUE
-  INF LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
-!else
-  INF LogoFeaturePkg/LogoDxe/LogoDxe.inf
-!endif
+INF LogoFeaturePkg/LogoDxe/LogoDxe.inf
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
deleted file mode 100644
index a39500e043e3..000000000000
--- a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf
+++ /dev/null
@@ -1,10 +0,0 @@
-// /** @file
-// Platform Logo image definition file.
-//
-// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-#image IMG_LOGO Logo.jpg
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
deleted file mode 100644
index 47f1672a4c07..000000000000
--- a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
+++ /dev/null
@@ -1,52 +0,0 @@
-## @file
-#  The default logo JPEG picture shown on setup screen.
-#
-#  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
-#
-#  SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = JpegLogoDxe
-  FILE_GUID                      = 319CFE1D-8F15-4A7A-BF40-EECA953D87EF
-  MODULE_TYPE                    = DXE_DRIVER
-  VERSION_STRING                 = 1.0
-
-  ENTRY_POINT                    = InitializeLogo
-#
-#  This flag specifies whether HII resource section is generated into PE image.
-#
-  UEFI_HII_RESOURCE_SECTION      = TRUE
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-#  VALID_ARCHITECTURES           = IA32 X64
-#
-
-[Sources]
-  Logo.jpg
-  Logo.c
-  JpegLogo.idf
-
-[Packages]
-  MdePkg/MdePkg.dec
-  MdeModulePkg/MdeModulePkg.dec
-
-[LibraryClasses]
-  UefiBootServicesTableLib
-  UefiDriverEntryPoint
-  DebugLib
-
-[Protocols]
-  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
-  gEfiHiiImageExProtocolGuid         ## CONSUMES
-  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
-  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
-
-[Depex]
-  gEfiHiiDatabaseProtocolGuid AND
-  gEfiHiiImageExProtocolGuid
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
index a636b086caf6..29b913c5bda5 100644
--- a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c
@@ -6,88 +6,26 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
 #include <Uefi.h>
-#include <Protocol/HiiDatabase.h>
-#include <Protocol/GraphicsOutput.h>
-#include <Protocol/HiiImageEx.h>
-#include <Protocol/PlatformLogo.h>
-#include <Protocol/HiiPackageList.h>
 #include <Library/UefiBootServicesTableLib.h>
 #include <Library/DebugLib.h>
-
-typedef struct {
-  EFI_IMAGE_ID                          ImageId;
-  EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
-  INTN                                  OffsetX;
-  INTN                                  OffsetY;
-} LOGO_ENTRY;
-
-EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx;
-EFI_HII_HANDLE            mHiiHandle;
-LOGO_ENTRY                mLogos[] = {
-  {
-    IMAGE_TOKEN (IMG_LOGO),
-    EdkiiPlatformLogoDisplayAttributeCenter,
-    0,
-    0
-  }
-};
-
-/**
-  Load a platform logo image and return its data and attributes.
-
-  @param This              The pointer to this protocol instance.
-  @param Instance          The visible image instance is found.
-  @param Image             Points to the image.
-  @param Attribute         The display attributes of the image returned.
-  @param OffsetX           The X offset of the image regarding the Attribute.
-  @param OffsetY           The Y offset of the image regarding the Attribute.
-
-  @retval EFI_SUCCESS      The image was fetched successfully.
-  @retval EFI_NOT_FOUND    The specified image could not be found.
-**/
-EFI_STATUS
-EFIAPI
-GetImage (
-  IN     EDKII_PLATFORM_LOGO_PROTOCOL          *This,
-  IN OUT UINT32                                *Instance,
-     OUT EFI_IMAGE_INPUT                       *Image,
-     OUT EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE *Attribute,
-     OUT INTN                                  *OffsetX,
-     OUT INTN                                  *OffsetY
-  )
-{
-  UINT32 Current;
-  if (Instance == NULL || Image == NULL ||
-      Attribute == NULL || OffsetX == NULL || OffsetY == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Current = *Instance;
-  if (Current >= ARRAY_SIZE (mLogos)) {
-    return EFI_NOT_FOUND;
-  }
-
-  (*Instance)++;
-  *Attribute = mLogos[Current].Attribute;
-  *OffsetX   = mLogos[Current].OffsetX;
-  *OffsetY   = mLogos[Current].OffsetY;
-  return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle, mLogos[Current].ImageId, Image);
-}
-
-EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo = {
-  GetImage
-};
+#include <Library/BmpSupportLib.h>
+#include <Library/DxeServicesLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Protocol/BootLogo2.h>
+#include <Protocol/GraphicsOutput.h>
 
 /**
   Entrypoint of this module.
 
-  This function is the entrypoint of this module. It installs the Edkii
-  Platform Logo protocol.
+  This function is the entrypoint of this module. It prepares the BGRT
+  blit-buffer.
 
   @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 EFI_UNSUPPORTED   A dependency is unavailable.
+  @retval EFI_NOT_FOUND     Failed to find the logo.
 
 **/
 EFI_STATUS
@@ -97,57 +35,70 @@ InitializeLogo (
   IN EFI_SYSTEM_TABLE         *SystemTable
   )
 {
-  EFI_STATUS                  Status;
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;
-  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;
-  EFI_HANDLE                  Handle;
-
-  Status = gBS->LocateProtocol (
-                  &gEfiHiiDatabaseProtocolGuid,
-                  NULL,
-                  (VOID **) &HiiDatabase
-                  );
-  ASSERT_EFI_ERROR (Status);
-
-  Status = gBS->LocateProtocol (
-                  &gEfiHiiImageExProtocolGuid,
-                  NULL,
-                  (VOID **) &mHiiImageEx
-                  );
-  ASSERT_EFI_ERROR (Status);
+  EFI_STATUS                     Status;
+  EDKII_BOOT_LOGO2_PROTOCOL      *BootLogo2;
+  EFI_GRAPHICS_OUTPUT_PROTOCOL   *GraphicsOutput;
+  UINT32                         SizeOfX;
+  UINT32                         SizeOfY;
+  VOID                           *BmpAddress;
+  UINTN                          BmpSize;
+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL  *Blt;
+  UINTN                          BltSize;
+  UINTN                          Height;
+  UINTN                          Width;
+  INTN                           DestX;
+  INTN                           DestY;
 
   //
-  // Retrieve HII package list from ImageHandle
+  // MinPlatform has the FSP draw the logo.
+  // Build a blit-buffer for a bitmap here and set it for a BGRT.
   //
-  Status = gBS->OpenProtocol (
-                  ImageHandle,
-                  &gEfiHiiPackageListProtocolGuid,
-                  (VOID **) &PackageList,
-                  ImageHandle,
-                  NULL,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
+  Status = gBS->LocateProtocol (&gEdkiiBootLogo2ProtocolGuid, NULL, (VOID **)&BootLogo2);
   if (EFI_ERROR (Status)) {
-    DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in PE/COFF resource section\n"));
-    return Status;
+    return EFI_UNSUPPORTED;
   }
 
-  //
-  // Publish HII package list to HII Database.
-  //
-  Status = HiiDatabase->NewPackageList (
-                          HiiDatabase,
-                          PackageList,
-                          NULL,
-                          &mHiiHandle
-                          );
-  if (!EFI_ERROR (Status)) {
-    Handle = NULL;
-    Status = gBS->InstallMultipleProtocolInterfaces (
-                    &Handle,
-                    &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo,
-                    NULL
-                    );
+  // Determine BGRT display offsets
+  Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **)&GraphicsOutput);
+  if (EFI_ERROR (Status)) {
+    return EFI_UNSUPPORTED;
   }
+
+  SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;
+  SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;
+
+  Status = GetSectionFromAnyFv (
+             &gTianoLogoGuid,
+             EFI_SECTION_RAW,
+             0,
+             &BmpAddress,
+             &BmpSize
+             );
+  if (EFI_ERROR (Status)) {
+    return EFI_NOT_FOUND;
+  }
+
+  // Allocates pool for blit-buffer
+  Status = TranslateBmpToGopBlt (
+             BmpAddress,
+             BmpSize,
+             &Blt,
+             &BltSize,
+             &Height,
+             &Width
+             );
+  ASSERT_EFI_ERROR (Status);
+
+  // EdkiiPlatformLogoDisplayAttributeCenter
+  DestX = (SizeOfX - Width) / 2;
+  DestY = (SizeOfY - Height) / 2;
+
+  Status = BootLogo2->SetBootLogo (BootLogo2, Blt, DestX, DestY, Width, Height);
+
+  // SetBootLogo() allocates a copy pool, so free this.
+  if (Blt != NULL) {
+    FreePool (Blt);
+  }
+
   return Status;
 }
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
deleted file mode 100644
index fd9c4898156d..000000000000
--- a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf
+++ /dev/null
@@ -1,10 +0,0 @@
-// /** @file
-// Platform Logo image definition file.
-//
-// Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-#image IMG_LOGO Logo.bmp
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg
deleted file mode 100644
index 32de8a5532c9a75ab23ffc9c59a8e8c3e4ea4a27..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9741
zcmbVy3p`X?-~Sqeaj7QB{W6MD9hakokWEf5IU3!lB&Qs=BwZ+F%oZmpF<nWW8l_UH
z<d&kE<W3I7Au2OSk=qO!o0-}BzedmVzUO)V=bZO>-|^Xd#@KtWwSKqn_xD|hw*(K&
zUgP5K0!Snh_zC_1q6>tqjt&h1z|#{f0RSifS&}x8gP%z7a3JaY*Jl^fB0!%0UIzZr
z0>Cp+fyY{Sz%LHX0D#>0&-cAMLia?P?Fo!Duryn0X0Z&8^bR-!88|SBBt6SWU$SKB
zSx#1#EGsW3FF$=y6cywtiWGTy1!V<ACFu)(nxU*TL;8#KA>VG5kt37klqm9)=}Z1s
zC*lQAQ2^1T at 5v+;AfrMetB{BaK!a<Lo1UI@;nOdY3|UrAo&u+#3@<2}4W~~g!%54*
z8N;h%;opI*irk!e7Ebc2>vmA)@0+{y=$UH at hO6?*)YiY|8!g+pKVDHuT|-k#d%;5E
zMT?hMF1NC_Sz+t^!)g~-H}^FgHg59v*}P?Iz|Vm}!6Bi$4n#&BJQRKSNWw425|1aH
zIC=Km`3q_37c(wh&$@B*R`%^Xck>Ghiyjp}ep2$XyrQzIx~8`7O>@idt!;1HJG#1i
zKK6e4+}Hm_FgiB=RXBl7PD$5A0_1PYg6BV77c>G%M(P8KbX_EwL+~K0$jZ&Lke}nU
zj<RE)>infg73Quwb1kn-(Qw&%zS_?Hua(q|EV~v6q)VG#*?+dM`2W+&{%c|Xy{-;0
zgG_?XBdY)eV6H+n0>ry9f1?$S4BqdGNOf2#$W0mi8h&7iyQ}#1*Y9kGnrojwF7``a
zkn^zaha0^tqaHF~_Lg;OeYAHjKfi2-=bF0*K9!uxOfOxrdW(&9zR&MpQ2ppT<MBNX
zl%7{X?s4T^y=zzny$6oD8aJ*{J+v=J?dc`&lW*QVqx%xzxH7YbHoguwA^@+4PJoZv
zQxRB#y*UAp9F*rpfZpKGT*30r`Dl}w1_8i*0 at Rn|x~3un^tCH?jsOWM2mwxq5FlyU
zO9G5d72|SL+?)1qw=~u+!Gn<|$4r?xC9nwm at omsSiP?zK&``SCwrCAuB&OFxr41as
z6yyIP1XtuYwB|(3yj$YZ{M0+I^qy1i36C>{mPv~Bz;UHBu4hL8IZp!I2*sOdSkTu-
ze03)IPrs#71;M|FH}TBXc5Rmvv?WH()bM>BrFd_73eCG9CM-w!_O at yh)zt>nxwpU6
z)x21mf7;RDBxwBOME`r*)V at -D=3Ge<XD0zVHsFfIJrR1$*JwTsS^!R+t-Jg?Wxs%`
zPEvD`@9l6O*Vi{T&+)zO*J?0YS4Qg4b~Ok*VL-dX<@a;31?dt)x)3Emx%D*yjG6-4
zpMHzZjs#vLN7^GU-;F)#$|~oIlF|N-QO<p_1p&^|6bY~o86RvMqxH`ufN{by0z5{h
zSZ-5mo{x*SEh0}A=kf|9ng4EkxFl-Z2(~mEUw^r0L}V at TAprf79zf|Wz>6ZFK<mOK
zp1*~^;R^TaFC{>8Z!cgFz)=p&mCom1-)PMfVyz7XSd=fAko+p2Lx5W=XT>4 at x8W$f
zSyIQ7h3{}hRd|H}i-9wakl1ba`N~N|MxDEmVPpJC1|A at p$N9()LMPzZ>-uT#KAr63
zV*s`KDpp4e|9wC>JZVZo0QrpssN2AZB|s1X?h>GX%sG?VKLtm`4Pac~^B+CW?eN8a
zBUkxPF`i~p*?s>Kf&X+Yd5Q_+c?sI9zTJTU1#!Ql<JH%iC<9;NFk(`Zbo7JxY{@MI
zM*Hzjy<-0HI8F#nr|*d8RRZMqA3;uznBMPt-}~<8eKl(P2Vd=#_n32d;WLK$?BKWB
zN{Koe-m`rQ1J>_bGdx^tdEs67WGUO?;$FIZ5LUZWFu6y+Xp8Tq16gbLA9Vk&Ze4i0
z(S^<v3-T>FUHJqEBfykx;|T=w+eH%}DJH<y$60s+%+PiiG_D$AXLJ?;`sl|9 at bU;E
zjzh}>@iqdCN3rLi{E`*~`$`+|nTs|>MTm6}+zsj0!445%6~i1?eGPM-YLzQ1`m@}W
z{KFuNpGysbLW4{~gN#d{CD7R at -`jk0O~jBX0fI?A<`RePUX;f1|356GUXmba*#%@Y
z*_?*9zu3i at 3TWyhf1P#^nD&Lk2&{ts1SorkJUT8`OXsQQiB{vku~naI^pz}3?onpV
z{IC^!x3wkw!PPH1z8<$CeSMXGv6%ZbNoJc>@7|3-5lkVt!5#RNTLgH`kgy5BzuSgP
z(j9ftA!QgMC($x at B#0BY-9~a<93?2`#de<HQ7K=TMy;li>^Wg`{5-<~!WOjLQL4Q;
z-}2`CpRQe*n+NhwohD5NIMRMX%N8TNlk6fytWL#MxmXa3#z2|~(B(&fKmvrLFQe}I
zZ=EDSgvkHg$Jn&rJ|A?bG#h$n at x-FkIE2#170A)WYSwu2=RpDx;F$Ll7_vtI(yheC
zmPAN28lfWzpmhHLOt*2;B-xR+j`;%RyEI~pg2i)h^+s at l=y7f5qIa*|St6)TGSX%y
zlgWuP-A*FmhKa1BfoJwF&Ge%5Pn3;d7GvE(SvSiM3q(S^sW7IQHZo2C3Z@^v#-KBK
z- at XI8-Sls%uy=tWdnafY8%#S)U0(`9sk>Sy?3gYs4w{vgfzMv<QgB2zu$VlWDYFIT
z2UEp!3wWO{ALurZbFk(kmB}`w#o3|7LpQ#hCH?k;b(~Z4!^b9cpbf-NuzJ384{dNn
zAT!ZLuVx*ann)14XIq(DB6C9bx4*BVy0p)a-;{S@$Auj=Mh6^qi~i>{jzq(`nB at js
z$z8OD*+J9bgm7fU;TSFSdNcvL6FJ?U`fc8Vg?V}{R>d8sCe|6%>!0t-|K)<S+##<Q
zaj(92qofm{LJi?><W8Bh3kZO#ZT(Du#eL*ad1+yi`IL|u*14qhKEt{zcFx%PmWb at l
zCXpiLpi5yVG`rTRkb-wc0~t at ijAPdM^TQg&>SW=qhed*!)i1)3#Ez9bc~g(>)EvoW
z1KQA*>mJd+qD;BQJ>w)HH69kA>X8olsj3wY^YBi5)|+8pNu;fL!k&>H|E&6zPa-N;
zgVjBBY$-*^%F7RR(8E9Aiocs7 at up!f52YzEbLSSzqTGdX4vvz$99~-^W}-1zl<gON
z(mc+atumgxEhCD0Y${uL<Dy<`!<+A_dqfX)4^_`4@#Raeg<aKX-Sc!sx1aXF+7^@G
zkciz8_dB%if83Dh>O#73lowBuk6SWb*ibr`A4nHpudjxcUON}RIBp9hObCBSoUIhF
zsr at 2+228K>TcSm<kZyudpnu$vmfJ!aBY;>f8DAGD@<7`;SUmxLJanEUc50%GOo%nB
z31GdN0Q>3q=RWepbjF9Hy!VZmRgZ_{&Um=Fa74m+YP=7|KJG4y%V4nwbCsjdQ%li9
z at tRwLCEEhzdvq>N+Nc85^|>yedz_({xh0zZ(pD}l{bv88JK@>=CE<6SBEpo+T2gJA
z<bLo1N|``j4){$&_oN6{(jkCso#YJkLpF^Pgn5YQj1}>tA=gmMRlI3uvikjNKf2E8
zc>mJ{t+J5Ik?Vh=xV(5l8HEf;$}Hk{ieaUU-^gsy;1;x1{h*!5-lz49ACY`Nyu;29
zU2A$QgJfKPhF)u8bWSJr-n~>F&B}{1 at C^tTdqN<*j6)#IZh%0T{pB0=nKmhTh>96e
z#40o)#Qpdu4A(Ss8FTS`&a6n^o2*K<N|A?EOjr=_a at fWik>Bg}I`uQ|#@#v7v~&-^
zuXA`;5WXw=))`kk-enWXZLjW9E4*qHhMI50j&^Il8QI1$+EK7~<6#B#^C=k{(FJ3p
zxY*U-(3(<@@YfLlGh_|I!Y${-XLJM)QTcZ}-&HE^33%f$FPdpt)LJO4(tyd^VMrUR
z+F=yC_wL)DNa9>rpM4QtD!Y&?o`dulF=t=}G6S76TW_Am%)8YycGU*vxIDdh#T^MQ
z*;E#-m1>)1yQ79uYYDl;_&;IV<SB&dV3HK2SrDb$piRgadD>Yxo5QPPPp(d9aRzzI
z{UsKCkr3V;X$Ty5GpASGzpz+xnE<Ca<JE^9X%%_^q7zzn3LT5|pMd;zm>Gwlw?U at D
z;NXzufLo!&q1DEemlBYu8K89L`YAat8!!v#k{tC-McdFaH)MzZ+f{XTxgBjnHa|E1
z^W)<UMQ<W<f9y!9VBn*6i_|?%s2b{|EnQZ1z>#Ji>d%j&iD!#8w4(X`!bhAUm)M-x
zDE`Q{&A#0EuO906y4ZEcIh0E-A-mb_8-%s|8&{W0($El^5;j6l2zeSYYe1#Z^s at Ep
ztFsw3n!+t=Ywf%!H(~106yWMAQ2yGPs<@Id4AmaNrqtvvY}mnoVO#K6fRu|KcYUy<
z%f<}v-k9q4<f!)d8A^e(EePNZ4JY_J{&pNIz?H(`Bj58iP8ONVU<0_)Og^%@b=+ at N
z*vtUe-=CX=2;00hyq=_PUU<^uv|tSk;8W!97R$;gWX^yw5~CrWQ;(nBB7z?1`Uuf(
za!DMLWDBNZa77LH+(wKALujKUe;jG&yj1nf4*5P;$Y$BQ>mJs2Vd>mXTU}%DsyA)X
z`Hxyg>-V1g2+%-U0c)_IA0hO>jJvq)Jv>UhDPv_9qTD|adZRxrXJX_2H+Hm3?taO3
zH5CP=%Pfq}IqDUGpy>Ll&Y4(LR}M#;;Uw6TaV=zu!3-4MzsIc(3*XJ|JiA3}6Xl74
z7o~=#itxJW*!;$q;og2al}Pc#FT=Nvoh*$GD)(x=ZZn=ve{@CXi)NGD$S?l<y)Xfb
zdzg9Z3A~7RqO$M(e(aj(uNs@<>>bb)(Q at tR{+I&|AT}y1Y%7v9emOR#yrby8B<16G
z%Wn?-I$*M_s(eY`mo at okY79<?$ovitBSXa^P4Nr~hZDq^!>s2NnkTk-HQ76bB at G*T
znMKwYQEHz(+D}cl|MAe`K9}B~YF^zSW6vbd2(Xi#?9ZpuJ2;ix{D`WssBqtxQ;GF{
zYc%W1?ryQ6hR4i8dw<Pa`e^BzD>dAu-vfO+$NzwB|0SP=6dpQGO6|8WA+?XdrPN-p
z7m~V2l1Q4VFuWRGqwmiV;K>w_;8Gm;9v0A#bj-}<CiHwM=5b4`D7j+3`y<xaGvwet
zF3L%2{h9w;`jaf%WS18?uZDAV6<*xx`*?7Mp`rn0v_PQIjZ{#RpIf)!3&a}*5AJlE
ztAzP at 9>@th^80wYwa+<gpR?|YLCA*Ylb|wl)_^cVa*JuttYK>uvQwqxvtnq&%k4{E
z-=YTJ4fWCSFmnpI>3rdmdX>KMj8vPz`Ef`d9W&Gr&n+*9)Nhmj+h9jYR_n_)Pl4x^
zic99KLSHKfzqDMLYp1IeP3EOppNy0}o3m)utD34fhX<KptPFB|JD7@|IB5&Bp3V2-
zrqDoS46UI5xfXUV$2a6*cvXY_`=@DHxY&LpX$mr?|4Z9J9rzBPxeZqQn0{_vu2|K_
z6>IGFQwb0hSCvsu6os9bSMjhv(5>0Dpe6fsRZn}a?tTcq%}c;!Bd&A-I?Whc4(<O?
za&CD<M_6}@>FxI?(&>D5qUmRq#s^={erM at jSD}|AV}I5?A>Zb0Ttks2c at pMoJZufh
z)^m1qu*Jm{llVMlGgr-Q#1b36<f&X%5}7+I<@&Y0G~v6GiOQoH{*ezTuZAiCV+3MG
zY!n<1veo!Ecn6KYhMRQo2<s(H_d^&{?(86v^jvEoJ#}jPH7(?+#p1 at d!wUWOj=IM>
zjU2t=P(Rv3?obxr2Uk)QeUJGIb1+Jd`@T#pt*KzE-;O<z?{3%`7d-Y_+rIO(nvK!-
z<%@p~+({bPNW!uqVa;H^=s+tP+hblrXP8q$awO0A+;uExL12ZKxVbMqf9UAPJvW at 9
zYwp^j*={kg*9+_W4?4KNAUagoFi0E4WOLXkHV^=IiUF`w?1r$7a(Gq9WQn=xEINTW
z(m2ztF&(<%mLw;N{mvR!N)Vju at x*UTXdl7q23+`WO)s!K9v%n|D~$Ae{c?c;s{7!u
z(OJ^y2Witx8D@#Klm$6knsGbEKFO7zOAj at FMHNFk4HM-f(iY!0yVTz9x^o~#Gs1uI
zO4w$tj)eCJ2B1N#Ls~mD#2SV at MJYFY)jfuky3!?go+7vEss+Ku5D2mmDSEDnfauBn
z>MwB!iG*zzY|?2JG$}z_e_2Y<UPMEJMo&La8k2xSv;taLePf5Q at GKT9Lf-x;Xy{?-
zgl?xLy0w|496qe}c*pqIGDq46PNLZEI_6ydNMDuTdPVQ*<(uuRL$ljoK6aazA~S!{
zpqeB3t(RN}5JQ|uxQ_BJviaT-*kYd{XPz>>eVOp^xk~m7u?8<~)C}pee0^_jn2*o;
z%LTpLJIm)uDy$r>UhRDwPy=We{RPS_v4%f>DvSV2gA<X-U`L90RS&dv8v(Mk3GgbT
zi-m7#A`xKrV;ImdH2bPJV+*4L2#^*D&<Znz?}tuV<ce#rYC`Sm3SgGO%kKF<q=@H2
z(yv$>E(qw-7|P?XcxudJ&wj+t!TizW!uvnWTxVai=iq{rmP-2?M#`%$Cy_0nTau=}
zI_krGlbeH4cZlfHhiN(hZigc4BvWr!t9L-qh}mFAsjnO5pnI#e{uhYIA%9Jkp(FVe
zDGU3ncGv-hX_kl9nQ%fQMAih*Li<xkrx90zL(9Syed^;3yA$BOM9O`nzJ0O%&K<u2
z+bdPM=)A+j5A;KSC4g#yy78DLY5O<Dg^bU*eQ6VX at C}Az+={nc5akj$=+-*^BdrC8
z5#k_yN{xnCPY<?3Z5V8d_BY~L+MXZ=@_MP7^Cu*hj3s=V=mr!{)P at S@IXW8WfM!y2
zIJ`u4^{we*H3A3^7IVJq&8^h4+Vmbtp&dbc>IzAcY&hN at Wh3CYqbSiyYB_R{NhOOJ
z{g>8(8U9TyK(ePLt95};va*@!0~?MbkPC94`T#3G)Ff7?OEn271wm25qEo74!K~%-
z18Cw88j at N>#LlF0|3Etzk-z?<x4DIhq`41`)%*!IH_g++&r!7OHFxw1nu<=C5a5f&
zjV1~N?6NcscZyieqgus!%X67sH5~t;D{7pxmjIp#DJZqu7+2~IFoQ(}(xaQEpJ>Y%
zhXs+GgaM7Uh|65kSObU&7OMty53yb#*dm`Y>Zy`v-S6H;M|3|*h`IZtWX|h|uCdy2
zNh==XMVXifEyjfFEDJz+z2>TDnIRhHh6aTP3*|0XrCE1s6t<3|YDmSkn>WWd*yokp
zGxU61oo=#p-m46o-<lL^D0PTH_p at XttRl;T32-<BqJPq7WI)4z at -iZ-hdJiDf&iOK
zV17XvqH`;hB~~;}Rkq<ljrgcE*;IZ*Tg^CQR_H`p92HAFfagUKAOp71PYYqv9bkV=
z&J{PXCB2!{7uw)2XgsWC0M;@XZGR;bl40;+-)X=mRG213d_g*XaRdfN0`wP at HCXtb
zWc(vr(g-`tKS*-_qXg*4;q{G7uH{rCqBQiY=9>^Q2PTs<Zr~ejjVl{p!ww#PRGe&2
z&JFc?z!VuRj%A5HHL$uIX}?d80?9|&YyUh}1-%``m7etEo+x1_?#be_Dr3$I%#Ri2
z8cb>|t(~z`IFlDX7Vu=w*^Kvd+%CrHdQm=`0<BEykT0(AM6@@Q%lC at F7IMpx4kgdP
zJz~caqa)TSZ3nln+|}T%bG--q at uqi|>x9|tiA?I9+vKrgd=_L}@hd){Wl-G=45QCx
z=;asrCv#>tRE{JtK5ecl2%pa?45b^+o?V-#zc8RE at RZEDz=MEROHUE2^q40;H*a}P
zV>t64UAs0=Vmh97<Pqy`$I537S1NXI>ON~tI at 1!bV4&it1)U;C0Oe?(3VelN0V{!_
z)>S_g;PboL*>|3A#!IaqKQ7Jqt>vUmllq~Zj!Kzl>Coa_o<Fv%TG%H*2bT~)e>tKR
zdc?X)@uO%@20vll+tP7K#_Wc}oS!v*JG{BZVo^uF+bQ3AAZBCN_{H6>Wk`~C at k@4c
zr~L2s*4=(eg8NY^)UEk3F_+!b at 0Qre?u)mZ?W85E4a%g%^DnYpTKx2;5%q6+%Sl-D
zl`5r at wB#m)MR6e1r0wbeZUDsynDh`fE?<Wn*O&kY#v${CdG?PWg$c)*mMqV6p=8PV
z!kJ<~$#QC15jky++1lY7as`ceFI(bbc?nGR;EJedU71K72Fogk*?9A%lzQh|m`{~(
z|G?RWhh|!Ni&hR>a0lNsu(kr6XOg=c?(9VA*$&$!$0W7787Df{&i}qH|4f;zZoJL>
zIHSy2{@w6Vv;_Y`TKpad9mXMSU00(P#_Uhn7V>=2>z_D92SL}<Cl}K9)|Lkt=FKII
zx+X&g^Nx$n_esfRuWLnrVo}QtCB3i3PC20h*7dC)s<QadnyE{G#0$p%R(SP;68fN=
zXrmvqfu_fx3(b#l)N>8uJqGT?zw5K at t2j9Ez`bH`U3N{zWAcPqg~`G=<n9Y6EvaBO
z30aR0<b|FvM5EC%PnK|GXdXYTMzHf;Qn)y#%a=VU*=b2u%3YGPpzd~;clU}-=r2k@
z+>E6|-fSoSuBFJ`%z=uQIomsBZ9(gG5LL#?gbn9ov@)L-(UMZ*OvDS|Bxw#x{n~|x
z5IrP<J2yJMdVj_}@nT*~?ELk1M=d9;69l7BHv$rCNj%C+<-i6CTiBu;D>4_8@(Kj1
zj!-In at WgPJ_Ny;0nz6UGUEGvt?W&NvEY-)7H2xJZB4Blf<uHB$vqlOW=<!eHCoZkR
z!n)Nj2kqonS3FaH?fLcUQg5AOH5zH}Qhzja+Lo8n6J+9uoQuE~Sr5(=B;$&uqV-|i
zd{(t7ebw{U at l7WqpYw-rr&~>U7noszFDgzKEYzvHu-;L@?qGfah`tH8R{ln4n?Txg
zAW0GV;J<Gtw>W&yu;&MzyMd{$c`90%B_LN{UD7PJyXJi0)TGSBx=Wfj&(BcR4gBCF
z8#gP2Y$v=dNkBpg&`xuG!|)fNFCOiW_OF;@&!h>8k1?DAAB1c at e{$(-=i8xUo_pRL
ztxbA-de)kw4FGj!|C#jnzhuPUm<^;jf31CyCuN{dvpBuB1ki<g%@zW*1h{8X;}(&p
zU`v$n6T*9nP;q;PKA$UAO&8t~+_UwsU at 5+>zQsUVm;0X1!?Hb3g~vD9{S=!otE{=|
zfMv+3(qG*jX at zrv7pPY9{Fc3x;au at -GCu2<X68&R!dY?x<=wy+J&u_9)>ZBJQGChT
z`^)-Iv(oHVdT0e5bx|{OG}R>iEJw-Eq>Nj1MW{vlS3BtD30UzA_Z{~_wXfuF>o2*L
z9-Xe<w)bIOt?rq#4}RIN<t`hUsXYE|v%}E#dip`7yGvg|to}$5tG~l%oxv81=Jl0S
z5B7*;qR)8<K39es#`tp8x8(bUJXb$ZZpB}-{X=d at dgQv|sn!MB>HrVI4a81@>PnXG
z7p|(q0_*_+`~>pPZhOSu8_>R4 at 44^rK121xKOZzInB%@M&f at P|9hpTl$~?k9kLb6M
zM63n5iI#91p?b(rv=ED9SU2H1%vbFEsZfr*A(q2?{B>kjbcDup{h+p=^J9FknO1g{
zTs>^&t&!#wxpd9ZxLGkhYg71*<pg+?coU|4!||7$Dk9`0WLPT?Mszqm*T+1^QH9!W
zkC`;DHcQr=(6rrWD(9XyvZ4&_t=8RO^4nd7(|3RX#pY*=b&nBX7DJM at 9ENEYuGx&M
z8w)>IDCeq9Z=qD+HKX<eIy(LZlSuo7U7pZXG;wP3Vuw|4oCCz{KT;NbRJ0iu$X<ls
zLd&nN;J~NpRZEUT98>MW3%XcCxtK2jcHxbp*i)^XkWn<>aE!sRW;XPf?y)x850Kd*
z<Pk_W=D~i$4%dAGZ*;{i4&mxPVw2oK`s5W(9;6_g0-Q^LwLT7qGK3>St4aUL(q15f
zm|_TN_B}uJ({2Kcz&+c4WmjbW^qvBwfe)p7M*K}2?7-(CdM^G3mYHj4*G_Z~11aHG
z3(ds~Xzlv0S7HOAge<$kV(E%6Tg{lvcyHAehtN5H!@>{)ly{o|#faEGOE at TK8_I!|
zuoR!o!90-yq&owDhrbcg+AT{xs2DbCFlH at De+4DO(nCX^_jF5}KU>AmMOV!32Zel0
zNpLmVz3IZy8iUkdw1LD(YDL}`1a3<W#$0d5G^+G1-!RRhgBpI=+s<%F+%m#TqL%83
z*PhGkNmy}_^a2C`S|*|dZ^EeYmyZ1!Dkv5z3D%z5dsp^Nv`>|KNBoN6vf#wGaJoMi
z1hjn3q|zaCOlXCDVm^#2Ra$#bPsP%3(ZlGN)u)5ML~X)1lEf8F(l#M>H4Hdt at Aw+D
z%n9LTbet>~EoDSJVU>sP4SLF_C1qJpEofFvLxK+KdstNU8-(1j0ncqRsc&iR2XJaQ
z=6d&SM?dl?VlXN<r0t~4hcI;JSDW1Xy%8hH9#zM>{Dq9kwYI at GL2LxC5woM>3YWW+
z7Y%=H?9i#$u5$+e`k;tEw&_gI)MYng|JoF=S>P|$gRmjHnm?4YEtFRHsVLVr;Stvz
zJ8&<{x_QXzVXnhRCgk at TLt3z7FJRU=XyrZ5m!u&-vvs3O#EUma*axCv*E{3~d8^vi
zyJd-PxX^#h-3plzT;wsd4BCUgfrc%*bvc$t*B5U-UdE(6_fGA3K>%u3jIzf?7Jplv
z-vhJrr}nrTS*X^W@}iV)oF>)T at XpnAY=tteJ1H`O{d0k<*dkkOLLX{O(%5c{cfd`@
z6OuC at 54T!bae_zDg5g5}gT50ZT4NT4;q at RE{acn#!r+eNHJTE_yMq)Qs-_<u;<JT(
zdQzu~AYZ(K)%CTl3jO60^U7_%=&YA{4YChIFMUYNe0{G$+1GK7urp*>D`0hOnfu-u
zoQ?!sDVa}qk+5}y`y|Obu!QcJ8{j|YaE{tL339qWJh&46fU4*;?+jyQ_PfmyzF`Y@
UQ_hBdzUubk_+m{3fDrBf50_=K6951J

diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
index 5ef93461ee4b..93840dfa71a4 100644
--- a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf
@@ -14,12 +14,7 @@
   FILE_GUID                      = 76ED6631-44FE-4ED2-8B5D-1B5355BB25E8
   MODULE_TYPE                    = DXE_DRIVER
   VERSION_STRING                 = 1.0
-
   ENTRY_POINT                    = InitializeLogo
-#
-#  This flag specifies whether HII resource section is generated into PE image.
-#
-  UEFI_HII_RESOURCE_SECTION      = TRUE
 
 #
 # The following information is for reference only and not required by the build tools.
@@ -28,25 +23,28 @@
 #
 
 [Sources]
-  Logo.bmp
   Logo.c
-  Logo.idf
 
 [Packages]
   MdePkg/MdePkg.dec
   MdeModulePkg/MdeModulePkg.dec
+  LogoFeaturePkg/LogoFeaturePkg.dec
 
 [LibraryClasses]
   UefiBootServicesTableLib
   UefiDriverEntryPoint
   DebugLib
+  DxeServicesLib
+  MemoryAllocationLib
+  BmpSupportLib
 
 [Protocols]
-  gEfiHiiDatabaseProtocolGuid        ## CONSUMES
-  gEfiHiiImageExProtocolGuid         ## CONSUMES
-  gEfiHiiPackageListProtocolGuid     ## PRODUCES CONSUMES
-  gEdkiiPlatformLogoProtocolGuid     ## PRODUCES
+  gEdkiiBootLogo2ProtocolGuid        ## CONSUMES
+  gEfiGraphicsOutputProtocolGuid     ## CONSUMES
+
+[Guids]
+  gTianoLogoGuid
 
 [Depex]
-  gEfiHiiDatabaseProtocolGuid AND
-  gEfiHiiImageExProtocolGuid
+  gEdkiiBootLogo2ProtocolGuid   AND
+  gEfiGraphicsOutputProtocolGuid
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
index 4fa7dfea0fcd..39cae36c5f62 100644
--- a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec
@@ -23,7 +23,7 @@
 
 [Guids]
   gLogoFeaturePkgTokenSpaceGuid  =  {0x567199de, 0xb448, 0x4aa0, {0x99, 0x4e, 0xd5, 0xd6, 0x82, 0x59, 0x91, 0x17}}
+  gTianoLogoGuid                 =  {0x7BB28B99, 0x61BB, 0x11D5, {0x9A, 0x5D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D}}
 
 [PcdsFeatureFlag]
   gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable|FALSE|BOOLEAN|0xA0000001
-  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable|FALSE|BOOLEAN|0xA0000002
diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
index 5a6436178c4e..b820baaa0a87 100644
--- a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
+++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc
@@ -29,8 +29,6 @@
   LogoFeaturePkg/LogoFeaturePkg.dec
 
 [PcdsFeatureFlag]
-  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
-
   #
   # PCD needed for MinPlatform build includes
   #
@@ -55,5 +53,4 @@
 # all drivers in this package in 32b or 64b modes
 #
 [Components]
-  LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf
   LogoFeaturePkg/LogoDxe/LogoDxe.inf
diff --git a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
index 0bcee7c9a4ba..deeec1055633 100644
--- a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
+++ b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
@@ -9,6 +9,7 @@
 
 #include <Guid/EventGroup.h>
 
+#include <Library/BootLogoLib.h>
 #include <Library/IoLib.h>
 #include <Library/PciLib.h>
 #include <Library/UefiBootManagerLib.h>
@@ -1385,7 +1386,5 @@ BdsAfterConsoleReadyBeforeBootOptionCallback (
       break;
   }
 
-  Print (L"Press F2 for Setup, or F7 for BootMenu!\n");
-
 
 }
diff --git a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.inf b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.inf
index 69f3fcb55222..6375741f402a 100644
--- a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.inf
+++ b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.inf
@@ -34,6 +34,7 @@
   PerformanceLib
   TimerLib
   Tcg2PhysicalPresenceLib
+  BootLogoLib
 
 [Packages]
   MdePkg/MdePkg.dec
diff --git a/Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManager.c b/Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManager.c
index f6628d4125f9..0e91d9338b43 100644
--- a/Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManager.c
+++ b/Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManager.c
@@ -11,9 +11,12 @@
 #include <Library/PlatformBootManagerLib.h>
 #include <Library/UefiLib.h>
 #include <Library/HobLib.h>
+#include <Library/PcdLib.h>
 #include <Library/PrintLib.h>
 #include <Library/PerformanceLib.h>
 #include <Library/BoardBootManagerLib.h>
+#include <Library/BootLogoLib.h>
+#include <Protocol/GraphicsOutput.h>
 
 
 BOOLEAN    mHotKeypressed = FALSE;
@@ -31,11 +34,39 @@ BoardBootManagerWaitCallback (
   UINT16          TimeoutRemain
   )
 {
+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION  Black;
+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION  White;
+  UINT16                               TimeoutInitial;
   EFI_STATUS                    Status;
   EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *TxtInEx;
   EFI_KEY_DATA                  KeyData;
   BOOLEAN                       PausePressed;
 
+  // Give user the notification, then consider being paused state.
+  TimeoutInitial = PcdGet16 (PcdPlatformBootTimeOut);
+
+  //
+  // If PcdPlatformBootTimeOut is set to zero, then we consider
+  // that no progress update should be enacted (since we'd only
+  // ever display a one-shot progress of either 0% or 100%).
+  //
+  if (TimeoutInitial == 0) {
+    return;
+  }
+
+  Black.Raw = 0x00000000;
+  White.Raw = 0x00FFFFFF;
+
+  // Show progress at bottom center
+  BootLogoUpdateProgress (
+    White.Pixel,
+    Black.Pixel,
+    L"Press F2 for Setup, or F7 for BootMenu!\n",
+    White.Pixel,
+    (TimeoutInitial - TimeoutRemain) * 100 / TimeoutInitial,
+    0
+    );
+
   //
   // Pause on PAUSE key
   //
diff --git a/Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManagerLib.inf b/Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManagerLib.inf
index 38ff52ca81c6..3a7a72716b99 100644
--- a/Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManagerLib.inf
+++ b/Platform/Intel/BoardModulePkg/Library/BoardBootManagerLib/BoardBootManagerLib.inf
@@ -30,10 +30,15 @@
   DebugLib
   UefiLib
   HobLib
+  PcdLib
   UefiBootManagerLib
   TimerLib
+  BootLogoLib
 
 [Packages]
   MdePkg/MdePkg.dec
   MdeModulePkg/MdeModulePkg.dec
   MinPlatformPkg/MinPlatformPkg.dec
+
+[Pcd]
+  gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
diff --git a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc
index b77d55dfd550..5ff135136e28 100644
--- a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc
+++ b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc
@@ -84,6 +84,7 @@
   CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
 
   UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
+  BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
   FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
   SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
   SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
-- 
2.36.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#91817): https://edk2.groups.io/g/devel/message/91817
Mute This Topic: https://groups.io/mt/92609644/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list