From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.56]) by mx.groups.io with SMTP id smtpd.web10.4281.1687324002142704571 for ; Tue, 20 Jun 2023 22:06:42 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@amd.com header.s=selector1 header.b=5AIYB1+B; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.220.56, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jTu+AyYyGvfLkc5qrfWVxD+tZCrA9nMA+VaM9a+bv9oZYSkHmIqlNKf0BXoe0dzTGyZFPNRgZ4i/gcZ7TiH0ysrihw4YXMRz0GqWSlCp8pnKJWrbWZFwW1FCcbX+zZawSCy++nr8WsXBp1/VSjvk4VlxGe07DE93/Z6BwScH/r5m33DEgSa+00j72GPGDRtnTbYFvbejAv3A6YGTwLoUeidaLiQcLrsh9V3tj0VLpXAFdkUuX7SqZUXUWO4nldqzxgeOIZDQbj9U5n9PzSK+onvCXfrTf1Fzn0emPq9y/OyF28CgFoM8aY06eI0KqFDgye2TxzgK7PhHgPCnttxHTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fHvnYlZKGc/+JtIuWz3Jc2vYCRZtcK+j5Guo4PSUYtg=; b=lLHH++l0srer0d2H3Xql9E+L5jblUKyzWEdHkGEFWLVgyQ+FBjQoTicYDJKYfQXzAclqng627ni3azAbQToxeISJRRkrOkYcAWxsjUoQSpiIJVAkaEH9ZAV2Sq5iHi6Ug728IIW8qZuKqUU3w9QOJExrbEqXzJps3ICu9iD+NKZ6mBbyjXYNKOAbrKYiFoE3Fi+mk1V430vSI4Lakmppm4bwU5TuCVUwQ1fh4ofZ/IClEXuNL9Bp7IsgffhFKEirUqAo7u7wJ99app6lwe5NjgFshpvL/CJw99Pt37Rej3enuzpArxbbxPxbe5NG//hMnaaBP5BxXcuxBmU9FA26Eg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fHvnYlZKGc/+JtIuWz3Jc2vYCRZtcK+j5Guo4PSUYtg=; b=5AIYB1+BoZWEHn7+tGXzqpzUln+ybOklUjCWfIdcEHqOvGFT2ff+f51EaBolot6qFfNFAZBhwVYEZ8dZ6sIk258fuwfkZNlaeCtLgzilwJPW+EBWBFwZTeaB/0wdUbwp5Ratl9yd2b7XjM1sojrhcDz6E53dVBgjaCWaAKj0iTY= Received: from MW4PR03CA0078.namprd03.prod.outlook.com (2603:10b6:303:b6::23) by DM6PR12MB4220.namprd12.prod.outlook.com (2603:10b6:5:21d::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.23; Wed, 21 Jun 2023 05:06:35 +0000 Received: from MWH0EPF000989E9.namprd02.prod.outlook.com (2603:10b6:303:b6:cafe::9f) by MW4PR03CA0078.outlook.office365.com (2603:10b6:303:b6::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.21 via Frontend Transport; Wed, 21 Jun 2023 05:06:35 +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=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by MWH0EPF000989E9.mail.protection.outlook.com (10.167.241.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6521.17 via Frontend Transport; Wed, 21 Jun 2023 05:06:35 +0000 Received: from TPE-L1-ABNCHANG.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.23; Wed, 21 Jun 2023 00:06:32 -0500 From: "Chang, Abner" To: CC: Abner Chang , Abdul Lateef Attar Subject: [edk2-platforms][PATCH 2/2] AmdPlatformPkg/LogoDxe: AMD Logo Driver Date: Wed, 21 Jun 2023 13:06:21 +0800 Message-ID: <20230621050621.1649-2-abner.chang@amd.com> X-Mailer: git-send-email 2.37.1.windows.1 In-Reply-To: <20230621050621.1649-1-abner.chang@amd.com> References: <20230621050621.1649-1-abner.chang@amd.com> MIME-Version: 1.0 Return-Path: Abner.Chang@amd.com X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000989E9:EE_|DM6PR12MB4220:EE_ X-MS-Office365-Filtering-Correlation-Id: b32defd2-6732-46f4-e96a-08db721549a0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yTwqDYnHOre8GBTtep2XMFKaw9+bJwVkwwVZolyQ1KbB6B5VELWiqfNLIN6PEA2HA0RMm0uPwR+CMwfWrFYmda74WUnnkfW06tzKXBoCJ2W0PSn0AhxxqGe4LwyrNkXzDn4SEz/2rBSFZrADlFqjv+UpqgIROZLcbIK3sUvF7+5z9+H2Or2A01ih0fvcgLGwMEDNS4UiOAhbrU00qeTtNjuXzSy3v2RPecz42bwO1kSVx+RzJ4zGgR4FjtagVFFN3Ut7I5Oy+PAaRxozUdl8H004OI1cJgT9j528lAUm4OouHRB90mtVIZtYm/nGq1LmkIqZtNkIZUyD0PcUFxIbHs+KHiZEMRz9+3JOQ49mND/XTRY7O13wQHP6nJy2lQwi4QJrEvyUbNbC20ARSG2VmiLCvJcVJRZAgUiUUC00SII+Z3XtXZcXtftst4wfiGJ0yBYVAEitf1ILOLTHnZGzpUvW6BbhxlnOq8oRk8er+R2QV1BT6sOjHe+zUhO0rXfgfbR+4LnRo3eQL0PEpRoupg6OYLF891/LieTc5tSymhcK3XThsavtTLRes0uNKm0RmHx1ZgFiYA/KPBp6gBNLI9DPEpgKl6EnFKnOR2u3FZrZlioVERS54vze0qirrVfMKC8Zi0/vw7NXZ2iJXI6SnykHESDpN9jFhuKnYDcs++r6nBaUOlszxYth9+aOqtARohcfdhPyu1zX1jDtnVKuI6k2WAiXkaq7KlyF0vqHmtxnAdsdSoA261EkIyYvTJsXj8AyJ2chwWXu5jG3u0kX6OzmEe8fXS8Nmjm97bfCYs7VSz3CngTuo34VToLSPbKXMny95viN2NIjIJw+Jixq8fbUpJO0ea9vec1Rue73Yac= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(396003)(136003)(346002)(376002)(451199021)(36840700001)(40470700004)(46966006)(478600001)(7696005)(6666004)(70586007)(70206006)(54906003)(1076003)(26005)(16526019)(186003)(2876002)(30864003)(2906002)(82310400005)(41300700001)(6916009)(4326008)(316002)(5660300002)(8936002)(8676002)(81166007)(356005)(82740400003)(86362001)(40460700003)(36756003)(47076005)(40480700001)(36860700001)(83380400001)(2616005)(426003)(336012)(36900700001)(559001)(579004)(44824005)(357404004)(134885004);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2023 05:06:35.6500 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b32defd2-6732-46f4-e96a-08db721549a0 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=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000989E9.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4220 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain From: Abdul Lateef Attar Current logo INF and IDF files are used for server platform logo. Additional INF, IDF and logo image files are required for other platform usages but leverage logo source files. Set PcdAmdDisplayLogoEventGuid to change the event GUID for displaying logo. Signed-off-by: Abner Chang Co-authored-by: Abner Chang Cc: Abdul Lateef Attar --- .../AMD/AmdPlatformPkg/AmdPlatformPkg.dec | 9 + .../AMD/AmdPlatformPkg/AmdPlatformPkg.dsc | 57 +++++ .../Universal/LogoDxe/JpegLogoDxe.inf | 56 +++++ .../Universal/LogoDxe/LogoDxe.inf | 58 ++++++ .../AmdPlatformPkg/Universal/LogoDxe/Logo.h | 22 ++ .../AmdPlatformPkg/Universal/LogoDxe/Logo.c | 194 ++++++++++++++++++ .../Universal/LogoDxe/JpegLogo.idf | 10 + .../AmdPlatformPkg/Universal/LogoDxe/Logo.bmp | Bin 0 -> 522054 bytes .../AmdPlatformPkg/Universal/LogoDxe/Logo.idf | 10 + .../AmdPlatformPkg/Universal/LogoDxe/Logo.jpg | Bin 0 -> 75403 bytes 10 files changed, 416 insertions(+) create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/JpegLogoD= xe.inf create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe.i= nf create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.h create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.c create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/JpegLogo.= idf create mode 100755 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.bmp create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.idf create mode 100644 Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.jpg diff --git a/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dec b/Platform/AMD/= AmdPlatformPkg/AmdPlatformPkg.dec index 1fe7f94dc7..440f3772b9 100644 --- a/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dec +++ b/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dec @@ -16,3 +16,12 @@ =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..fc1b95fb2f 100644 --- a/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dsc +++ b/Platform/AMD/AmdPlatformPkg/AmdPlatformPkg.dsc @@ -20,3 +20,60 @@ =20 [Packages] AmdPlatformPkg/AmdPlatformPkg.dec + +!include MdePkg/MdeLibs.dsc.inc + +[LibraryClasses.Common] + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntry= Point.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo= tServicesTableLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/U= efiRuntimeServicesTableLib.inf + UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseD= ebugPrintErrorLevelLib.inf + + # + # Debug libraries + # + DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseD= ebugPrintErrorLevelLib.inf +!if $(TARGET) =3D=3D RELEASE + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf +!else + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.in= f +!endif + + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchroniza= tionLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull= .inf + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf + UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServic= esLib.inf + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableL= ib.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntry= Point.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo= tServicesTableLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/U= efiRuntimeServicesTableLib.inf + UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf + + # + # Platform - Replace the modules in this section in platform DSC file. + # + TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplat= e.inf + + # Boot logo + BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf + +[LibraryClasses.common.DXE_CORE, LibraryClasses.common.DXE_SMM_DRIVER, Lib= raryClasses.common.SMM_CORE, LibraryClasses.common.DXE_DRIVER, LibraryClass= es.common.DXE_RUNTIME_DRIVER, LibraryClasses.common.UEFI_DRIVER, LibraryCla= sses.common.UEFI_APPLICATION] + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf + +[Components.common.DXE_DRIVER] + AmdPlatformPkg/Universal/LogoDxe/LogoDxe.inf # Server platfrom Bit= map logo driver + AmdPlatformPkg/Universal/LogoDxe/JpegLogoDxe.inf # Server platform JPE= G logo driver + diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/JpegLogoDxe.inf = b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/JpegLogoDxe.inf new file mode 100644 index 0000000000..368fa643ad --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/JpegLogoDxe.inf @@ -0,0 +1,56 @@ +## @file +# The default logo JPEG picture shown on setup screen. +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 1.5 + 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] + Logo.jpg + Logo.c + JpegLogo.idf + +[Packages] + AmdPlatformPkg/AmdPlatformPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + BootLogoLib + DebugLib + PcdLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gEfiHiiDatabaseProtocolGuid ## CONSUMES + gEfiHiiImageExProtocolGuid ## CONSUMES + gEfiHiiPackageListProtocolGuid ## PRODUCES CONSUMES + gEdkiiPlatformLogoProtocolGuid ## PRODUCES + +[Pcd] + gAmdPlatformPkgTokenSpaceGuid.PcdAmdDisplayLogoEventGuid + +[Depex] + gEfiHiiDatabaseProtocolGuid AND + gEfiHiiImageExProtocolGuid diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe.inf b/Pl= atform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe.inf new file mode 100644 index 0000000000..eff34a4093 --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/LogoDxe.inf @@ -0,0 +1,58 @@ +## @file +# The default logo bitmap picture shown on setup screen. +# +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION =3D 1.5 + BASE_NAME =3D LogoDxe + FILE_GUID =3D 76ED6631-44FE-4ED2-8B5D-1B5355BB25E8 + 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.bmp + Logo.c + Logo.idf + +[Packages] + AmdPlatformPkg/AmdPlatformPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + BootLogoLib + DebugLib + PcdLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gEfiHiiDatabaseProtocolGuid ## CONSUMES + gEfiHiiImageExProtocolGuid ## CONSUMES + gEfiHiiPackageListProtocolGuid ## PRODUCES CONSUMES + gEdkiiPlatformLogoProtocolGuid ## PRODUCES + +[Pcd] + gAmdPlatformPkgTokenSpaceGuid.PcdAmdDisplayLogoEventGuid + +[Depex] + gEfiHiiDatabaseProtocolGuid AND + gEfiHiiImageExProtocolGuid diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.h b/Platfor= m/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.h new file mode 100644 index 0000000000..a70a69d23e --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.h @@ -0,0 +1,22 @@ +/** @file + LogoDxe header file + + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. + 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/Logo.c b/Platfor= m/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.c new file mode 100644 index 0000000000..eb7edb3fa2 --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/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) 2023 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/JpegLogo.idf b/P= latform/AMD/AmdPlatformPkg/Universal/LogoDxe/JpegLogo.idf new file mode 100644 index 0000000000..22b277b687 --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/JpegLogo.idf @@ -0,0 +1,10 @@ +// /** @file +// Platform Logo image definition file. +// +// Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#image IMG_LOGO Logo.jpg diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.bmp b/Platf= orm/AMD/AmdPlatformPkg/Universal/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/Logo.idf b/Platf= orm/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.idf new file mode 100644 index 0000000000..83912544dd --- /dev/null +++ b/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.idf @@ -0,0 +1,10 @@ +// /** @file +// Platform Logo image definition file. +// +// Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#image IMG_LOGO Logo.bmp diff --git a/Platform/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.jpg b/Platf= orm/AMD/AmdPlatformPkg/Universal/LogoDxe/Logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10d40b400fcf57cdb348f92b10b= db1eb9c695e3c GIT binary patch literal 75403 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