From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id A59F6941154 for ; Tue, 14 May 2024 08:16:21 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=NvoVFV6t4IHCF0uH6vCTHC+3+DK4I0p8NbR3Ch9bDe4=; c=relaxed/simple; d=groups.io; h=Received-SPF:From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Received-SPF:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20240206; t=1715674579; v=1; b=0+kSXMUVq/+MJjuL9DG56lcsqorgPO5AGeWJJfqXYj6KXxKX5CIYOQGEUmbGj40DXH1kuYTT tKV8Nk1hioh1fGVEwuNf5UYhs8wR05v4Hc45CC8szbi6x3ashcXigbrY+xPeH/uZTga14vID1Bz qEJXGlhdpLcwVhYqmu6eBADKj4ARjJw3wdxqyZX9hM6ICVofdsBG8nb5XwLXil6kvWsZk1r/Udd bo5Cyr8lbRR9IoeRul0VaA5q9eO1CD0rqQMlSgrfCqq3Te8pnZKVQ+JDATIK+H3UgHohOuZcJN+ 2mKg1qCyFSqEmZ6MUrNQaWfYmtrJ+WHALnvR0orxv9vKQ== X-Received: by 127.0.0.2 with SMTP id r04tYY7687511xHQuY58Ccc1; Tue, 14 May 2024 01:16:19 -0700 X-Received: from NAM04-MW2-obe.outbound.protection.outlook.com (NAM04-MW2-obe.outbound.protection.outlook.com [40.107.101.65]) by mx.groups.io with SMTP id smtpd.web10.10128.1715674573133235884 for ; Tue, 14 May 2024 01:16:13 -0700 X-Received: from DS7PR03CA0007.namprd03.prod.outlook.com (2603:10b6:5:3b8::12) by IA1PR12MB7493.namprd12.prod.outlook.com (2603:10b6:208:41b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55; Tue, 14 May 2024 08:16:09 +0000 X-Received: from DS1PEPF00017092.namprd03.prod.outlook.com (2603:10b6:5:3b8:cafe::55) by DS7PR03CA0007.outlook.office365.com (2603:10b6:5:3b8::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55 via Frontend Transport; Tue, 14 May 2024 08:16:09 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB03.amd.com; pr=C X-Received: from SATLEXMB03.amd.com (165.204.84.17) by DS1PEPF00017092.mail.protection.outlook.com (10.167.17.135) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7587.21 via Frontend Transport; Tue, 14 May 2024 08:16:09 +0000 X-Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 14 May 2024 03:16:07 -0500 X-Received: from BLR-LAB-SFW01.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Tue, 14 May 2024 03:16:06 -0500 From: "Abdul Lateef Attar via groups.io" To: CC: Abdul Lateef Attar , Abner Chang , Paul Grimes Subject: [edk2-devel] [PATCH 1/6] AmdPlatformPkg: Adds LogoDxe driver Date: Tue, 14 May 2024 13:45:43 +0530 Message-ID: In-Reply-To: References: MIME-Version: 1.0 Received-SPF: None (SATLEXMB03.amd.com: AbdulLateef.Attar@amd.com does not designate permitted sender hosts) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017092:EE_|IA1PR12MB7493:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a0c0107-298c-40aa-7f9a-08dc73ee1c34 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?a68cxsf5vN9NUmRcYWeUrxiYS85wccU+NT30q5BZ9pPb5z9O3D9EJvfqfyB5?= =?us-ascii?Q?cXWzE79P20NAXIxxuMenTC1Jmr06il9++E1k2pcs5IZsnjKolx4HILpjCdyh?= =?us-ascii?Q?wNQlhR/nHsf4Rha8kI+9qv6Y2SbXTEFzuL4ULUYaij+CHa7TQ6eGvB+77G6T?= =?us-ascii?Q?hqO1MD++Mi5m2VVQv3Z9+ojk6LoAqkaI5Dd8/FxxhmmEiK75YIOySU2H4nl7?= =?us-ascii?Q?NN8T2SKgMd3SwKS9cPnxxl8+LEp7oijY9Fk4TEr66sWqfwQoL3K97yBDUVRa?= =?us-ascii?Q?/Jvi+twmiRDlw4rVgqPylrnSCEQrNoM8fDYfOmww/VRKXk5nxmPQTLEbHuxw?= =?us-ascii?Q?u5cWdhHOOqCoNkT93l/EBAYcFOsLt4fvWwNjbjHUDCFsVBb7m91dUUGWOBKO?= =?us-ascii?Q?xnZBQniiFm/dSjGaL8v3J9BmtQ7w69AK5GRZBXhnaoxKyBWPkdCCDHfiLrWn?= =?us-ascii?Q?bTARy43Nd+bZCu/IJPT7Lj67xPmopgjh5ALtrn7mTbjeQvp7ZDS3n2pIJLrO?= =?us-ascii?Q?6mmlAP+fbQQs7QtuVEELxMqoQD80OaHAjV3K97tDVPpAJ3cFBW2QgvMHFOGh?= =?us-ascii?Q?n5KovGV9jS6u12jrIsQgAJIxy6zlxe60r+4lmJrjtmNQvZZPdw/fgsInMdJI?= =?us-ascii?Q?HIdiRUqTF41FnrqruZX0kpckXFrFoORZwpZaYkvlOzXy/k2fWbVEFG0imHLU?= =?us-ascii?Q?CxpwPm1d8zvMuT/1aTkFRDBLJkxan6WiPh07zoT2zSimkRETuFVEyb0ms3/+?= =?us-ascii?Q?jz/RCK8jvjJUEVT5W+CA85jggGwYTTFZgRZFn39KgGWQ8ZHHuZRVycTbSs7K?= =?us-ascii?Q?pTqz9MCfqgBRd88Ri9Bc9KoPIkVNvk4vJHUJfYGC7MfjcCwqNFT0z1rh8hBU?= =?us-ascii?Q?EBHf6BueH3aBs8Scpd0BKMNuXGuqO9spfr9sSMGcaCbcf0+5JHx5K5Zf0119?= =?us-ascii?Q?MDCkwgUlrcv/hQ5B0KkRILYERDkiUk9Mei0QxJnHMd2ICmbHaVhYg43BIc7Z?= =?us-ascii?Q?AREmtudu7H7Jsa9hA/oEuANrjF11fUSIpT9uKIjpYb/WxUQTV+N6zsXuvQpt?= =?us-ascii?Q?EXtEErXTBebLlOgdnNag/RBYGP5jUlBGGZvjCvDM1l6bl82zM0XgIf/yxjhI?= =?us-ascii?Q?OarhZUUKjLri9ajsQxuB6BJ20JWd3Ta99WzzZeStL11L2Wmy975eccR0R8xu?= =?us-ascii?Q?xIVzmo9irTWj8XkZjahYlNpWKK7E4x9bTAuXHd+56k6T5l+u6sIloCrHx8gq?= =?us-ascii?Q?NoA48aiob9sz2HGZp94mClaLsh3EjQd8QHkz+dSnqtErdG5et6C552yhFfLe?= =?us-ascii?Q?F2QViw0kt3QDPTbMtnpCLHW3dhTEBd8Wesaj/z4NLr7sJhkjnXkE8PuYi+NH?= =?us-ascii?Q?iNuoARw=3D?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 May 2024 08:16:09.1131 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a0c0107-298c-40aa-7f9a-08dc73ee1c34 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF00017092.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7493 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Tue, 14 May 2024 01:16:13 -0700 Resent-From: AbdulLateef.Attar@amd.com Reply-To: devel@edk2.groups.io,AbdulLateef.Attar@amd.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: WXvTlD1WoeSMDtLxEHznTMyKx7686176AA= Content-Transfer-Encoding: quoted-printable Content-Type: text/plain X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=0+kSXMUV; dmarc=pass (policy=none) header.from=groups.io; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io Adds LogoDxe driver to display AMD logo. Cc: Abner Chang Cc: Paul Grimes Signed-off-by: Abdul Lateef Attar --- .../AMD/AmdPlatformPkg/AmdPlatformPkg.dec | 10 +- .../AMD/AmdPlatformPkg/AmdPlatformPkg.dsc | 31 ++- .../Universal/LogoDxe/LogoDxe/JpegLogo.idf | 10 + .../Universal/LogoDxe/LogoDxe/JpegLogoDxe.inf | 57 +++++ .../Universal/LogoDxe/LogoDxe/Logo.bmp | Bin 0 -> 522054 bytes .../Universal/LogoDxe/LogoDxe/Logo.c | 194 ++++++++++++++++++ .../Universal/LogoDxe/LogoDxe/Logo.h | 23 +++ .../Universal/LogoDxe/LogoDxe/Logo.idf | 10 + .../Universal/LogoDxe/LogoDxe/Logo.jpg | Bin 0 -> 75403 bytes .../Universal/LogoDxe/LogoDxe/LogoDxe.inf | 58 ++++++ .../Universal/LogoDxe/LogoDxe/S3Logo.bmp | Bin 0 -> 964114 bytes .../Universal/LogoDxe/LogoDxe/S3Logo.idf | 10 + .../Universal/LogoDxe/LogoDxe/S3LogoDxe.inf | 57 +++++ 13 files changed, 458 insertions(+), 2 deletions(-) create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/J= pegLogo.idf create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/J= pegLogoDxe.inf create mode 100755 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/L= ogo.bmp create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/L= ogo.c create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/L= ogo.h create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/L= ogo.idf create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/L= ogo.jpg create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/L= ogoDxe.inf create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S= 3Logo.bmp create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S= 3Logo.idf create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S= 3LogoDxe.inf diff --git a/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dec b/Platform/AMD/= AmdPlatformPkg/AmdPlatformPkg.dec index 1fe7f94dc7..4d811d1135 100644 --- a/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dec +++ b/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dec @@ -3,7 +3,7 @@ # This is the package provides the AMD edk2 common platform drivers # and libraries for AMD Server, Clinet and Gaming console platforms. # -# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# Copyright (C) 2023 - 2024 Advanced Micro Devices, Inc. All rights reserv= ed.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -16,3 +16,11 @@ =20 [Guids] gAmdPlatformPkgTokenSpaceGuid =3D { 0x663DE733, 0x70E0, 0x4D37, { 0xBB= , 0x30, 0x7D, 0x9E, 0xAF, 0x9B, 0xDA, 0xE9 }} + +[PcdsDynamic] + ## Event GUID to trigger logo displaying + # Default set to gMinPlatformPkgTokenSpaceGuid.gBdsEventAfterConsoleRea= dyBeforeBootOptionGuid + # {0x8eb3d5dc, 0xf4e7, 0x4b57, { 0xa9, 0xe7, 0x27, 0x39, 0x10, 0xf2, 0x= 18, 0x9f}} + # Platform DSC can set this value to another event GUID. + # + gAmdPlatformPkgTokenSpaceGuid.PcdAmdDisplayLogoEventGuid|{0xdc, 0xd5, 0x= b3, 0x8e, 0xe7, 0xf4, 0x57, 0x4b, 0xa9, 0xe7, 0x27, 0x39, 0x10, 0xf2, 0x18,= 0x9f}|VOID*|0x00010001 diff --git a/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dsc b/Platform/AMD/= AmdPlatformPkg/AmdPlatformPkg.dsc index d3368c87ee..151235b791 100644 --- a/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dsc +++ b/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dsc @@ -3,7 +3,7 @@ # This is the package provides the AMD edk2 common platform drivers # and libraries for AMD Server, Clinet and Gaming console platforms. # -# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+# Copyright (C) 2023 - 2024 Advanced Micro Devices, Inc. All rights reserv= ed.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -20,3 +20,32 @@ =20 [Packages] AmdPlatformPkg/AmdPlatformPkg.dec + +!include MdePkg/MdeLibs.dsc.inc + +[LibraryClasses.Common] + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseD= ebugPrintErrorLevelLib.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull= .inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo= tServicesTableLib.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntry= Point.inf + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/U= efiRuntimeServicesTableLib.inf + !if $(TARGET) =3D=3D RELEASE + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf + !else + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.= inf + !endif + +[LibraryClasses.common.DXE_DRIVER] + BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf + +[Components] + AmdPlatformPkg/Universal/LogoDxe/JpegLogoDxe.inf = # Server platform JPEG logo driver + AmdPlatformPkg/Universal/LogoDxe/LogoDxe.inf = # Server platfrom Bitmap logo driver + AmdPlatformPkg/Universal/LogoDxe/S3LogoDxe.inf diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/JpegLogo= .idf b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/JpegLogo.idf new file mode 100644 index 0000000000..2d12b78c5c --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/JpegLogo.idf @@ -0,0 +1,10 @@ +// /** @file +// Platform Logo image definition file. +// +// Copyright (C) 2023 - 2024 Advanced Micro Devices, Inc. All rights reser= ved. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#image IMG_LOGO Logo.jpg diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/JpegLogo= Dxe.inf b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/JpegLogoDxe= .inf new file mode 100644 index 0000000000..6a3bbb8d5b --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/JpegLogoDxe.inf @@ -0,0 +1,57 @@ +## @file +# The default logo JPEG picture shown on setup screen. +# +# Copyright (C) 2023 - 2024 Advanced Micro Devices, Inc. All rights reser= ved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D JpegLogoDxe + FILE_GUID =3D 319CFE1D-8F15-4A7A-BF40-EECA953D87EF + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + + ENTRY_POINT =3D InitializeLogo +# +# This flag specifies whether HII resource section is generated into PE i= mage. +# + UEFI_HII_RESOURCE_SECTION =3D TRUE + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Sources] + JpegLogo.idf + Logo.c + Logo.jpg + +[Packages] + AmdPlatformPkg/AmdPlatformPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + BootLogoLib + DebugLib + PcdLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gEdkiiPlatformLogoProtocolGuid ## PRODUCES + gEfiHiiDatabaseProtocolGuid ## CONSUMES + gEfiHiiImageExProtocolGuid ## CONSUMES + gEfiHiiPackageListProtocolGuid ## PRODUCES CONSUMES + +[Pcd] + gAmdPlatformPkgTokenSpaceGuid.PcdAmdDisplayLogoEventGuid + +[Depex] + gEfiHiiDatabaseProtocolGuid AND + gEfiHiiImageExProtocolGuid diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.bmp= b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.bmp new file mode 100755 index 0000000000000000000000000000000000000000..9bc467b3484c970064b92f55a22= 0e4c50ccd5a13 GIT binary patch literal 522054 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 literal 0 HcmV?d00001 diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.c b= /Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.c new file mode 100644 index 0000000000..69fa1dc0e5 --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.c @@ -0,0 +1,194 @@ +/** @file + Logo DXE Driver, install Edk2 Platform Logo protocol. + + Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
+ Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Logo.h" + +EFI_HII_IMAGE_EX_PROTOCOL *mHiiImageEx; +EFI_HII_HANDLE mHiiHandle; +LOGO_ENTRY mLogos[] =3D { + { + IMAGE_TOKEN (IMG_LOGO), + EdkiiPlatformLogoDisplayAttributeCenter, + 0, + 0 + } +}; + +/** + Load a platform logo image and return its data and attributes. + + @param[in] This The pointer to this protocol instance. + @param[in, out] Instance The visible image instance is found. + @param[out] Image Points to the image. + @param[out] Attribute The display attributes of the image re= turned. + @param[out] OffsetX The X offset of the image regarding th= e Attribute. + @param[out] OffsetY The Y offset of the image regarding th= e Attribute. + + @retval EFI_SUCCESS The image was fetched successfully. + @retval EFI_NOT_FOUND The specified image could not be found. + @retval EFI_INVALID_PARAMETER One of the given input parameters are inc= orrect +**/ +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 =3D=3D NULL) || (Image =3D=3D NULL) || + (Attribute =3D=3D NULL) || (OffsetX =3D=3D NULL) || (OffsetY =3D=3D = NULL)) + { + return EFI_INVALID_PARAMETER; + } + + Current =3D *Instance; + if (Current >=3D ARRAY_SIZE (mLogos)) { + return EFI_NOT_FOUND; + } + + (*Instance)++; // Advance to next logo. + *Attribute =3D mLogos[Current].Attribute; + *OffsetX =3D mLogos[Current].OffsetX; + *OffsetY =3D mLogos[Current].OffsetY; + return mHiiImageEx->GetImageEx (mHiiImageEx, mHiiHandle, mLogos[Current]= .ImageId, Image); +} + +EDKII_PLATFORM_LOGO_PROTOCOL mPlatformLogo =3D { + GetImage +}; + +// AMD_EDKII_OVERRIDE START + +/** + After console ready before boot option event callback + + @param[in] Event The Event this notify function registered to. + @param[in] Context Pointer to the context data registered to the Even= t. +**/ +VOID +EFIAPI +LogoDxeDisplayEventCallback ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + DEBUG ((DEBUG_INFO, "AMD logo is displaying.\n")); + + BootLogoEnableLogo (); + gBS->CloseEvent (Event); +} + +/** + Entrypoint of this module. + + This function is the entrypoint of this module. It installs the Edkii + Platform Logo protocol. + + @param ImageHandle The firmware allocated handle for the EFI imag= e. + @param SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + +**/ +EFI_STATUS +EFIAPI +InitializeLogo ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_HII_PACKAGE_LIST_HEADER *PackageList; + EFI_HII_DATABASE_PROTOCOL *HiiDatabase; + EFI_HANDLE Handle; + EFI_EVENT AfterConsoleReadyBeforeBootOptionEvent; + + Status =3D gBS->LocateProtocol ( + &gEfiHiiDatabaseProtocolGuid, + NULL, + (VOID **)&HiiDatabase + ); + ASSERT_EFI_ERROR (Status); + + Status =3D gBS->LocateProtocol ( + &gEfiHiiImageExProtocolGuid, + NULL, + (VOID **)&mHiiImageEx + ); + ASSERT_EFI_ERROR (Status); + + // + // Retrieve HII package list from ImageHandle + // + Status =3D gBS->OpenProtocol ( + ImageHandle, + &gEfiHiiPackageListProtocolGuid, + (VOID **)&PackageList, + ImageHandle, + NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in PE/COFF= resource section\n")); + return Status; + } + + // + // Publish HII package list to HII Database. + // + Status =3D HiiDatabase->NewPackageList ( + HiiDatabase, + PackageList, + NULL, + &mHiiHandle + ); + if (!EFI_ERROR (Status)) { + Handle =3D NULL; + Status =3D gBS->InstallMultipleProtocolInterfaces ( + &Handle, + &gEdkiiPlatformLogoProtocolGuid, + &mPlatformLogo, + NULL + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Install protocol failed.\n")); + return Status; + } + } + + // + // Create AfterConsoleReadyBeforeBootOption event callback + // + Status =3D gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + LogoDxeDisplayEventCallback, + NULL, + (EFI_GUID *)PcdGetPtr (PcdAmdDisplayLogoEventGuid), + &AfterConsoleReadyBeforeBootOptionEvent + ); + ASSERT_EFI_ERROR (Status); + return Status; +} diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.h b= /Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.h new file mode 100644 index 0000000000..7f72f5f57b --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.h @@ -0,0 +1,23 @@ +/** @file + LogoDxe header file + + Copyright (C) 2023 - 2024 Advanced Micro Devices, Inc. All rights reserv= ed. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef AMD_LOGO_H_ +#define AMD_LOGO_H_ + +/// +/// Logo display attributes structure +/// +typedef struct { + EFI_IMAGE_ID ImageId; ///< Image ID + EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute; ///< Logo display lo= cation + INTN OffsetX; ///< Logo display X = coordination + INTN OffsetY; ///< Logo display Y = coordination +} LOGO_ENTRY; + +#endif //AMD_LOGO_H_ diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.idf= b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.idf new file mode 100644 index 0000000000..3ef07a229f --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.idf @@ -0,0 +1,10 @@ +// /** @file +// Platform Logo image definition file. +// +// Copyright (C) 2023 - 2024 Advanced Micro Devices, Inc. All rights reser= ved. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#image IMG_LOGO Logo.bmp diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.jpg= b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/Logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10d40b400fcf57cdb348f92b10b= db1eb9c695e3c GIT binary patch literal 75403 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 z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILC>Quo DNG4Z* literal 0 HcmV?d00001 diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S3Logo.i= df b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S3Logo.idf new file mode 100644 index 0000000000..3735ad0b66 --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S3Logo.idf @@ -0,0 +1,10 @@ +// /** @file +// Platform Logo image definition file. +// +// Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#image IMG_LOGO S3Logo.bmp diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S3LogoDx= e.inf b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S3LogoDxe.inf new file mode 100644 index 0000000000..be4c5ad59d --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe/S3LogoDxe.inf @@ -0,0 +1,57 @@ +## @file +# The default logo bitmap picture shown on setup screen. +# +# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D S3LogoDxe + FILE_GUID =3D A3193794-FCBC-E9A4-1AE0-DAEA9A499808 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + + ENTRY_POINT =3D InitializeLogo +# +# This flag specifies whether HII resource section is generated into PE i= mage. +# + UEFI_HII_RESOURCE_SECTION =3D TRUE + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Sources] + Logo.c + S3Logo.bmp + S3Logo.idf + +[Packages] + AmdPlatformPkg/AmdPlatformPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + BootLogoLib + DebugLib + PcdLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gEdkiiPlatformLogoProtocolGuid ## PRODUCES + gEfiHiiDatabaseProtocolGuid ## CONSUMES + gEfiHiiImageExProtocolGuid ## CONSUMES + gEfiHiiPackageListProtocolGuid ## PRODUCES CONSUMES + +[Pcd] + gAmdPlatformPkgTokenSpaceGuid.PcdAmdDisplayLogoEventGuid + +[Depex] + gEfiHiiDatabaseProtocolGuid AND + gEfiHiiImageExProtocolGuid --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#118884): https://edk2.groups.io/g/devel/message/118884 Mute This Topic: https://groups.io/mt/106090922/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-