From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.115]) by mx.groups.io with SMTP id smtpd.web12.5462.1622023902729479332 for ; Wed, 26 May 2021 03:11:42 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@os.amperecomputing.com header.s=selector2 header.b=EUm9ZYCW; spf=pass (domain: os.amperecomputing.com, ip: 40.107.93.115, mailfrom: nhi@os.amperecomputing.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oHUen0jbNNiXKkIxRKTkQMAld+4DG0cD0EcMvwZCNhuhfDn5qPz7ICi4rZaz4CxyLZRO3gFByZQHdg6OeKS+zHbH3iccxneR2nQO5Nl2S+j/OLI7EJjd42nlfZgGO/gF/h0R6oKdcGil6o7JM7Xuj7BBj87VjyYHGUP45nzJmQs+k8AtPPxNPDAOtE2XuPwWA3y1BdIurPNQWeKvs3gyHpcwCV9LtE/zm66By4AiQzEcZIWdcRZxlbupgodq1E8gNkM3zrrMdj2NMoGyErWqHGO/vGYCz6RmzU6Ppr4vwoyZx1HyWre85/dB18MdMlYy2P9pe+Np7QrvRF1w7TfKYA== 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-SenderADCheck; bh=v4+1KEWsJ2P4JO1D0CDEFUt6X25adwvjqXDkJz1Mjv8=; b=lfJAOkoj3v7NuKxgTVp55B/AKz8TFvmqxv+2czWgBG0gyI+E2pCXaJWhzF9gq8UtzgS5y+qINIiakgU7InsDK8BrwUfGkOIYVRwbV7Cjwd2xAjJdsUomWbS/h4iqI2+SaG7QUE+rNVygNYwPbcZjGOKtjeTKJcftvnU2di/BxCT4+ywflzPiAZGzS+ojeubiv1okbTmKwdeCuWHefq71AzkN19pT8pNJ/D6r5EsBMfHxn4eAbkNL+f9VCAZWqltK5NaVhbJ/IZzMD30CSBCmgecRybN3nNKvoLcYgcJB5tQsiDXvXgQGXj+26pA9OZnvsvGWH2aaXyfIwlNsftxSBg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v4+1KEWsJ2P4JO1D0CDEFUt6X25adwvjqXDkJz1Mjv8=; b=EUm9ZYCW6masQBhW4t3qVRT3Hc/QCPD+NyxCpYjP81COb8XNx7ULMY9HLUppa086bNO+2PWEEl2eeBW4qKBBFS2c89vbqAvWwORUwWtCO2zFb6tOupqlgLe3rGt0pITyT6GkWbLGGbheY3HeN7VyjBVDwd4qp9MIJ5M4UASBEBY= Authentication-Results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=os.amperecomputing.com; Received: from DM6PR01MB5849.prod.exchangelabs.com (2603:10b6:5:205::20) by DM5PR0101MB3067.prod.exchangelabs.com (2603:10b6:4:31::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.28; Wed, 26 May 2021 10:11:41 +0000 Received: from DM6PR01MB5849.prod.exchangelabs.com ([fe80::60d2:86dd:1f1c:51dd]) by DM6PR01MB5849.prod.exchangelabs.com ([fe80::60d2:86dd:1f1c:51dd%7]) with mapi id 15.20.4173.020; Wed, 26 May 2021 10:11:41 +0000 From: "Nhi Pham" To: devel@edk2.groups.io CC: Vu Nguyen , Thang Nguyen , Chuong Tran , Phong Vo , Leif Lindholm , Michael D Kinney , Ard Biesheuvel , Nate DeSimone Subject: [edk2-platforms][PATCH v2 10/32] AmpereSiliconPkg: Add PlatformManagerUiLib library instance Date: Wed, 26 May 2021 17:07:02 +0700 Message-ID: <20210526100724.5359-12-nhi@os.amperecomputing.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210526100724.5359-1-nhi@os.amperecomputing.com> References: <20210526100724.5359-1-nhi@os.amperecomputing.com> X-Originating-IP: [118.69.219.201] X-ClientProxiedBy: HKAPR04CA0008.apcprd04.prod.outlook.com (2603:1096:203:d0::18) To DM6PR01MB5849.prod.exchangelabs.com (2603:10b6:5:205::20) Return-Path: nhi@os.amperecomputing.com MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (118.69.219.201) by HKAPR04CA0008.apcprd04.prod.outlook.com (2603:1096:203:d0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Wed, 26 May 2021 10:11:38 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b568001c-79c5-450d-7d88-08d9202ea821 X-MS-TrafficTypeDiagnostic: DM5PR0101MB3067: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:67; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DhlwByFzo9kGUd+b9pGUJBCNF959Ivr7ClOqAcdQ/eK3WSuc3eQdskJUC793sOJm01JeWaV9qZ/VcBT/J/9NSbBoLZkR8F4IQ1oj85wzJvdiICqe2UzrmxrYBRDo6xl6+SBWsdTODW6mc49kXjVmIdxlIP87P24ANVruovmTOQXggL6sqRXeCFFa6TcjbIE6RSZZ+IuP31IfJg861XpdiyQ3YVxyVnAuNMQ9vvaOFO/xicXHwz8KWAEIGL/3fHHUHa9pYsEI+DMJVHqCKLmxhDQQyomqGEnLOarPvbmb9b0evl/IHpJz0M8nE1E1nUS0XljlpgWWZxRBToIZuiuwHzxrAt/ut2tdgFvOfaR6KdtC/IJ+DH9FH9BqBeWKYO8qBFJ0BqjJvyaV/JtZqro8HKyD96nqlsuZ2J8ZRireUd8NLJ+N3Q/3DRdHXTxVnKw5odYQflTOolT2zzZGAs+YKy62IHZPwbLFa3OdDoGZY9Bjv9ymtMaUp3qHVIprzvEfnU2On9ycB3JmkqIdhHaThvMKcfDRPPdEIlEeWe3rYUaAES3HQleeISzQZqSHnFg/PzrqJXOrW49G99/0UoW5w0YDPJDV0hAVjuNFpFIEhdkjDCSfpZXevs9MGrtEnv+U4qgftyVebc1nlQBidan9KJ8Xsz9/jwVY5fzLJnDmGhRW5cRznn7pS0akCVxvuCMZby004D2bmXa27+AKqilFJX2BU9wlc+NxvIdUvho7RjZWTJ8wXe4f4YqhzzLt/0Mo X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR01MB5849.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(6029001)(4636009)(39850400004)(396003)(346002)(136003)(376002)(366004)(4326008)(26005)(6666004)(1076003)(2616005)(38350700002)(6506007)(83380400001)(86362001)(2906002)(6486002)(8676002)(30864003)(956004)(52116002)(8936002)(186003)(54906003)(66556008)(6916009)(66476007)(6512007)(66946007)(38100700002)(5660300002)(16526019)(478600001)(316002)(69590400013)(290074003)(44824005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?edJc9ZSAhPyqouaF31Gdig+V/AiaWazUu9/cy1HCFNevppMNemYCgzO92L1Z?= =?us-ascii?Q?5Tpwi8GavGOKeEgDKBdU52ruZzN1Sd3LCh0eWJOpcP62t3xsVuojfu0uJvAJ?= =?us-ascii?Q?Zz12t77j2AbJocQSZ9mSJsdL86u3v+7bHwCbEzOtKT5A86JUC06IAGmmZ5f8?= =?us-ascii?Q?9bNjx/UPKr/RCv6LTRUn7b1rX3hrYe0QPv7VebOItMecxx74RDV5J/IFhLlf?= =?us-ascii?Q?Wc9qvVunTxMHteU7gd2DgvJE3hcfL1fbQDI9D4Dfgu5R/XeBm/GUtYYiV756?= =?us-ascii?Q?M2OX+CsjNhYNKxRp/TKskeh3t8Bsd8J+oc1h4D9C6eghY5EH2ubxpILF8wrw?= =?us-ascii?Q?hXXqCFh8jfSvW+/gxzgVzy1aA3MJvjledUZzKACm2gsli86gy4eZTBLJoDwo?= =?us-ascii?Q?eNJknoy72XPwF65zLCvkEJYvdIMzKQgBcQt7i9eX0rZ0PuWct3m0ZyTmGmyI?= =?us-ascii?Q?NojLsRQoKn/jdxS07ymQztiM7CeY8H5SrtVeF4sbac6kg0nMmaWFb02LMNcp?= =?us-ascii?Q?BJHGlrwhmCb4DMwzIv3xz2La4Uc6omI/9L67YIZRLgEIczoqtKJxgz+wA2X0?= =?us-ascii?Q?bPpS8Rk+gxk4SJXncE9brbI4u3FSQDhz+YNirSPaGnQ0rxcJMgh1L2GzaoFx?= =?us-ascii?Q?2Bs+G21wWkQAwzWhsHV7/VLNV2t5yIgdCgchWwGmRc0bkm5wMCGXBjEw9Az+?= =?us-ascii?Q?BQbSUgIoyXhnpEo/XDIz4ZSavps5s6aTKMTzfbAudH3JlYZyWNdlG4K4ItLE?= =?us-ascii?Q?27ET+FDdxGl+LSUmzm3wXQKhijTc1ZaSTYaNpP64DJx/gmRbh+yts3rSgFm6?= =?us-ascii?Q?hMU7plf3JY/yiQnoUgWauvi5YFV2ghAyAtMBRPjHpFHRqbsLu4i/uaH+9Iy1?= =?us-ascii?Q?b1AyJzA5jWeLgmu7fjWkLWyfAoYaVWBjMIc/ici/2jBpHkAKb0v9wctddPaO?= =?us-ascii?Q?/o/XxRK+2mhSwUjZa6YmGQCq6S31R08X3qFWBQlYBrzSDZC9Znj9ZChc+EG6?= =?us-ascii?Q?UF1foA4Jew0xUKU8h3TFOOZUJvQjQIZW29YSE6lPxLp60cGcoIr3qwaj0RCj?= =?us-ascii?Q?LdKOy5DGyXfhwK5359+4o0Rz9rcErKFagDyW1jNrUmTPz8F9bI0tDBboymiy?= =?us-ascii?Q?zIGWT4wdzzl1Ju0Rr54oKMiyoRdmU60JNmBoZMh0wh095WQKyD1Go2yoW7Tn?= =?us-ascii?Q?Slo9orvw2wyKYWemHQYGi6UyZFrLkwvjm72sqpkDhmhh4Scwt48wvBeZljKQ?= =?us-ascii?Q?eBKkoRmGT32+1scipQ0sbtdp1qj2aQwNyrmK2cUdi6VYyE9qgQMZPCHvEZRL?= =?us-ascii?Q?/okmG4Y4PEwvDStvmseVO014?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: b568001c-79c5-450d-7d88-08d9202ea821 X-MS-Exchange-CrossTenant-AuthSource: DM6PR01MB5849.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2021 10:11:41.4105 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Y5SNQ8pDtm0r+h4ktv936GFEhCY+A9ui5ivdQPgCk6AkUgcCGV5dGEOT7uJQ4RDPoLoTiswf/dLvAMi75drAtu45ciBQpCt4V99gb/Jn1yE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0101MB3067 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain From: Vu Nguyen The idea came from DeviceManagerUiLib that all related menu settings can be placed under a common entry. This change intends to provide a central point for all platform menus by creating a Platform Manager entry located under Device Manager entry of UiApp. New classuuid called gPlatformManagerFormsetGuid was introduced for platform menus which want to be reached through this Platform Manager. Cc: Thang Nguyen Cc: Chuong Tran Cc: Phong Vo Cc: Leif Lindholm Cc: Michael D Kinney Cc: Ard Biesheuvel Cc: Nate DeSimone Signed-off-by: Vu Nguyen --- Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec = | 19 ++ Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc = | 1 + Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManagerUiLib= .inf | 47 +++ Silicon/Ampere/AmpereSiliconPkg/Include/Guid/PlatformManagerHii.h = | 31 ++ Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager.h = | 51 +++ Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManagerVfr.h= | 28 ++ Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager.c = | 354 ++++++++++++++++++++ Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManagerStrin= gs.uni | 21 ++ Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManagerUiLib= .uni | 13 + Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManagerVfr.V= fr | 29 ++ 10 files changed, 594 insertions(+) diff --git a/Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec b/Silicon= /Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec index 26e020715290..a72205aa5316 100755 --- a/Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec +++ b/Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec @@ -22,12 +22,31 @@ [Defines] # ##########################################################################= ###### [Includes.common] + Include # Root include for the package =20 [LibraryClasses] =20 [Guids] gAmpereTokenSpaceGuid =3D { 0xdbd4436e, 0x89cb, 0x44dc, { 0xb5, 0xc0, 0x= 49, 0xc3, 0x91, 0x35, 0xbf, 0xdf } } =20 + # + # Platform Manager formset UUID + # + ## Include/Guid/PlatformManagerHii.h + gPlatformManagerFormsetGuid =3D { 0x83ABD546, 0x7AD9, 0x4DE7, { 0xBD, 0= x52, 0x12, 0x23, 0xF6, 0xE8, 0xFD, 0x4B } } + + # + # Platform Manager entry UUID + # + ## Include/Guid/PlatformManagerHii.h + gPlatformManagerEntryEventGuid =3D { 0x28A4731E, 0x14A9, 0x488A, { 0xA8,= 0x19, 0xFF, 0x27, 0x80, 0x6E, 0xDB, 0x0E } } + + # + # Platform Manager exit UUID + # + ## Include/Guid/PlatformManagerHii.h + gPlatformManagerExitEventGuid =3D { 0xE8887242, 0x4EFF, 0x4323, { 0x81,= 0xF4, 0xC9, 0x5F, 0xD5, 0x8D, 0x80, 0xD5 } } + [Ppis] =20 [PcdsFixedAtBuild] diff --git a/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc b/Silicon= /Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc index 65973569a41d..3c47099b8edc 100755 --- a/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc +++ b/Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dsc.inc @@ -649,6 +649,7 @@ [Components.common] MdeModulePkg/Universal/BdsDxe/BdsDxe.inf MdeModulePkg/Application/UiApp/UiApp.inf { + NULL|Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformM= anagerUiLib.inf NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanc= eManagerUiLib.inf diff --git a/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Platform= ManagerUiLib.inf b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Pl= atformManagerUiLib.inf new file mode 100644 index 000000000000..1cc5788bcebb --- /dev/null +++ b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager= UiLib.inf @@ -0,0 +1,47 @@ +## @file +# +# Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x0001001B + BASE_NAME =3D PlatformManagerUiLib + MODULE_UNI_FILE =3D PlatformManagerUiLib.uni + FILE_GUID =3D 9264993E-2E15-478A-8928-14573E34C606 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D NULL|DXE_DRIVER UEFI_APPLICATION + CONSTRUCTOR =3D PlatformManagerUiLibConstructor + DESTRUCTOR =3D PlatformManagerUiLibDestructor + +[Sources] + PlatformManager.h + PlatformManagerVfr.Vfr + PlatformManagerStrings.uni + PlatformManager.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec + +[LibraryClasses] + DevicePathLib + BaseLib + MemoryAllocationLib + UefiBootServicesTableLib + BaseMemoryLib + DebugLib + HiiLib + UefiLib + UefiHiiServicesLib + +[Guids] + gPlatformManagerFormsetGuid ## CONSUMES ## GUID (Indic= ate the formset class guid to be displayed) + gEfiIfrTianoGuid ## CONSUMES ## GUID (Exten= ded IFR Guid Opcode) + gEfiIfrFrontPageGuid ## CONSUMES ## GUID (Indic= ate the formset in this library need to display in which page) + gPlatformManagerEntryEventGuid ## CONSUMES ## GUID (Indic= ate enter PlatformManager) + gPlatformManagerExitEventGuid ## CONSUMES ## GUID (Indic= ate exit PlatformManager) diff --git a/Silicon/Ampere/AmpereSiliconPkg/Include/Guid/PlatformManagerHi= i.h b/Silicon/Ampere/AmpereSiliconPkg/Include/Guid/PlatformManagerHii.h new file mode 100644 index 000000000000..ee3ca13ddeb1 --- /dev/null +++ b/Silicon/Ampere/AmpereSiliconPkg/Include/Guid/PlatformManagerHii.h @@ -0,0 +1,31 @@ +/** @file + + Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef PLATFORM_MANAGER_HII_GUID_H_ +#define PLATFORM_MANAGER_HII_GUID_H_ + +#define PLATFORM_MANAGER_FORMSET_GUID \ + { \ + 0x83ABD546, 0x7AD9, 0x4DE7, { 0xBD, 0x52, 0x12, 0x23, 0xF6, 0xE8, 0xFD, = 0x4B } \ + } + +#define PLATFORM_MANAGER_ENTRY_EVENT_GUID \ + { \ + 0x28A4731E, 0x14A9, 0x488A, { 0xA8, 0x19, 0xFF, 0x27, 0x80, 0x6E, 0xDB, = 0x0E } \ + } + +#define PLATFORM_MANAGER_EXIT_EVENT_GUID \ + { \ + 0xE8887242, 0x4EFF, 0x4323, { 0x81, 0xF4, 0xC9, 0x5F, 0xD5, 0x8D, 0x80, = 0xD5 } \ + } + +extern EFI_GUID gPlatformManagerFormsetGuid; +extern EFI_GUID gPlatformManagerEntryEventGuid; +extern EFI_GUID gPlatformManagerExitEventGuid; + +#endif diff --git a/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Platform= Manager.h b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformM= anager.h new file mode 100644 index 000000000000..49157e0cea47 --- /dev/null +++ b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager= .h @@ -0,0 +1,51 @@ +/** @file + + Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef PLATFORM_MANAGER_H_ +#define PLATFORM_MANAGER_H_ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "PlatformManagerVfr.h" + +// +// These are the VFR compiler generated data representing our VFR data. +// +extern UINT8 PlatformManagerVfrBin[]; +extern UINT8 PlatformManagerUiLibStrings[]; + +/// +/// HII specific Vendor Device Path definition. +/// +typedef struct { + VENDOR_DEVICE_PATH VendorDevicePath; + EFI_DEVICE_PATH_PROTOCOL End; +} HII_VENDOR_DEVICE_PATH; + +typedef struct { + /// + /// Platform Manager HII relative handles + /// + EFI_HII_HANDLE HiiHandle; + EFI_HANDLE DriverHandle; + +} PLATFORM_MANAGER_CALLBACK_DATA; + +#endif diff --git a/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Platform= ManagerVfr.h b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Platfo= rmManagerVfr.h new file mode 100644 index 000000000000..205907d3777a --- /dev/null +++ b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager= Vfr.h @@ -0,0 +1,28 @@ +/** @file + + Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef PLATFORM_MANAGER_VFR_H_ +#define PLATFORM_MANAGER_VFR_H_ + +#define FORMSET_GUID \ + { \ + 0x6E7233C5, 0x2B79, 0x4383, { 0x81, 0x46, 0xD8, 0x6A, 0x9F, 0x0A, 0x0B, = 0x99 } \ + } + +// +// These are defined as the same with vfr file +// +#define LABEL_FORM_ID_OFFSET 0x0100 +#define ENTRY_KEY_OFFSET 0x4000 + +#define PLATFORM_MANAGER_FORM_ID 0x1000 + +#define LABEL_ENTRY_LIST 0x1100 +#define LABEL_END 0xffff + +#endif /* PLATFORM_MANAGER_VFR_H_ */ diff --git a/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Platform= Manager.c b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformM= anager.c new file mode 100644 index 000000000000..1872aa80ed18 --- /dev/null +++ b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager= .c @@ -0,0 +1,354 @@ +/** @file + + Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "PlatformManager.h" + +PLATFORM_MANAGER_CALLBACK_DATA gPlatformManagerPrivate =3D { + NULL, + NULL +}; + +EFI_GUID mPlatformManagerGuid =3D FORMSET_GUID; + +HII_VENDOR_DEVICE_PATH mPlatformManagerHiiVendorDevicePath =3D { + { + { + HARDWARE_DEVICE_PATH, + HW_VENDOR_DP, + { + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) + } + }, + // + // {FC587265-0750-44D1-B68D-D1DDD3F29B0B} + // + { 0xFC587265, 0x0750, 0x44D1, {0xB6, 0x8D, 0xD1, 0xDD, 0xD3, 0xF2, 0x9= B, 0x0B} } + }, + { + END_DEVICE_PATH_TYPE, + END_ENTIRE_DEVICE_PATH_SUBTYPE, + { + (UINT8)(END_DEVICE_PATH_LENGTH), + (UINT8)((END_DEVICE_PATH_LENGTH) >> 8) + } + } +}; + +/** + Extract device path for given HII handle and class guid. + + @param Handle The HII handle. + + @retval NULL Fail to get the device path string. + @return PathString Get the device path string. + +**/ +CHAR16 * +PmExtractDevicePathFromHiiHandle ( + IN EFI_HII_HANDLE Handle + ) +{ + EFI_STATUS Status; + EFI_HANDLE DriverHandle; + + ASSERT (Handle !=3D NULL); + + if (Handle =3D=3D NULL) { + return NULL; + } + + Status =3D gHiiDatabase->GetPackageListHandle (gHiiDatabase, Handle, &Dr= iverHandle); + if (EFI_ERROR (Status)) { + return NULL; + } + // + // Get device path string. + // + return ConvertDevicePathToText (DevicePathFromHandle (DriverHandle), FAL= SE, FALSE); +} + +/** + Dynamic create Hii information for Platform Manager. + + @param NextShowFormId The FormId which need to be show. + +**/ +VOID +CreatePlatformManagerForm ( + IN EFI_FORM_ID NextShowFormId + ) +{ + UINTN Index; + EFI_STRING String; + EFI_STRING_ID Token; + EFI_STRING_ID TokenHelp; + EFI_HII_HANDLE *HiiHandles; + EFI_HII_HANDLE HiiHandle; + EFI_GUID FormSetGuid; + VOID *StartOpCodeHandle; + VOID *EndOpCodeHandle; + EFI_IFR_GUID_LABEL *StartLabel; + EFI_IFR_GUID_LABEL *EndLabel; + CHAR16 *DevicePathStr; + EFI_STRING_ID DevicePathId; + EFI_IFR_FORM_SET *Buffer; + UINTN BufferSize; + UINT8 ClassGuidNum; + EFI_GUID *ClassGuid; + UINTN TempSize; + UINT8 *Ptr; + EFI_STATUS Status; + + TempSize =3D 0; + BufferSize =3D 0; + Buffer =3D NULL; + + HiiHandle =3D gPlatformManagerPrivate.HiiHandle; + + // + // Allocate space for creation of UpdateData Buffer + // + StartOpCodeHandle =3D HiiAllocateOpCodeHandle (); + ASSERT (StartOpCodeHandle !=3D NULL); + + EndOpCodeHandle =3D HiiAllocateOpCodeHandle (); + ASSERT (EndOpCodeHandle !=3D NULL); + + // + // Create Hii Extend Label OpCode as the start opcode + // + StartLabel =3D (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode ( + StartOpCodeHandle, + &gEfiIfrTianoGuid, + NULL, + sizeof (EFI_IFR_GUID_LABEL) + ); + ASSERT (StartLabel !=3D NULL); + StartLabel->ExtendOpCode =3D EFI_IFR_EXTEND_OP_LABEL; + // + // According to the next show Form id(mNextShowFormId) to decide which f= orm need to update. + // + StartLabel->Number =3D (UINT16)(LABEL_FORM_ID_OFFSET + NextShowFor= mId); + + // + // Create Hii Extend Label OpCode as the end opcode + // + EndLabel =3D (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode ( + EndOpCodeHandle, + &gEfiIfrTianoGuid, + NULL, + sizeof (EFI_IFR_GUID_LABEL) + ); + ASSERT (EndLabel !=3D NULL); + EndLabel->ExtendOpCode =3D EFI_IFR_EXTEND_OP_LABEL; + EndLabel->Number =3D LABEL_END; + + // + // Get all the Hii handles + // + HiiHandles =3D HiiGetHiiHandles (NULL); + ASSERT (HiiHandles !=3D NULL); + + // + // Search for formset of each class type + // + for (Index =3D 0; HiiHandles[Index] !=3D NULL; Index++) { + Status =3D HiiGetFormSetFromHiiHandle (HiiHandles[Index], &Buffer,&Buf= ferSize); + if (EFI_ERROR (Status)) { + continue; + } + + Ptr =3D (UINT8 *)Buffer; + + while(TempSize < BufferSize) { + TempSize +=3D ((EFI_IFR_OP_HEADER *)Ptr)->Length; + if (((EFI_IFR_OP_HEADER *)Ptr)->Length <=3D OFFSET_OF (EFI_IFR_FORM_= SET, Flags)) { + Ptr +=3D ((EFI_IFR_OP_HEADER *)Ptr)->Length; + continue; + } + + ClassGuidNum =3D (UINT8)(((EFI_IFR_FORM_SET *)Ptr)->Flags & 0x3); + ClassGuid =3D (EFI_GUID *)(VOID *)(Ptr + sizeof (EFI_IFR_FORM_SET)); + while (ClassGuidNum-- > 0) { + if (CompareGuid (&gPlatformManagerFormsetGuid, ClassGuid)=3D=3D 0)= { + ClassGuid++; + continue; + } + + String =3D HiiGetString (HiiHandles[Index], ((EFI_IFR_FORM_SET *)P= tr)->FormSetTitle, NULL); + if (String =3D=3D NULL) { + String =3D HiiGetString (HiiHandle, STRING_TOKEN (STR_MISSING_ST= RING), NULL); + ASSERT (String !=3D NULL); + } + Token =3D HiiSetString (HiiHandle, 0, String, NULL); + FreePool (String); + + String =3D HiiGetString (HiiHandles[Index], ((EFI_IFR_FORM_SET *)P= tr)->Help, NULL); + if (String =3D=3D NULL) { + String =3D HiiGetString (HiiHandle, STRING_TOKEN (STR_MISSING_ST= RING), NULL); + ASSERT (String !=3D NULL); + } + TokenHelp =3D HiiSetString (HiiHandle, 0, String, NULL); + FreePool (String); + + CopyMem (&FormSetGuid, &((EFI_IFR_FORM_SET *)Ptr)->Guid, sizeof (E= FI_GUID)); + + if (NextShowFormId =3D=3D PLATFORM_MANAGER_FORM_ID) { + DevicePathStr =3D PmExtractDevicePathFromHiiHandle (HiiHandles[I= ndex]); + DevicePathId =3D 0; + if (DevicePathStr !=3D NULL) { + DevicePathId =3D HiiSetString (HiiHandle, 0, DevicePathStr, N= ULL); + FreePool (DevicePathStr); + } + + HiiCreateGotoExOpCode ( + StartOpCodeHandle, + 0, + Token, + TokenHelp, + 0, + (EFI_QUESTION_ID)(Index + ENTRY_KEY_OFFSET), + 0, + &FormSetGuid, + DevicePathId + ); + } + break; + } + + Ptr +=3D ((EFI_IFR_OP_HEADER *)Ptr)->Length; + } + + FreePool (Buffer); + Buffer =3D NULL; + TempSize =3D 0; + BufferSize =3D 0; + } + + HiiUpdateForm ( + HiiHandle, + &mPlatformManagerGuid, + NextShowFormId, + StartOpCodeHandle, + EndOpCodeHandle + ); + + HiiFreeOpCodeHandle (StartOpCodeHandle); + HiiFreeOpCodeHandle (EndOpCodeHandle); + FreePool (HiiHandles); +} + +/** + Install Boot Manager Menu driver. + + @param ImageHandle The image handle. + @param SystemTable The system table. + + @retval EFI_SUCEESS Install Boot manager menu success. + @retval Other Return error status. + +**/ +EFI_STATUS +EFIAPI +PlatformManagerUiLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_EVENT PlatformUiEntryEvent; + + gPlatformManagerPrivate.DriverHandle =3D NULL; + Status =3D gBS->InstallMultipleProtocolInterfaces ( + &gPlatformManagerPrivate.DriverHandle, + &gEfiDevicePathProtocolGuid, + &mPlatformManagerHiiVendorDevicePath, + NULL + ); + ASSERT_EFI_ERROR (Status); + + // + // Publish our HII data. + // + gPlatformManagerPrivate.HiiHandle =3D HiiAddPackages ( + &mPlatformManagerGuid, + gPlatformManagerPrivate.DriverHand= le, + PlatformManagerVfrBin, + PlatformManagerUiLibStrings, + NULL + ); + if (gPlatformManagerPrivate.HiiHandle !=3D NULL) { + // + // Update platform manager page + // + CreatePlatformManagerForm (PLATFORM_MANAGER_FORM_ID); + } else { + DEBUG ((DEBUG_ERROR, "%a: Failed to add Hii package\n", __FUNCTION__))= ; + return EFI_INVALID_PARAMETER; + } + + // Signal Entry event + Status =3D gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + EfiEventEmptyFunction, + NULL, + &gPlatformManagerEntryEventGuid, + &PlatformUiEntryEvent + ); + ASSERT_EFI_ERROR (Status); + gBS->SignalEvent (PlatformUiEntryEvent); + gBS->CloseEvent (PlatformUiEntryEvent); + + return EFI_SUCCESS; +} + +/** + Unloads the application and its installed protocol. + + @param ImageHandle Handle that identifies the image to be unloaded. + @param SystemTable The system table. + + @retval EFI_SUCCESS The image has been unloaded. +**/ +EFI_STATUS +EFIAPI +PlatformManagerUiLibDestructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_EVENT PlatformUiExitEvent; + + Status =3D gBS->UninstallMultipleProtocolInterfaces ( + gPlatformManagerPrivate.DriverHandle, + &gEfiDevicePathProtocolGuid, + &mPlatformManagerHiiVendorDevicePath, + NULL + ); + ASSERT_EFI_ERROR (Status); + + HiiRemovePackages (gPlatformManagerPrivate.HiiHandle); + + // Signal Exit event + Status =3D gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + EfiEventEmptyFunction, + NULL, + &gPlatformManagerExitEventGuid, + &PlatformUiExitEvent + ); + ASSERT_EFI_ERROR (Status); + gBS->SignalEvent (PlatformUiExitEvent); + gBS->CloseEvent (PlatformUiExitEvent); + + return EFI_SUCCESS; +} diff --git a/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Platform= ManagerStrings.uni b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/= PlatformManagerStrings.uni new file mode 100644 index 000000000000..3bb39413bc4b --- /dev/null +++ b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager= Strings.uni @@ -0,0 +1,21 @@ +// +// Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// + +/=3D# + +#langdef en-US "English" + +#string STR_EDKII_MENU_TITLE #language en-US "Platform Manager" +#string STR_EDKII_MENU_HELP #language en-US "This selection wi= ll take you to the Platform Manager" +#string STR_PLATFORM_LIST #language en-US "Platform Configur= ation" +#string STR_MISSING_STRING #language en-US "Missing String" +#string STR_EMPTY_STRING #language en-US "" +#string STR_EXIT_STRING #language en-US "Press ESC to exit= ." +// +// Ensure that this is the last string. We are using it programmatically +// to do string token re-usage settings for the Device Manager since we ar= e +// constantly recreating this page based on HII population. +//// diff --git a/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Platform= ManagerUiLib.uni b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Pl= atformManagerUiLib.uni new file mode 100644 index 000000000000..217a7e999dab --- /dev/null +++ b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager= UiLib.uni @@ -0,0 +1,13 @@ +// +// Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved. +// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// + +#string STR_MODULE_ABSTRACT +#language en-US +"Platform Manager Library used by UiApp" + +#string STR_MODULE_DESCRIPTION +#language en-US +"Platform Manager Library used by UiApp" diff --git a/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Platform= ManagerVfr.Vfr b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/Plat= formManagerVfr.Vfr new file mode 100644 index 000000000000..bfda75319416 --- /dev/null +++ b/Silicon/Ampere/AmpereSiliconPkg/Library/PlatformUiLib/PlatformManager= Vfr.Vfr @@ -0,0 +1,29 @@ +/** @file + + Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include "PlatformManagerVfr.h" + +formset + guid =3D FORMSET_GUID, + title =3D STRING_TOKEN(STR_EDKII_MENU_TITLE), + help =3D STRING_TOKEN(STR_EDKII_MENU_HELP), + classguid =3D EFI_HII_PLATFORM_SETUP_FORMSET_GUID, + + form formid =3D PLATFORM_MANAGER_FORM_ID, + title =3D STRING_TOKEN(STR_EDKII_MENU_TITLE); + subtitle text =3D STRING_TOKEN(STR_PLATFORM_LIST); + + label LABEL_ENTRY_LIST; + label LABEL_END; + + subtitle text =3D STRING_TOKEN(STR_EMPTY_STRING); + subtitle text =3D STRING_TOKEN(STR_EMPTY_STRING); + subtitle text =3D STRING_TOKEN(STR_EXIT_STRING); + endform; +endformset; --=20 2.17.1