From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web11.5173.1585108393682743357 for ; Tue, 24 Mar 2020 20:53:13 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: ray.ni@intel.com) IronPort-SDR: J2MP3nZPaGfnaoIYkSulr+tTH/BRIiriuMgG5FLNntiDQEhxwi3UWNvdwDKenQCf9r5lXudzrc QU+WdNq3Qdvw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Mar 2020 20:53:12 -0700 IronPort-SDR: 0pSZ1MpgIgIvxfPVvOpYXPq2nsJ7asVXEBs96Ofso+NPbMYh9QVFzMb+4n8XZkXcjBzFJUn/ZC 99EMumQv4PEQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,302,1580803200"; d="scan'208";a="357696636" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga001.fm.intel.com with ESMTP; 24 Mar 2020 20:53:13 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 24 Mar 2020 20:53:13 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.206]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.137]) with mapi id 14.03.0439.000; Wed, 25 Mar 2020 11:53:12 +0800 From: "Ni, Ray" To: "devel@edk2.groups.io" , "Luo, Heng" CC: "Bi, Dandan" , "Gao, Liming" , "Dong, Eric" Subject: Re: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers Thread-Topic: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to provide logo images and drivers Thread-Index: AQHWAk9QLn5K75Jx00qFoqD/MpOLq6hYrJzQ Date: Wed, 25 Mar 2020 03:53:11 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C4B239E@SHSMSX104.ccr.corp.intel.com> References: <20200325024354.1360-1-heng.luo@intel.com> In-Reply-To: <20200325024354.1360-1-heng.luo@intel.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: ray.ni@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Heng, Can you please remove the prefix from all paths inside DSC= /FDF/INF? We expect PACKAGES_PATH is set to include "edk2-platforms/Features/Intel" a= nd all sub folders inside "edk2-platforms/Features/Intel/". Thanks, Ray > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Heng Luo > Sent: Wednesday, March 25, 2020 10:44 AM > To: devel@edk2.groups.io > Cc: Bi, Dandan ; Gao, Liming ;= Dong, Eric > Subject: [edk2-devel] [Patch V2] Features/Intel: Add LogoFeaturePkg to pr= ovide logo images and drivers >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2584 >=20 > 1. LogoDxe.inf includes a BMP logo in the EFI file, > the driver decodes the BMP file and provide the image > via EDKII_PLATFORM_LOGO_PROTOCOL. > 2. JpegLogoDxe.inf includes a JPEG logo in the EFI file, > the driver use EFI_HII_IMAGE_DECODER_PROTOCOL to decode the Jpeg > file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL. >=20 > Cc: Dandan Bi > Cc: Liming Gao > Cc: Eric Dong > Signed-off-by: Heng Luo > --- >=20 > Notes: > v2: > - Add Cc and Remove Change-Id in commit message >=20 > Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc | = 4 +++- > Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc | = 6 +++++- > Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf | = 6 +++++- > Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf | = 6 +++++- > Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc | 10= 7 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++++++++++++++++++++++++++ > ++++ > Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf | 1= 3 +++++++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf | = 8 ++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf | 1= 0 ++++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf | 5= 2 > ++++++++++++++++++++++++++++++++++++++++++++++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp | Bi= n 0 -> 183366 bytes > Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c | 15= 3 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf | 1= 0 ++++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg | Bi= n 0 -> 11944 bytes > Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf | 5= 2 > ++++++++++++++++++++++++++++++++++++++++++++++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec | 3= 1 +++++++++++++++++++++++++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc | 3= 7 +++++++++++++++++++++++++++++++++++++ > Features/Intel/UserInterface/LogoFeaturePkg/Readme.md | 12= 9 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++ > 17 files changed, 620 insertions(+), 4 deletions(-) >=20 > diff --git a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc > b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc > index 23e7c6474a..ea879680ba 100644 > --- a/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc > +++ b/Features/Intel/AdvancedFeaturePkg/AdvancedFeaturePkg.dsc > @@ -7,7 +7,7 @@ > # 1. Present a consolidated and simplified view of all available advance= d features to board packages. >=20 > # 2. Provide a simple, single package build for all available advanced f= eatures. >=20 > # >=20 > -# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.
>=20 > +# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.
>=20 > # >=20 > # SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > # >=20 > @@ -46,6 +46,8 @@ > gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable = |TRUE >=20 > gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable = |TRUE >=20 > gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable = |TRUE >=20 > + gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable = |TRUE >=20 > + gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable = |FALSE >=20 >=20 >=20 > # >=20 > # This package builds all advanced features. >=20 > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.d= sc > b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc > index 649774edf7..c1bd791525 100644 > --- a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc > +++ b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeatures.dsc > @@ -4,7 +4,7 @@ > # This file is intended to be included into another package so advanced= features >=20 > # can be conditionally built by enabling the respective feature via its= FeaturePCD. >=20 > # >=20 > -# Copyright (c) 2019, Intel Corporation. All rights reserved.
>=20 > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.
>=20 > # >=20 > # SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > # >=20 > @@ -54,3 +54,7 @@ > !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable= =3D=3D TRUE >=20 > !include UserInterface/UserAuthFeaturePkg/Include/UserAuthFeature.dsc >=20 > !endif >=20 > + >=20 > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable =3D=3D TRUE >=20 > + !include UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc >=20 > +!endif >=20 > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf > b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf > index 57b29a42b9..56f6143650 100644 > --- a/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PostMemory.fdf > @@ -5,7 +5,7 @@ > # can be conditionally included in the flash image by enabling the resp= ective >=20 > # feature via its FeaturePCD. >=20 > # >=20 > -# Copyright (c) 2019, Intel Corporation. All rights reserved.
>=20 > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.
>=20 > # >=20 > # SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > # >=20 > @@ -55,3 +55,7 @@ > !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable= =3D=3D TRUE >=20 > !include UserInterface/UserAuthFeaturePkg/Include/PostMemory.fdf >=20 > !endif >=20 > + >=20 > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable =3D=3D TRUE >=20 > + !include UserInterface/LogoFeaturePkg/Include/PostMemory.fdf >=20 > +!endif >=20 > diff --git a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf > b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf > index 20d25dd173..7a76b0efc3 100644 > --- a/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf > +++ b/Features/Intel/AdvancedFeaturePkg/Include/PreMemory.fdf > @@ -5,7 +5,7 @@ > # can be conditionally included in the flash image by enabling the resp= ective >=20 > # feature via its FeaturePCD. >=20 > # >=20 > -# Copyright (c) 2019, Intel Corporation. All rights reserved.
>=20 > +# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.
>=20 > # >=20 > # SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > # >=20 > @@ -55,3 +55,7 @@ > !if gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnable= =3D=3D TRUE >=20 > !include UserInterface/UserAuthFeaturePkg/Include/PreMemory.fdf >=20 > !endif >=20 > + >=20 > +!if gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable =3D=3D TRUE >=20 > + !include UserInterface/LogoFeaturePkg/Include/PreMemory.fdf >=20 > +!endif >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeat= ure.dsc > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc > new file mode 100644 > index 0000000000..3fd1c3372e > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/LogoFeature.dsc > @@ -0,0 +1,107 @@ > +## @file >=20 > +# This is a build description file for the Logo advanced feature. >=20 > +# This file should be included into another package DSC file to build th= is feature. >=20 > +# >=20 > +# The DEC files are used by the utilities that parse DSC and >=20 > +# INF files to generate AutoGen.c and AutoGen.h files >=20 > +# for the build infrastructure. >=20 > +# >=20 > +# Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +## >=20 > + >=20 > +########################################################################= ######## >=20 > +# >=20 > +# Defines Section - statements that will be processed to create a Makefi= le. >=20 > +# >=20 > +########################################################################= ######## >=20 > +[Defines] >=20 > +!ifndef $(PEI_ARCH) >=20 > + !error "PEI_ARCH must be specified to build this feature!" >=20 > +!endif >=20 > +!ifndef $(DXE_ARCH) >=20 > + !error "DXE_ARCH must be specified to build this feature!" >=20 > +!endif >=20 > + >=20 > +########################################################################= ######## >=20 > +# >=20 > +# Packages Section - Make sure PCD can be directly used in a conditional= statement >=20 > +# in a DSC which includes this DSC file. >=20 > +# >=20 > +########################################################################= ######## >=20 > +[Packages] >=20 > + UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec >=20 > + >=20 > +########################################################################= ######## >=20 > +# >=20 > +# Library Class section - list of all Library Classes needed by this fea= ture. >=20 > +# >=20 > +########################################################################= ######## >=20 > +[LibraryClasses] >=20 > + ####################################### >=20 > + # Edk2 Packages >=20 > + ####################################### >=20 > + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf >=20 > + BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.i= nf >=20 > + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf >=20 > + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiB= ootServicesTableLib.inf >=20 > + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEnt= ryPoint.inf >=20 > + >=20 > +[LibraryClasses.common.DXE_DRIVER] >=20 > + ####################################### >=20 > + # Edk2 Packages >=20 > + ####################################### >=20 > + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf >=20 > + >=20 > +########################################################################= ######## >=20 > +# >=20 > +# Component section - list of all components that need built for this fe= ature. >=20 > +# >=20 > +# Note: The EDK II DSC file is not used to specify how compiled binary i= mages get placed >=20 > +# into firmware volume images. This section is just a list of modu= les to compile from >=20 > +# source into UEFI-compliant binaries. >=20 > +# It is the FDF file that contains information on combining binary= files into firmware >=20 > +# volume images, whose concept is beyond UEFI and is described in = PI specification. >=20 > +# There may also be modules listed in this section that are not re= quired in the FDF file, >=20 > +# When a module listed here is excluded from FDF file, then UEFI-c= ompliant binary will be >=20 > +# generated for it, but the binary will not be put into any firmwa= re volume. >=20 > +# >=20 > +########################################################################= ######## >=20 > + >=20 > +# >=20 > +# Feature DXE Components >=20 > +# >=20 > + >=20 > +# @todo: Change below line to [Components.$(DXE_ARCH)] after https://bug= zilla.tianocore.org/show_bug.cgi?id=3D2308 >=20 > +# is completed. >=20 > +[Components.X64] >=20 > + ##################################### >=20 > + # Logo Feature Package >=20 > + ##################################### >=20 > + >=20 > + # Add library instances here that are not included in package componen= ts and should be tested >=20 > + # in the package build. >=20 > + >=20 > + # Add components here that should be included in the package build. >=20 > +!if gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable =3D=3D TRUE >=20 > + UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf >=20 > +!else >=20 > + UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf >=20 > +!endif >=20 > + >=20 > +########################################################################= ########################### >=20 > +# >=20 > +# BuildOptions Section - Define the module specific tool chain flags tha= t should be used as >=20 > +# the default flags for a module. These flags are= appended to any >=20 > +# standard flags that are defined by the build pr= ocess. They can be >=20 > +# applied for any modules or only those modules w= ith the specific >=20 > +# module style (EDK or EDKII) specified in [Compo= nents] section. >=20 > +# >=20 > +# For advanced features, it is recommended to ena= ble [BuildOptions] in >=20 > +# the applicable INF file so it does not affect t= he whole board package >=20 > +# build when this DSC file is active. >=20 > +# >=20 > +########################################################################= ########################### >=20 > +[BuildOptions] >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemo= ry.fdf > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf > new file mode 100644 > index 0000000000..53c85da716 > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PostMemory.fdf > @@ -0,0 +1,13 @@ > +## @file >=20 > +# FDF file for post-memory Logo modules. >=20 > +# >=20 > +# Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +## >=20 > +!if gSmbiosFeaturePkgTokenSpaceGuid.PcdJpgEnable =3D=3D TRUE >=20 > + INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf >=20 > +!else >=20 > + INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf >=20 > +!endif >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemor= y.fdf > b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf > new file mode 100644 > index 0000000000..91cd1c6ec6 > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Include/PreMemory.fdf > @@ -0,0 +1,8 @@ > +## @file >=20 > +# FDF file for pre-memory Logo modules. >=20 > +# >=20 > +# Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +## >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo= .idf > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf > new file mode 100644 > index 0000000000..a39500e043 > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo.idf > @@ -0,0 +1,10 @@ > +// /** @file >=20 > +// Platform Logo image definition file. >=20 > +// >=20 > +// Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +// >=20 > +// SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +// >=20 > +// **/ >=20 > + >=20 > +#image IMG_LOGO Logo.jpg >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogo= Dxe.inf > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf > new file mode 100644 > index 0000000000..47f1672a4c > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf > @@ -0,0 +1,52 @@ > +## @file >=20 > +# The default logo JPEG picture shown on setup screen. >=20 > +# >=20 > +# Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +# >=20 > +## >=20 > + >=20 > +[Defines] >=20 > + INF_VERSION =3D 0x00010005 >=20 > + BASE_NAME =3D JpegLogoDxe >=20 > + FILE_GUID =3D 319CFE1D-8F15-4A7A-BF40-EECA953D87E= F >=20 > + MODULE_TYPE =3D DXE_DRIVER >=20 > + VERSION_STRING =3D 1.0 >=20 > + >=20 > + ENTRY_POINT =3D InitializeLogo >=20 > +# >=20 > +# This flag specifies whether HII resource section is generated into PE= image. >=20 > +# >=20 > + UEFI_HII_RESOURCE_SECTION =3D TRUE >=20 > + >=20 > +# >=20 > +# The following information is for reference only and not required by th= e build tools. >=20 > +# >=20 > +# VALID_ARCHITECTURES =3D IA32 X64 >=20 > +# >=20 > + >=20 > +[Sources] >=20 > + Logo.jpg >=20 > + Logo.c >=20 > + JpegLogo.idf >=20 > + >=20 > +[Packages] >=20 > + MdePkg/MdePkg.dec >=20 > + MdeModulePkg/MdeModulePkg.dec >=20 > + >=20 > +[LibraryClasses] >=20 > + UefiBootServicesTableLib >=20 > + UefiDriverEntryPoint >=20 > + DebugLib >=20 > + >=20 > +[Protocols] >=20 > + gEfiHiiDatabaseProtocolGuid ## CONSUMES >=20 > + gEfiHiiImageExProtocolGuid ## CONSUMES >=20 > + gEfiHiiPackageListProtocolGuid ## PRODUCES CONSUMES >=20 > + gEdkiiPlatformLogoProtocolGuid ## PRODUCES >=20 > + >=20 > +[Depex] >=20 > + gEfiHiiDatabaseProtocolGuid AND >=20 > + gEfiHiiImageExProtocolGuid >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.bmp > new file mode 100644 > index 0000000000000000000000000000000000000000..7ec1aa6a852564e262df59929= 655f7a0f3d5445f > GIT binary patch > literal 183366 > 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 Q > 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 > z zzI)+?7upq2ISAl?)m> z&6)s~iMmmWA_=3D-7h)|eQUGdBP_Yp%j44l<}C`X0CKU>d6J6>gMiDO~Bh!DpaQd@d! > zXm?|^1UE7A#oOL_=3Dbfhok-d`X^_Fm6$6_%tQ#Hj_7(OZjWs-qFw0z{%hci90wfTs4 > z%D3Ns`}pIJTWG^gt&nhK%a%QK=3D#Z0f^5dw2#96hC z+GSg|Y~kYwD=3Dj?HoWXsrI<{Ei%Lyplz3Z;K)H6>erQu^TIOn63X!(e-gXPNG;v=3Ds6 > zq36dRe~c3nYmff2%PwOUsScf6UsNEVa7yG9^~{q=3DY5157&iN=3DMT0RnS%nF}j@e!Y0 > zpwzHoLs)ag6<2V4&pr1%^2j5K(Ba5Ppqu=3DZb)-nPI~A*^n9T4|5h#-k1fu2R2`8L@ > z8?Kr)Yg&9{w%DRY3o8sgI;E`kU`2@AKt<%W)N-Ke6Hh#$m~)cJ3?Gw3JL_dd%SX^4 > zLNtR+h-n8d`QU>O9(dpZZsA7nrI%h(M2zt*5u)WEMB#1#XT^$@36l(CF}5(&f04M=3D > z4O3zBY!MNNoR4_*#J@MuIq@gY&Jhcwv<{hEuwVgOAr&iDRBY_sci%10O@2yzjT8=3D6 > z6&q`k83Zf@BIl!(ZO@)P@xX>RZ&p(oqvG}% z0AoDjR4V@3v}vQ&mNU*cgGZP->Z-{>E}Lj72YB;P|MF@z!6Y^alsE$D*AY`yg@$&T > z7hZUw#6dI7HweUpz@$l&Y@#V1TzTb{F;&K7YY-@91TYCH=3D%Qaj%-3Iky_69%Z8r$S > zgaD!3cJ10FpBGYc|Ka&htE#aVB)Z~X~J > z0s_pDv1Rj3Y!Vm*B0->4t5y=3D;6}&~9sWZ zqG(r;bdrk%?ae{keVgFqqlE@mGhMoL(cMMzEyyG=3D2!H@;JZRTQcvtY&C!c(RR$eIp > z=3D;osZ2y^YeefvfjEV~rIG;Ne4fI0uVb?XW;PJYoc7?Ee5kGo!cwD7^I1@#F_FEJnO > zHLWNX0?dOfFQ#(px$l<9NY&~W?9QHh?m0II&MV)1^9@dljFM8ZBsmA=3DqIn)*K@}my > zU_@ONHU~giO=3D#S>@tbeH>ExjM81I@uS_*4ix#`xFGz9 z;c76PAaufx9XsSGegFOU%a$!;*AkEuuAwO|iwLj;fgz+^sJ!mt$~B8kjDW| > zZ7TLJ7?6$~JC@;Ygr%FTa)tm(I9mSyoy1i4^^r5s+|5Dje)Q zyPB0)H;g5I1xIsUfxo?E$-cg5(ITdtB@Up_{L@Z5ZO)uI3{Y*9BnRy9vJMt&Fg~Gr > z<}}R+5b9$8{{0exk=3D#NrC2fw5(*reL^_(FoB`{jIHg4RAt1$*D>1l$gNs > zUpetgK%9aS+4>LDDQw7Y+O)|FL-+Lq2M*w;+UUfF!90u4R<2x`ubW#Q6t8UEy7kmk > zPt9V(ldm)5d0ai<@KzC9D;X~32M!#FOTgqSY)VWL0X~aF!{I%wB_7Vi8#Zh>@x&98 > ztaA>^V%?^H|Nb9+^pO)u-($>9@tq4Xt5vI(0}xCT1O)IeNBl=3D$F_0u!wQ3cPt%PjN > zsUiY|i)9OP?b@{xguQOz9*{6A#^_QJ>XavADW0eSii>_;B7wP|S-^>;qY0q7aN$Dq > zD7>JST*pNxJD6B}8w;;U`Xb>>h`x&JV_k1lZh4qCZJN<7iMH>mR;|kJEo!cAv{kNP > zO~YOZ;a7~2SG4^SQ*La8J^JXQVWx_fRFDHZ*D+PnWXsTn5Ma6sK2E|C`I;S1f<74S > zf^>=3D#>R7X9&nC#Dv)6(hZ`-!b%vloXWxjEpJ9mETt+#@8ll2rnu5p$^KtRH^Bv5Bl > zgf9XYTyOyslaTX7TO`QJtls!y9&LgqO_~sXTGyeU-DUQ{-o1N?2XXVwHyd5qXgf$T > zH~LX4(16`>1rM0i^y$+_v1pSlas;r?nmTpr!Gi}2_KxmFVtvk^KfhP6UNvgeh`g#M > zLni`k8S@SdwuJ80tpxZu{q)nFrI_QQAb^JfIu~cQ;XjvlU+>wohiHSp`qi(hSFc`_ > zM&+{5DpjfwMUI||YG`Wp7mg;F#pDvPOg9RBs=3DhkqDOEy?b|}x|rRQ > z01|@FHypFP{r20Dbcc`$u~P{`7ob+=3Dk;D+FUAy+UapU;L34Is-6te zU9-_F>C<}k>Jc~<74Gn`7t8@$JR+D&DqwD<3ITLtFS+Cr+<*jd$XQST+!xVRzzT2P > zym{=3D!5O58DgQ-Fw`N}XvY1_6f8;C?~bi)r9D}AaLZ7N1}lD%rnm% > zI&>&1k?_igMIk&$@Ljm>y6af8&9~hvqj%=3DlSR-O!j@_J!=3DLav`6t92y;fG8W&8#63 > zUKBkOBC0daT)A>(geyOCL1M2Hn@zSm$B!S6s(kC#tr<(B+fZ~Uf>i(_@RI4&sS_>% > zSFBhO-@wC-D&vqIJ$e}Bw_qKY@~2SBVuZ;Aguo5%u20|!lFXnBXP6A_SaM{HSEo*$ > zR2c+OnRCxQ_wvgx#}01DkRj+C0#{(G{4kL6 zs%P2JW__5gG zUi3T%4H`6Y;zS(FV7Z3N{R9T~zKBr=3D)aQ)aTO@Lx#Y`}t#2Lu5&p!M0*I)ZeOBxdJ > zao@LZAN0Yy0;|6KaF~xWAzxldjSeRcHd$9;O3Mx%wi1vXArEFRlURE#Yu4LuznynZ > z7NyA4IdTNhl4T)%#E22=3D*RPLu=3DQ=3DT|&Rjt@4J%cu6nTf540D43gF4m^XUv$fd-v|l > z33>V}Y-pGprX=3D4Ge15V zpOv9uzDbdu)}fixqD2d|G|@URBU|U2fzS_2moDYSg;!4#TQEHmTT(T_{R`s9wjG)P > z1fO-vXYP+tfncW+g#qT>sLz#DznjKp0s;2c*;r=3D{A4fopZ`q#6%9e`C+k*`hS~Pw7 > zbabC;)vASiz)W zn%JN zwA5zJnl*g*aK3tsy|H05VN>!gc&2s15Fm^u17K|J(IsoppaHs_ke5#tu{Bvx8Z%}L > zK1{IE<%g{qj7F7x)TmJ~i}@^G-23+J+p}j+bmTgA?AWGF8&-)gz4TIop9VWq > Q9t=3D$LltI8CkSzrM7XaWYkpKVy >=20 > literal 0 > HcmV?d00001 >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c > new file mode 100644 > index 0000000000..a636b086ca > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.c > @@ -0,0 +1,153 @@ > +/** @file >=20 > + Logo DXE Driver, install Edkii Platform Logo protocol. >=20 > + >=20 > +Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
>=20 > +SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > + >=20 > +**/ >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > + >=20 > +typedef struct { >=20 > + EFI_IMAGE_ID ImageId; >=20 > + EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute; >=20 > + INTN OffsetX; >=20 > + INTN OffsetY; >=20 > +} LOGO_ENTRY; >=20 > + >=20 > +EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx; >=20 > +EFI_HII_HANDLE mHiiHandle; >=20 > +LOGO_ENTRY mLogos[] =3D { >=20 > + { >=20 > + IMAGE_TOKEN (IMG_LOGO), >=20 > + EdkiiPlatformLogoDisplayAttributeCenter, >=20 > + 0, >=20 > + 0 >=20 > + } >=20 > +}; >=20 > + >=20 > +/** >=20 > + Load a platform logo image and return its data and attributes. >=20 > + >=20 > + @param This The pointer to this protocol instance. >=20 > + @param Instance The visible image instance is found. >=20 > + @param Image Points to the image. >=20 > + @param Attribute The display attributes of the image returned. >=20 > + @param OffsetX The X offset of the image regarding the Attri= bute. >=20 > + @param OffsetY The Y offset of the image regarding the Attri= bute. >=20 > + >=20 > + @retval EFI_SUCCESS The image was fetched successfully. >=20 > + @retval EFI_NOT_FOUND The specified image could not be found. >=20 > +**/ >=20 > +EFI_STATUS >=20 > +EFIAPI >=20 > +GetImage ( >=20 > + IN EDKII_PLATFORM_LOGO_PROTOCOL *This, >=20 > + IN OUT UINT32 *Instance, >=20 > + OUT EFI_IMAGE_INPUT *Image, >=20 > + OUT EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE *Attribute, >=20 > + OUT INTN *OffsetX, >=20 > + OUT INTN *OffsetY >=20 > + ) >=20 > +{ >=20 > + UINT32 Current; >=20 > + if (Instance =3D=3D NULL || Image =3D=3D NULL || >=20 > + Attribute =3D=3D NULL || OffsetX =3D=3D NULL || OffsetY =3D=3D NUL= L) { >=20 > + return EFI_INVALID_PARAMETER; >=20 > + } >=20 > + >=20 > + Current =3D *Instance; >=20 > + if (Current >=3D ARRAY_SIZE (mLogos)) { >=20 > + return EFI_NOT_FOUND; >=20 > + } >=20 > + >=20 > + (*Instance)++; >=20 > + *Attribute =3D mLogos[Current].Attribute; >=20 > + *OffsetX =3D mLogos[Current].OffsetX; >=20 > + *OffsetY =3D mLogos[Current].OffsetY; >=20 > + return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle, mLogos[Curren= t].ImageId, Image); >=20 > +} >=20 > + >=20 > +EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo =3D { >=20 > + GetImage >=20 > +}; >=20 > + >=20 > +/** >=20 > + Entrypoint of this module. >=20 > + >=20 > + This function is the entrypoint of this module. It installs the Edkii >=20 > + Platform Logo protocol. >=20 > + >=20 > + @param ImageHandle The firmware allocated handle for the EFI im= age. >=20 > + @param SystemTable A pointer to the EFI System Table. >=20 > + >=20 > + @retval EFI_SUCCESS The entry point is executed successfully. >=20 > + >=20 > +**/ >=20 > +EFI_STATUS >=20 > +EFIAPI >=20 > +InitializeLogo ( >=20 > + IN EFI_HANDLE ImageHandle, >=20 > + IN EFI_SYSTEM_TABLE *SystemTable >=20 > + ) >=20 > +{ >=20 > + EFI_STATUS Status; >=20 > + EFI_HII_PACKAGE_LIST_HEADER *PackageList; >=20 > + EFI_HII_DATABASE_PROTOCOL *HiiDatabase; >=20 > + EFI_HANDLE Handle; >=20 > + >=20 > + Status =3D gBS->LocateProtocol ( >=20 > + &gEfiHiiDatabaseProtocolGuid, >=20 > + NULL, >=20 > + (VOID **) &HiiDatabase >=20 > + ); >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + >=20 > + Status =3D gBS->LocateProtocol ( >=20 > + &gEfiHiiImageExProtocolGuid, >=20 > + NULL, >=20 > + (VOID **) &mHiiImageEx >=20 > + ); >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + >=20 > + // >=20 > + // Retrieve HII package list from ImageHandle >=20 > + // >=20 > + Status =3D gBS->OpenProtocol ( >=20 > + ImageHandle, >=20 > + &gEfiHiiPackageListProtocolGuid, >=20 > + (VOID **) &PackageList, >=20 > + ImageHandle, >=20 > + NULL, >=20 > + EFI_OPEN_PROTOCOL_GET_PROTOCOL >=20 > + ); >=20 > + if (EFI_ERROR (Status)) { >=20 > + DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in PE/CO= FF resource section\n")); >=20 > + return Status; >=20 > + } >=20 > + >=20 > + // >=20 > + // Publish HII package list to HII Database. >=20 > + // >=20 > + Status =3D HiiDatabase->NewPackageList ( >=20 > + HiiDatabase, >=20 > + PackageList, >=20 > + NULL, >=20 > + &mHiiHandle >=20 > + ); >=20 > + if (!EFI_ERROR (Status)) { >=20 > + Handle =3D NULL; >=20 > + Status =3D gBS->InstallMultipleProtocolInterfaces ( >=20 > + &Handle, >=20 > + &gEdkiiPlatformLogoProtocolGuid, &mPlatformLogo, >=20 > + NULL >=20 > + ); >=20 > + } >=20 > + return Status; >=20 > +} >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf > new file mode 100644 > index 0000000000..fd9c489815 > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.idf > @@ -0,0 +1,10 @@ > +// /** @file >=20 > +// Platform Logo image definition file. >=20 > +// >=20 > +// Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +// >=20 > +// SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +// >=20 > +// **/ >=20 > + >=20 > +#image IMG_LOGO Logo.bmp >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/Logo.jpg > new file mode 100644 > index 0000000000000000000000000000000000000000..d1d099789fa794648b86c046f= 0320a553954764e > GIT binary patch > literal 11944 > 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 F > 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 > z z%dt$oANAhhUA5or11|lcp*|;ww*x8)3VP^z*kA6OpErN=3D0m))ADYTF@`CT)6la8{? > z+f|ZWf991XRNc$TvQ|@weV=3D#ElM zs6kr|WS5Gg3(NEg_h1YzK}k#5M~9UYqs%eZ=3DH z{(ZLpi2xlAu@RCsm(4Sx`08)mNv&L8r%^9&=3DKXXiq!o0uc3c)s_3#dasg&~qSB{bV > z8g?eJR!y(dC;=3D%y-V>f zCA%k+Ua0Ux^ZzjSk7Pm z*40*Kn2|Lvni|*l96DD3|Fz|IIHPh>T($*^maO zLrpme#6GUjiz)KUncK_9RK5TE3Hpgo)b5S z^P%@%9RB)C_C;*~yZ4HspGFI0Lk$XKdV!fb#%D{fU>^&ro^xH*#G(uFur6owzMXtg > zH^0Zh(t-EmiaBl>`Tcls+HJnZoyQ30vFByCb0O*`%L)nX5D4}#VfMp)J~NWKw40M$ > z46D6ToGO~*lIx|Qb75H3?+#X*QJ4HgOgj?bLnD}%eB&%k9(+&PNM-6vy1)%G5g&Xm > zBX`D*Z}!UP+%JV68h}7!&Cyuz&u9V}7g4K{@atIECE=3DzaGy5se=3Dl;E2KAxQQ7dY`s > zr3-FihZjNNS)Jd^rnQehLso_+hXq2zxeW8)=3Dt8qkWCCMC<+zh+vXF5M*tI8tPmHQp > zcIF<>JxmNil^W1!9({@=3DN~PdvE&Wi)<0FQR5(FAm=3DR)N;VG|Ne61+HdUTm1sjn}z{ > z8d8p$uq*YdNAFH_9Oyf z;&6741o<3%PP@Ksaa4OB3)64J7cnWLei+@k8LxE27ubX-qS4?UH?hja^lyZXxwA;| > lp0r(+`K^)Y&AL5T(>;a;tp795|91lNzXsubc7WVX{~rvVe^USe >=20 > literal 0 > HcmV?d00001 >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.= inf > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf > new file mode 100644 > index 0000000000..5ef93461ee > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf > @@ -0,0 +1,52 @@ > +## @file >=20 > +# The default logo bitmap picture shown on setup screen. >=20 > +# >=20 > +# Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +# >=20 > +## >=20 > + >=20 > +[Defines] >=20 > + INF_VERSION =3D 0x00010005 >=20 > + BASE_NAME =3D LogoDxe >=20 > + FILE_GUID =3D 76ED6631-44FE-4ED2-8B5D-1B5355BB25E= 8 >=20 > + MODULE_TYPE =3D DXE_DRIVER >=20 > + VERSION_STRING =3D 1.0 >=20 > + >=20 > + ENTRY_POINT =3D InitializeLogo >=20 > +# >=20 > +# This flag specifies whether HII resource section is generated into PE= image. >=20 > +# >=20 > + UEFI_HII_RESOURCE_SECTION =3D TRUE >=20 > + >=20 > +# >=20 > +# The following information is for reference only and not required by th= e build tools. >=20 > +# >=20 > +# VALID_ARCHITECTURES =3D IA32 X64 >=20 > +# >=20 > + >=20 > +[Sources] >=20 > + Logo.bmp >=20 > + Logo.c >=20 > + Logo.idf >=20 > + >=20 > +[Packages] >=20 > + MdePkg/MdePkg.dec >=20 > + MdeModulePkg/MdeModulePkg.dec >=20 > + >=20 > +[LibraryClasses] >=20 > + UefiBootServicesTableLib >=20 > + UefiDriverEntryPoint >=20 > + DebugLib >=20 > + >=20 > +[Protocols] >=20 > + gEfiHiiDatabaseProtocolGuid ## CONSUMES >=20 > + gEfiHiiImageExProtocolGuid ## CONSUMES >=20 > + gEfiHiiPackageListProtocolGuid ## PRODUCES CONSUMES >=20 > + gEdkiiPlatformLogoProtocolGuid ## PRODUCES >=20 > + >=20 > +[Depex] >=20 > + gEfiHiiDatabaseProtocolGuid AND >=20 > + gEfiHiiImageExProtocolGuid >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.d= ec > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec > new file mode 100644 > index 0000000000..1418eb2137 > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dec > @@ -0,0 +1,31 @@ > +## @file >=20 > +# This package provides advanced feature functionality for LOGO. >=20 > +# This package should only depend on EDK II Core packages. >=20 > +# >=20 > +# The DEC files are used by the utilities that parse DSC and >=20 > +# INF files to generate AutoGen.c and AutoGen.h files >=20 > +# for the build infrastructure. >=20 > +# >=20 > +# Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +## >=20 > + >=20 > +[Defines] >=20 > + DEC_SPECIFICATION =3D 0x00010017 >=20 > + PACKAGE_NAME =3D LogoFeaturePkg >=20 > + PACKAGE_GUID =3D A1A87B33-C3E3-497B-978F-2FF7813FEB21 >=20 > + PACKAGE_VERSION =3D 0.1 >=20 > + >=20 > +[Includes] >=20 > + Include >=20 > + >=20 > +[LibraryClasses] >=20 > + >=20 > +[Guids] >=20 > + gLogoFeaturePkgTokenSpaceGuid =3D {0x567199de, 0xb448, 0x4aa0, {0x99= , 0x4e, 0xd5, 0xd6, 0x82, 0x59, 0x91, 0x17}} >=20 > + >=20 > +[PcdsFeatureFlag] >=20 > + gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable|FALSE|BOOLEAN|0xA00= 00001 >=20 > + gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable|FALSE|BOOLEAN|0xA0000002 >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.d= sc > b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc > new file mode 100644 > index 0000000000..717e074c69 > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/LogoFeaturePkg.dsc > @@ -0,0 +1,37 @@ > +## @file >=20 > +# This package provides advanced feature functionality for LOGO. >=20 > +# This package should only depend on EDK II Core packages. >=20 > +# >=20 > +# The DEC files are used by the utilities that parse DSC and >=20 > +# INF files to generate AutoGen.c and AutoGen.h files >=20 > +# for the build infrastructure. >=20 > +# >=20 > +# Copyright (c) 2020, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +## >=20 > + >=20 > +[Defines] >=20 > + PLATFORM_NAME =3D LogoFeaturePkg >=20 > + PLATFORM_GUID =3D 0618AB19-9507-4D6A-A0D7-1F43D74736C= F >=20 > + PLATFORM_VERSION =3D 0.1 >=20 > + DSC_SPECIFICATION =3D 0x00010005 >=20 > + OUTPUT_DIRECTORY =3D Build/$(PLATFORM_NAME) >=20 > + SUPPORTED_ARCHITECTURES =3D IA32|X64 >=20 > + BUILD_TARGETS =3D DEBUG|RELEASE|NOOPT >=20 > + SKUID_IDENTIFIER =3D DEFAULT >=20 > + >=20 > +[LibraryClasses] >=20 > + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf >=20 > + BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.i= nf >=20 > + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf >=20 > + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiB= ootServicesTableLib.inf >=20 > + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEnt= ryPoint.inf >=20 > + >=20 > +[LibraryClasses.common.DXE_DRIVER] >=20 > + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf >=20 > + >=20 > +[Components] >=20 > + UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf >=20 > + UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf >=20 > diff --git a/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md > b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md > new file mode 100644 > index 0000000000..092a055a2c > --- /dev/null > +++ b/Features/Intel/UserInterface/LogoFeaturePkg/Readme.md > @@ -0,0 +1,129 @@ > +# Overview >=20 > +* **Feature Name:** Logo >=20 > +* **PI Phase(s) Supported:** DXE >=20 > +* **SMM Required?** No >=20 > + >=20 > +## Purpose >=20 > +This feature provides the Logo image and driver that produces EDKII_PLAT= FORM_LOGO_PROTOCOL: >=20 > + >=20 > +1. LogoDxe.inf includes a BMP logo in the EFI file, the driver provides = the image via EDKII_PLATFORM_LOGO_PROTOCOL. >=20 > +2. JpegLogoDxe.inf includes a JPEG logo in the EFI file, the driver uses= EFI_HII_IMAGE_DECODER_PROTOCOL to decode the > JPEG file and provide the image via EDKII_PLATFORM_LOGO_PROTOCOL. >=20 > + >=20 > +# High-Level Theory of Operation >=20 > + >=20 > +The driver produces a EDKII_PLATFORM_LOGO_PROTOCOL to provide a logo pic= ture shown on setup screen. >=20 > + >=20 > +The Logo file is built in HII package list as EFI resource, the driver u= ses EFI_HII_DATABASE_PROTOCOL >=20 > +to the publish HII package list to HII Database and get images via EFI_H= II_IMAGE_EX_PROTOCOL. >=20 > + >=20 > +## Firmware Volumes >=20 > + >=20 > +* PostMemory >=20 > + >=20 > +## Modules >=20 > + >=20 > +A bulleted list of the modules that make up the feature. >=20 > + >=20 > +* LogoDxe >=20 > +* JpegLogoDxe >=20 > + >=20 > +## LogoDxe >=20 > + >=20 > +This driver provides a bitmap image via EDKII_PLATFORM_LOGO_PROTOCOL. >=20 > + >=20 > +## JpegLogoDxe >=20 > + >=20 > +This driver uses EFI_HII_IMAGE_DECODER_PROTOCOL to decode the jpeg data = and provide a bitmap image via >=20 > +EDKII_PLATFORM_LOGO_PROTOCOL. >=20 > + >=20 > +## Key Functions >=20 > + >=20 > +* This feature produces a EDKII_PLATFORM_LOGO_PROTOCOL which could be us= ed by consumer such as > Edk2\MdeModulePkg\Library\BootLogoLib. >=20 > + >=20 > +## Configuration >=20 > + >=20 > +* gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable >=20 > + TRUE: Enable logo feature >=20 > + FALSE: Disable logo feature >=20 > +* gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable >=20 > + TRUE: Use jpeg logo >=20 > + FALSE: Use bitmap logo >=20 > + >=20 > +## Data Flows >=20 > + >=20 > +Architecturally defined data structures and flows for the feature. >=20 > + >=20 > +### Data flows of LogoDxe >=20 > + >=20 > +```txt >=20 > +| Consumer | | LogoFeatruePkg | |HiiDatabaseDxe| >=20 > +------------ ------------------ ---------------- >=20 > + | | | >=20 > + | |--bitmap image data->| >=20 > + |<---bitmap data--|<-return bitmap data-| >=20 > +``` >=20 > + >=20 > +### Data flows of JpegLogoDxe >=20 > + >=20 > +```txt >=20 > +| Consumer | | LogoFeatruePkg | |HiiDatabaseDxe| | EFI_HII_IMAG= E_DECODER_PROTOCOL | >=20 > +------------ ------------------ ---------------- --------------= -------------------- >=20 > + | | | = | >=20 > + | |---Jpeg Image data-->|---------decode Jpeg-----= -->| >=20 > + |<---bitmap data--|<-return bitmap data-|<-----return bitmap data-= ---| >=20 > +``` >=20 > + >=20 > +## Control Flows >=20 > + >=20 > +Consumer gets image from the logo driver via EDKII_PLATFORM_LOGO_PROTOCO= L. >=20 > + >=20 > +## Build Flows >=20 > + >=20 > +No any special build flows is needed. >=20 > + >=20 > +## Test Point Results >=20 > + >=20 > +Not available. >=20 > + >=20 > +## Functional Exit Criteria >=20 > + >=20 > +* Check wether EDKII_PLATFORM_LOGO_PROTOCOL->GetImage() return a default= Intel logo. >=20 > +* If using jpeg logo, a dex driver which produces EFI_HII_IMAGE_DECODER_= PROTOCOL(name is >=20 > +gEfiHiiImageDecoderNameJpegGuid) is necessary, it is used to decode Jpeg= data. >=20 > + >=20 > +## Feature Enabling Checklist >=20 > + >=20 > +### Option 1 >=20 > + >=20 > +* Include AdvancedFeatures.dsc in platform dsc file, and use pcd to enab= le the feature. >=20 > + >=20 > +```dsc >=20 > + gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable = |TRUE >=20 > + gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable = |FALSE >=20 > + !include Include/AdvancedFeatures.dsc >=20 > +``` >=20 > + >=20 > +* Include PreMemory.fdf and inPostMemory.fdf in platform fdf file >=20 > + >=20 > +```fdf >=20 > +!include Include/PreMemory.fdf >=20 > +!include Include/PostMemory.fdf >=20 > +``` >=20 > + >=20 > +### Option 2 >=20 > + >=20 > +* To use bitmap logo, include "UserInterface/LogoFeaturePkg/LogoDxe/Logo= Dxe.inf" in platform dsc file, and include >=20 > +"INF UserInterface/LogoFeaturePkg/LogoDxe/LogoDxe.inf" in platform fdf f= ile. >=20 > + >=20 > +* To use jpeg logo, include "UserInterface/LogoFeaturePkg/LogoDxe/JpegLo= goDxe.inf" in platform dsc file, and include >=20 > +"INF UserInterface/LogoFeaturePkg/LogoDxe/JpegLogoDxe.inf" in platform f= df file. >=20 > + >=20 > +## Performance Impact >=20 > + >=20 > +* LogoDxe >=20 > + * EFI size: 180 KB >=20 > + * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about 18 mil= liseconds >=20 > + >=20 > +* JpegLogoDxe >=20 > + * EFI size: 13.6 KB >=20 > + * Time spent in EDKII_PLATFORM_LOGO_PROTOCOL->GetImage(): about 80 mil= liseconds >=20 > -- > 2.24.0.windows.2 >=20 >=20 > -=3D-=3D-=3D-=3D-=3D-=3D > Groups.io Links: You receive all messages sent to this group. >=20 > View/Reply Online (#56238): https://edk2.groups.io/g/devel/message/56238 > Mute This Topic: https://groups.io/mt/72533665/1712937 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@intel.com] > -=3D-=3D-=3D-=3D-=3D-=3D