From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (NAM02-SN1-obe.outbound.protection.outlook.com [40.107.96.41]) by mx.groups.io with SMTP id smtpd.web11.28763.1658759495917129171 for ; Mon, 25 Jul 2022 07:31:36 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=armAdQjA; 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.96.41, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ab4jMgDkAlMgcbj0duf+eq5WfQhLMM8c/+j9u16IihtmsQMgO5actY8tPpcsgL/0U2zBkgMA20Ggz79hT07iHKgHM7Zfg/8Trr4+GUciZfEQoz0Fujer9Wv1ubapOzixxm+v7yeb2MVMlR2UITKlQ39FiZh/02kGLZwF7CW1y7e6ZzwGy4yhMrRcbnPP5RQxhSZGsHEM6qcQ/uhNkKsnms19kyzaMcMRU1HcCDffYSrvJhhJ3+ERid8GqRq7YpePOGp5FkvR9hphsQ5wEHTbs05E0d2WHCB6+2fQf1QLYETip64Fs3XXROAocANP+aBUNh7/K97EoXDvY3M6Vp9Mmg== 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=Wyv3+tZxby0YjG2zr9H0U7gVzXfoc4rpusHZuK3sVnM=; b=FAVSstfwaiuyUrxowByQSFoYkZ8yHXnHLG0Ss2BE7X4WNxAw7d98RfvSyCKrFUKCl6X0CW6BA5ZR4BCoA1wqLAN9xb+ZbYMepDCTOTHeVajSQuiyyI8boca8lfe9H7VoZz7n/vgsmKaHcWqF6K92tfWEMwrHlg7spL3/OhT0bO/S2oo4L/VkGX6tq7RoX0QF3Jd7fSP+6U2etGxRXaXSNbXkQNJ+riovYbDe8btXztSilh9xDx9VOQ/zF7hrf2Dj0eS9wQBou3IYukuOr6aaMIsIEQXA43pgZUbvAiGiAJHrHHCE7ZKXqn5FD0RhxFaTZ2Jxy7jHyIccu5C2yoyhiA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; 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=Wyv3+tZxby0YjG2zr9H0U7gVzXfoc4rpusHZuK3sVnM=; b=armAdQjASQQhu6GSUq1k8KF/uqJXuRMkkNkCwmF7eeIWd6u0vOFnZILppeAYwoDlXqb76mvMNFOXW3UPNmEBk2dW/vqcoB61m6Pql23WXYZhzpm1p0RrRk5YAZeNihBVdSe9+7AfHUp2A5F/N9BdZ65UoMqYoLgl96bVNv6EDLU= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by CY4PR1201MB0087.namprd12.prod.outlook.com (2603:10b6:910:1b::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.18; Mon, 25 Jul 2022 14:31:32 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::605a:11f4:fc16:8b06]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::605a:11f4:fc16:8b06%5]) with mapi id 15.20.5458.024; Mon, 25 Jul 2022 14:31:32 +0000 From: "Chang, Abner" To: Nickle Wang , "devel@edk2.groups.io" CC: Andrew Fish , Ray Ni , "Yang, Atom" , Nick Ramirez Subject: Re: [edk2-staging][PATCH v2 1/2] edk2-staging/EmulatorPkg: Introduce Hii2RedfishBootDxe driver Thread-Topic: [edk2-staging][PATCH v2 1/2] edk2-staging/EmulatorPkg: Introduce Hii2RedfishBootDxe driver Thread-Index: AQHYn8bdYXDZyFY8qEyNSS6WI04xk62PJrNQ Date: Mon, 25 Jul 2022 14:31:32 +0000 Message-ID: References: <20220725013540.1699-1-nickle.wang@hpe.com> In-Reply-To: <20220725013540.1699-1-nickle.wang@hpe.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2022-07-25T14:31:29Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=f8a9863d-2e53-4a74-ba35-d973dc34da46; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a9ef9bb5-bbad-407f-7e8a-08da6e4a5ee1 x-ms-traffictypediagnostic: CY4PR1201MB0087:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qifbl6UirsgcO5Kr2+L6UW/XJtiVRwaZVINH/MtasCm4KadbQy6+JMwnmVJoHlUt25gVkdg5vtATtC1oL75gE2O3zUIBXlrHvffgq0IWZad5LfiI8+aFndgymncf65nXpqdwS4Ru2RipyMqnDtx9i3lAiSh4tn+R0SLCxtSZTopru9bcBXNJEwPoBNEiCswNcBEsMyJ2ukepkzEwpEAYV66BzG5UVpAYdsdkPdWIsjdwTglcIkGjnLMn1wNOZP/6NORTcLXL4bB9oVSaSwxWYyWgjNFa0Dl3KpUXq1f7m/2KqRUBJD3C0aTzas9TARK6EMKkXMFxcR9j2gKaT/2att6GZeHyNd689LUsQb69vhBcjceyw0UbD+gTCwnImCHUYgsAqt6MGpLUzKjKOUVLHGw55PNLzi87njkegWkk6fkb/WSBj0WJWhGP8vqdf2k4AncTWsZm0/h4mGHxHgVPpeiYRWhpTF844KyTbQfuz/Ne+GPVIzdDug+7GF+4nE9bmN/P0jtMVVLusdHKEOggNlA8PjWcXg4wvmP6E9myNj98rrrWwASKB85ZBn3ChiccWg1ciVdAKC+RZbdF4I2vP85FynzBlFd+ABKjBxAWr8ib7QD6lZ9rmZ/cmacdDva5XEfxNXhbvN2LGN7EZbGa+g52CTmmE+d9HrRtsShCQNOUHVER/pmNeuZ6EUQZouaK4FbaqhtEBxZTXQ/xDSVa3c65OwPAndxo44GtHcNhzZs1fQpa7P84+1JqPsCUzE0E8IxrPyKcJ9Yy1KISMK6VfJpaZ48Teqnac2KS0hh3Blb3CSe+GNVoKs6tIfxTyIORjN+yFc+7QcatMYlFJTvM9Q== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3966.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(346002)(39860400002)(366004)(396003)(136003)(376002)(8936002)(5660300002)(19627235002)(45080400002)(66946007)(66476007)(66556008)(64756008)(316002)(76116006)(66446008)(296002)(30864003)(6506007)(71200400001)(52536014)(54906003)(41300700001)(478600001)(53546011)(55016003)(2906002)(26005)(186003)(83380400001)(7696005)(9686003)(66574015)(86362001)(38070700005)(33656002)(4326008)(110136005)(8676002)(122000001)(38100700002)(579004)(559001)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ZdP1zraBOL7mhJQ5iGPccwqdozG4FxqUEHLS57/XtgKe9JnHl6yUe39Dlxg7?= =?us-ascii?Q?7Wt8Q8iaDAaOAD+6DMIQepOquYWRjLvhfo/UhhUCmzdNTLV16JZZQMy46m/n?= =?us-ascii?Q?IR8kP6sXb5cOLsBKQE7ne4F72DaLiKj2Ir3kyNqkaGj7G7n76KFUDU9C8hYr?= =?us-ascii?Q?AG5+0BjgY6DEoJUXbA+NvlQaSM274nr3HBHufDcSphHz+QFcMt5uVMd2ACbc?= =?us-ascii?Q?c7N6L+exgyfr5MA2U2810GdlMFmqW/SPmQ3gBXcvI+BnM91cgqwEQKhGvaVP?= =?us-ascii?Q?ORjuUXmDOAVv256j3ocQuA7CrtgqI9qSZ6REoEylv9koDPerTnW1H/93P7MT?= =?us-ascii?Q?hxi+KTWSDOdFwxSgqgTpUgIYsbSHqqw6G0P0vqSym9OBkh6m0sKExfTSeGc8?= =?us-ascii?Q?LlvLYOJd7RqKAdI3kh2Z12QIZeZU3EEzfV8oy3UvNQL1n5Wn4L2ofJngQJxp?= =?us-ascii?Q?xJDa2IkU85chF2+POBSr58/+N1V81XcS566LOLtehK6/Ls76jIiI8DBnyDfi?= =?us-ascii?Q?WqlmwmVeXlTCZ6bEsU8dClPU5U6IJ3ux5PbE3z9QxRIeZhveJdNRM3t1sWwe?= =?us-ascii?Q?AdSIqvlfWWABoQ4zAwf8Xh4qbTz6PFJpsOJHii9NuhDCxKyz4fH5GTsuTFGg?= =?us-ascii?Q?klJI+p71pqhqsgIEjsGUHO0AYdHaqwGClK/XZCGARFJ8/RbFYunM6qFb474C?= =?us-ascii?Q?bVRPn0T8/KfPD+HWeY7o0LFqoGUpn4wMeGl0OmM7qde0WGOxEoaARqgE6+tW?= =?us-ascii?Q?/Gp5YuyMf0aulGiSUGCKneJP/yntOS0UlHBjuvQn4sQHuS9yPMEoSzxXg87l?= =?us-ascii?Q?Ia5u9IP4WInwL3HAUKgjIasQ4CWNuRyMHMl/+0kzbY2PviVhpCN04OXpmuJd?= =?us-ascii?Q?xWyolvDssmOvkcSH3rops+cuqGUUggVB5fqa8IYfrN/9fEJvoo/GhCyAqAGU?= =?us-ascii?Q?SjXaclC0CEWCQ7tX36+TkF53XBUAy1LlJ0O0HslyFPN2MEywp5cKqlFhf7gx?= =?us-ascii?Q?6VB5NfqmYEiCkFQwWLfsupniLu76S8jwCzmd+OvSquEZONuFiC4WhVd/SJe3?= =?us-ascii?Q?f567J5CvYKeoZwk0EIWUbDGBVjeHUzGb9mDUEofPnDATTXUf0HRA0kRRtK+H?= =?us-ascii?Q?ujY4mJDa7pMkdTGRs3ToGBYlxPufKvRop6WqX8Pm1LMsmqRbRM3TSuhqYk3u?= =?us-ascii?Q?Svh35065J1UqQzOBgHEFXIyjVrMyrnUujmXTlElQpNb0eTDtUUN1Qh58+8iy?= =?us-ascii?Q?zDZa/VjUQFkXGev3/1hxUx3+gJGnVaHGkruyJdGuU+WDXZRCaLyPbybOjuEe?= =?us-ascii?Q?d75wy2bO4bpafBNF0KBF3Md5OT8bLuV2KZJkRm8fgMCdG+UCoXR4OzTCdh42?= =?us-ascii?Q?kWgy03sOMng3/F6xlcuvi0aVJnwXPMp1QPCPltUgJ3rDojt7R2qZMvlCjy2G?= =?us-ascii?Q?0FpLtQ1ksJ6eU9MWqEol1AIf0XLK0d8k8kXkaxXeGklRJYMTR4q9Mj/dZ2es?= =?us-ascii?Q?3qMqt8k95nfOSb+P0pA749LBs3nM3syAiiaO6LAQl7euvEhVJWhBwNvo6KCb?= =?us-ascii?Q?KpytntEnaoiRh+QjQC6PphmGa97RPd/0eMVjNmaV?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3966.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9ef9bb5-bbad-407f-7e8a-08da6e4a5ee1 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Jul 2022 14:31:32.4661 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Fb5zsB7xksRf+FqwK2vLIv388HTCcpYFRrcW76mxl0mFffsESOU3Bzwq8KhEac8Bm413WyS9Frc6eOaNJugJtA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0087 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only - General] Reviewed-by: Abner Chang > -----Original Message----- > From: Nickle Wang > Sent: Monday, July 25, 2022 9:36 AM > To: devel@edk2.groups.io > Cc: Andrew Fish ; Ray Ni ; Chang, > Abner ; Yang, Atom ; > Nick Ramirez > Subject: [edk2-staging][PATCH v2 1/2] edk2-staging/EmulatorPkg: Introduce > Hii2RedfishBootDxe driver >=20 > [CAUTION: External Email] >=20 > Add Hii2RedfishBootDxe driver with configure language defined in UNI file= in > order to demonstrate the use of Redfish Platform Config Protocol. Feature > drivers under RedfishClientPkg will work with this driver and provide the > REST data to Redfish service. >=20 > Signed-off-by: Nickle Wang > Cc: Andrew Fish > Cc: Ray Ni > Cc: Abner Chang > Cc: Yang Atom > Cc: Nick Ramirez > --- > EmulatorPkg/EmulatorPkg.dec | 5 +- > EmulatorPkg/EmulatorPkg.dsc | 3 +- > EmulatorPkg/EmulatorPkg.fdf | 3 +- > .../Hii2RedfishBootDxe/Hii2RedfishBootData.h | 60 ++ > .../Hii2RedfishBootDxe/Hii2RedfishBootDxe.c | 702 ++++++++++++++++++ > .../Hii2RedfishBootDxe/Hii2RedfishBootDxe.h | 53 ++ > .../Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf | 60 ++ > .../Hii2RedfishBootDxeMap.uni | 28 + > .../Hii2RedfishBootDxeStrings.uni | 41 + > .../Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr | 83 +++ > 10 files changed, 1034 insertions(+), 4 deletions(-) create mode 100644 > EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootData.h > create mode 100644 EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.c > create mode 100644 > EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.h > create mode 100644 > EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf > create mode 100644 > EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeMap.uni > create mode 100644 > EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeStrings.uni > create mode 100644 > EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr >=20 > diff --git a/EmulatorPkg/EmulatorPkg.dec b/EmulatorPkg/EmulatorPkg.dec > index 9e87b50afc..52a62c09c9 100644 > --- a/EmulatorPkg/EmulatorPkg.dec > +++ b/EmulatorPkg/EmulatorPkg.dec > @@ -4,7 +4,7 @@ > # > # Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.
= # > Portions copyright (c) 2011, Apple Inc. All rights reserved. > -# (C) Copyright 2020-2021 Hewlett Packard Enterprise Development LP
> +# (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP
> # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -47,7 +47,8 @@ > gEmuVirtualDisksGuid =3D { 0xf2ba331a, 0x8985, 0x11db, { 0xa4, 0= x06, 0x00, > 0x40, 0xd0, 0x2b, 0x18, 0x35 } } > gEmuPhysicalDisksGuid =3D { 0xf2bdcc96, 0x8985, 0x11db, { 0x87, 0= x19, 0x00, > 0x40, 0xd0, 0x2b, 0x18, 0x35 } } > gEmuRedfishServiceGuid =3D { 0x3fb208ac, 0x2185, 0x498c, { 0xbf, 0= x46, > 0xdc, 0x23, 0xda, 0x58, 0x7b, 0x55 } } > - gHii2RedfishMemoryFormsetGuid =3D { 0XC2BE579E, 0X3C57, 0X499C, { 0XA= 9, > 0XDF, 0XE6, 0X23, 0X8A, 0X49, 0X64, 0XF8 }} > + gHii2RedfishMemoryFormsetGuid =3D { 0xC2BE579E, 0x3C57, 0x499C, { > + 0xA9, 0xDF, 0xE6, 0x23, 0x8A, 0x49, 0x64, 0xF8 }} > + gHii2RedfishBootFormsetGuid =3D { 0x8399a787, 0x108e, 0x4e53, { 0x9e, > + 0xde, 0x4b, 0x18, 0xcc, 0x9e, 0xab, 0x3b }} >=20 > [PcdsFeatureFlag] > ## If TRUE, if symbols only load on breakpoints and gdb entry diff --g= it > a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc index > e5cb3c3d8d..1d59b4a1dd 100644 > --- a/EmulatorPkg/EmulatorPkg.dsc > +++ b/EmulatorPkg/EmulatorPkg.dsc > @@ -7,7 +7,7 @@ > # Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.
= # > Portions copyright (c) 2010 - 2011, Apple Inc. All rights reserved.
= # > Copyright (c) Microsoft Corporation. > -# (C) Copyright 2021 Hewlett Packard Enterprise Development LP
> +# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
> # > # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -490,6 +490,7 @@ >=20 > !if $(REDFISH_ENABLE) =3D=3D TRUE > EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf > + EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf > !endif > !include RedfishPkg/Redfish.dsc.inc > !include RedfishClientPkg/RedfishClient.dsc.inc > diff --git a/EmulatorPkg/EmulatorPkg.fdf b/EmulatorPkg/EmulatorPkg.fdf > index 5e770af186..f9ff4320d9 100644 > --- a/EmulatorPkg/EmulatorPkg.fdf > +++ b/EmulatorPkg/EmulatorPkg.fdf > @@ -3,7 +3,7 @@ > # > # Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.
= # > Portions copyright (c) 2009 - 2011, Apple Inc. All rights reserved.
-= # (C) > Copyright 2021 Hewlett Packard Enterprise Development LP
> +# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
> # > # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -214,6 +214,7 @@ > INF EmulatorPkg/EmuSnpDxe/EmuSnpDxe.inf > # > !if $(REDFISH_ENABLE) =3D=3D TRUE > INF EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf > + INF EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf > !endif > !include RedfishPkg/Redfish.fdf.inc > !include RedfishClientPkg/RedfishClient.fdf.inc > diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootData.h > b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootData.h > new file mode 100644 > index 0000000000..0da28a5032 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootData.h > @@ -0,0 +1,60 @@ > +/** @file > + The header file of HII-to-Redfish boot driver. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef HII_2_REDFISH_BOOT_DATA_H_ > +#define HII_2_REDFISH_BOOT_DATA_H_ > + > +#include > +#include > + > +#define HII_2_REDFISH_BOOT_FORMSET_GUID \ > + { \ > + 0x8399a787, 0x108e, 0x4e53, { 0x9e, 0xde, 0x4b, 0x18, 0xcc, 0x9e, > +0xab, 0x3b } \ > + } > + > +extern EFI_GUID gHii2RedfishBootFormsetGuid; > + > +#define FORM_ID 0x001 > +#define QUESTION_ID_BOOT_SOURCE_OVERRIDE_ENABLED 0x100 > +#define QUESTION_ID_BOOT_SOURCE_OVERRIDE_MODE 0x101 > +#define QUESTION_ID_BOOT_SOURCE_OVERRIDE_TARGET 0x102 > +#define LABEL_BOOT_OPTION 0x200 > +#define LABEL_BOOT_OPTION_END 0x201 > +#define BOOT_ORDER_LIST 0x300 > +#define MAX_BOOT_OPTIONS 100 > +#define BOOT_OPTION_VAR_STORE_ID 0x800 > +// > +// VarOffset that will be used to create question // all these values > +are computed from the structure // defined below // > +#define VAR_OFFSET(Field) ((UINT16) ((UINTN) > &(((HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA *) 0)->Field))) > + > +#pragma pack(1) > + > +// > +// Definiton of HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA > +// > +typedef struct { > + UINT8 BootSourceOverrideEnabled; > + UINT8 BootSourceOverrideMode; > + UINT8 BootSourceOverrideTarget; > + UINT8 Reversed; > +} HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA; > + > +// > +// Definiton of HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA > +// > +typedef struct { > + UINT32 BootOptionOrder[MAX_BOOT_OPTIONS]; > +} HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA; > + > +#pragma pack() > + > +#endif > diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.c > b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.c > new file mode 100644 > index 0000000000..203fd8e1ef > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.c > @@ -0,0 +1,702 @@ > +/** @file > + HII-to-Redfish boot driver. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include "Hii2RedfishBootDxe.h" > + > +EFI_GUID mHii2RedfishBootGuid =3D > HII_2_REDFISH_BOOT_FORMSET_GUID; > +EFI_HII_HANDLE mHiiHandle; > +EFI_HANDLE mDriverHandle; > +EFI_EVENT mEvent =3D NULL; > +CHAR16 mHii2RedfishEfiVar[] =3D L"Hii2RedfishBootEfiVar"; > +HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA mBootOptionsVarData; > + > +/// > +/// HII specific Vendor Device Path definition. > +/// > +HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath =3D { > + { > + { > + HARDWARE_DEVICE_PATH, > + HW_VENDOR_DP, > + { > + (UINT8) (sizeof (VENDOR_DEVICE_PATH)), > + (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) > + } > + }, > + HII_2_REDFISH_BOOT_FORMSET_GUID > + }, > + { > + END_DEVICE_PATH_TYPE, > + END_ENTIRE_DEVICE_PATH_SUBTYPE, > + { > + (UINT8) (END_DEVICE_PATH_LENGTH), > + (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8) > + } > + } > +}; > + > +/** > + This function add 'x-uefi-' configuration language to given string ID. > + > + @param[in] HiiHandle HII handle > + @param[in] StringId String token ID > + @param[in] ConfigLang Configure language of question > + > + @retval EFI_STATUS > + > +**/ > +EFI_STATUS > +UpdateConfigLanguageToQuestion ( > + IN EFI_HII_HANDLE HiiHandle, > + IN EFI_STRING_ID StringId, > + IN EFI_STRING ConfigLang > + ) > +{ > + CHAR16 ConfigLanguage[32]; > + > + if (HiiHandle =3D=3D NULL || StringId =3D=3D 0 || ConfigLang =3D=3D NU= LL) { > + return EFI_INVALID_LANGUAGE; > + } > + > + UnicodeSPrint (ConfigLanguage, sizeof (ConfigLanguage), ConfigLang); > + > + DEBUG ((DEBUG_INFO, "%a, add config-language for string(%d): %s\n", > + __FUNCTION__, StringId, ConfigLanguage)); > + > + HiiSetString ( > + HiiHandle, > + StringId, > + ConfigLanguage, > + COMPUTER_SYSTEM_SECHEMA_VERSION > + ); > + > + return EFI_SUCCESS; > +} > + > +/** > + This function add 'x-uefi-' configuration language to given string ID. > + > + @param[in] HiiHandle HII handle > + @param[in] StringId String token ID > + @param[in] Index The index of boot option > + @param[in] BootOption Boot option context > + > + @retval EFI_STATUS > + > +**/ > +EFI_STATUS > +UpdateConfigLanguageToValues ( > + IN EFI_HII_HANDLE HiiHandle, > + IN EFI_STRING_ID StringId, > + IN UINTN Index, > + IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption > + ) > +{ > + CHAR16 ConfigLanguage[10]; > + > + if (HiiHandle =3D=3D NULL || StringId =3D=3D 0 || BootOption =3D=3D NU= LL) { > + return EFI_INVALID_LANGUAGE; > + } > + > + UnicodeSPrint (ConfigLanguage, sizeof (ConfigLanguage), L"Boot%04x", > + BootOption->OptionNumber); > + > + DEBUG ((DEBUG_INFO, "%a, add config-language for string(%d): %s\n", > + __FUNCTION__, StringId, ConfigLanguage)); > + > + HiiSetString ( > + HiiHandle, > + StringId, > + ConfigLanguage, > + COMPUTER_SYSTEM_SECHEMA_VERSION > + ); > + > + return EFI_SUCCESS; > +} > + > +/** > + This function creates boot order with ordered-list op-codes in runtime= . > + > + @retval EFI_STATUS > + > +**/ > +EFI_STATUS > +RefreshBootOrderList ( > + VOID > + ) > +{ > + UINTN Index; > + EFI_BOOT_MANAGER_LOAD_OPTION *BootOption; > + UINTN BootOptionCount; > + EFI_STRING_ID Token; > + VOID *StartOpCodeHandle; > + VOID *EndOpCodeHandle; > + EFI_IFR_GUID_LABEL *StartLabel; > + EFI_IFR_GUID_LABEL *EndLabel; > + BOOLEAN IsLegacyOption; > + VOID *OptionsOpCodeHandle; > + UINTN OptionIndex; > + > + // > + // for better user experience > + // 1. User changes HD configuration (e.g.: unplug HDD), here we have > + a chance to remove the HDD boot option // 2. User enables/disables > + UEFI PXE, here we have a chance to add/remove EFI Network boot option > + // EfiBootManagerRefreshAllBootOption (); > + > + BootOption =3D EfiBootManagerGetLoadOptions (&BootOptionCount, > + LoadOptionTypeBoot); > + > + if (BootOptionCount =3D=3D 0) { > + return EFI_NOT_FOUND; > + } > + > + // > + // Initial var store > + // > + ZeroMem (&mBootOptionsVarData, sizeof > + (HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA)); > + > + // > + // 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)); StartLabel- > >ExtendOpCode =3D EFI_IFR_EXTEND_OP_LABEL; > + StartLabel->Number =3D LABEL_BOOT_OPTION; > + > + // > + // Create Hii Extend Label OpCode as the end opcode // EndLabel =3D > + (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, > + &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL)); EndLabel- > >ExtendOpCode =3D EFI_IFR_EXTEND_OP_LABEL; > + EndLabel->Number =3D LABEL_BOOT_OPTION_END; > + > + > + OptionsOpCodeHandle =3D HiiAllocateOpCodeHandle (); ASSERT > + (OptionsOpCodeHandle !=3D NULL); > + > + for (Index =3D 0, OptionIndex =3D 0; Index < BootOptionCount; Index++)= { > + // > + // Don't display hidden boot options, but retain inactive ones. > + // > + if ((BootOption[Index].Attributes & LOAD_OPTION_HIDDEN) !=3D 0) { > + continue; > + } > + > + // > + // Group the legacy boot option in the sub title created dynamically > + // > + IsLegacyOption =3D (BOOLEAN) ( > + (DevicePathType (BootOption[Index].FilePath) =3D= =3D > BBS_DEVICE_PATH) && > + (DevicePathSubType (BootOption[Index].FilePath) = =3D=3D > BBS_BBS_DP) > + ); > + > + // > + // Don't display legacy boot options > + // > + if (IsLegacyOption) { > + continue; > + } > + > + mBootOptionsVarData.BootOptionOrder[OptionIndex++] =3D > + (UINT32)BootOption[Index].OptionNumber; > + > + ASSERT (BootOption[Index].Description !=3D NULL); > + > + Token =3D HiiSetString (mHiiHandle, 0, BootOption[Index].Description= , > + NULL); > + > + // > + // Add boot option > + // > + HiiCreateOneOfOptionOpCode ( > + OptionsOpCodeHandle, > + Token, > + 0, > + EFI_IFR_TYPE_NUM_SIZE_32, > + BootOption[Index].OptionNumber > + ); > + > + // > + // Add x-uefi configure language for boot options. > + // > + UpdateConfigLanguageToValues (mHiiHandle, Token, OptionIndex, > + &BootOption[Index]); } > + > + // > + // Create ordered list op-code > + // > + HiiCreateOrderedListOpCode ( > + StartOpCodeHandle, // Container for dynamic c= reated > opcodes > + BOOT_ORDER_LIST, // Question ID > + BOOT_OPTION_VAR_STORE_ID, // VarStore ID > + (UINT16)VAR_OFFSET (BootOptionOrder), // Offset in Buffe= r > Storage > + STRING_TOKEN (STR_BOOT_ORDER_LIST), // Question prompt text > + STRING_TOKEN (STR_BOOT_ORDER_LIST_HELP), // Question help text > + 0, // Question flag > + EFI_IFR_UNIQUE_SET, // Ordered list flag, e.g. > EFI_IFR_UNIQUE_SET > + EFI_IFR_TYPE_NUM_SIZE_32, // Data type of Question v= alue > + MAX_BOOT_OPTIONS, // Maximum container > + OptionsOpCodeHandle, // Option Opcode list > + NULL // Default Opcode is NULL > + ); > + > + // > + // Add x-uefi configure language for boot order. > + // > + UpdateConfigLanguageToQuestion (mHiiHandle, STRING_TOKEN > + (STR_BOOT_ORDER_LIST), COMPUTER_SYSTEM_BOOT_BOOTORDER); > + > + // > + // Update HII form > + // > + HiiUpdateForm ( > + mHiiHandle, > + &mHii2RedfishBootGuid, > + FORM_ID, > + StartOpCodeHandle, > + EndOpCodeHandle > + ); > + > + HiiFreeOpCodeHandle (StartOpCodeHandle); HiiFreeOpCodeHandle > + (EndOpCodeHandle); HiiFreeOpCodeHandle (OptionsOpCodeHandle); > + > + EfiBootManagerFreeLoadOptions (BootOption, BootOptionCount); > + > + return EFI_SUCCESS; > +} > + > +/** > + This function update the "BootOrder" EFI Variable based on > + BMM Formset's NV map. It then refresh BootOptionMenu > + with the new "BootOrder" list. > + > + @param[in] BootOptionVar Boot option NV data > + > + @retval EFI_SUCCESS The function complete successfully. > + @retval EFI_OUT_OF_RESOURCES Not enough memory to complete the > function. > + @return The EFI variable can not be saved. See gRT->SetVariable for de= tail > return information. > + > +**/ > +EFI_STATUS > +UpdateBootorderList ( > + IN HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA *BootOptionVar > + ) > +{ > + EFI_STATUS Status; > + UINT16 Index; > + UINT16 OrderIndex; > + UINT16 *BootOrder; > + UINTN BootOrderSize; > + UINT16 OptionNumber; > + > + if (BootOptionVar =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + // > + // First check whether BootOrder is present in current configuration > + // > + GetEfiGlobalVariable2 (L"BootOrder", (VOID **) &BootOrder, > + &BootOrderSize); if (BootOrder =3D=3D NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + // > + // OptionOrder is subset of BootOrder // for (OrderIndex =3D 0; > + (OrderIndex < MAX_BOOT_OPTIONS) && (BootOptionVar- > >BootOptionOrder[OrderIndex] !=3D 0); OrderIndex++) { > + for (Index =3D OrderIndex; Index < BootOrderSize / sizeof (UINT16); > Index++) { > + if ((BootOrder[Index] =3D=3D (UINT16)BootOptionVar- > >BootOptionOrder[OrderIndex]) && (OrderIndex !=3D Index)) { > + OptionNumber =3D BootOrder[Index]; > + CopyMem (&BootOrder[OrderIndex + 1], &BootOrder[OrderIndex], > (Index - OrderIndex) * sizeof (UINT16)); > + BootOrder[OrderIndex] =3D OptionNumber; > + } > + } > + } > + > + Status =3D gRT->SetVariable ( > + L"BootOrder", > + &gEfiGlobalVariableGuid, > + EFI_VARIABLE_BOOTSERVICE_ACCESS | > EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE, > + BootOrderSize, > + BootOrder > + ); > + FreePool (BootOrder); > + > + return Status; > +} > + > +/** > + Initial HII variable if it does not exist. > + > + @retval EFI_SUCESS HII variable is initialized. > + > +**/ > +EFI_STATUS > +InitialHiiVairable ( > + VOID > + ) > +{ > + EFI_STATUS Status; > + UINTN BufferSize; > + HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA Hii2RedfishBootVar; > + > + // > + // Get Buffer Storage data from EFI variable. > + // Try to get the current setting from variable. > + // > + BufferSize =3D sizeof (HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA); > + Status =3D gRT->GetVariable ( > + mHii2RedfishEfiVar, > + &gHii2RedfishBootFormsetGuid, > + NULL, > + &BufferSize, > + &Hii2RedfishBootVar > + ); > + if (!EFI_ERROR (Status)) { > + return EFI_SUCCESS; > + } > + > + // > + // Initialization > + // > + Hii2RedfishBootVar.BootSourceOverrideEnabled =3D STR_DISABLED; > + Hii2RedfishBootVar.BootSourceOverrideMode =3D STR_UEFI; > + Hii2RedfishBootVar.BootSourceOverrideTarget =3D STR_TARGET_NONE; > + Hii2RedfishBootVar.Reversed =3D 0x00; > + > + Status =3D gRT->SetVariable ( > + mHii2RedfishEfiVar, > + &gHii2RedfishBootFormsetGuid, > + VARIABLE_ATTRIBUTE_NV_BS, > + BufferSize, > + &Hii2RedfishBootVar > + ); > + > + // > + // Initial var store > + // > + ZeroMem (&mBootOptionsVarData, sizeof > + (HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA)); > + > + return Status; > +} > + > +/** > + This function allows a caller to extract the current configuration > +for one > + or more named elements from the target driver. > + > + @param[in] This Points to the > EFI_HII_CONFIG_ACCESS_PROTOCOL. > + @param[in] Request A null-terminated Unicode string in > + format. > + @param[out] Progress On return, points to a character in the= Request > + string. Points to the string's null ter= minator if > + request was successful. Points to the m= ost recent > + '&' before the first failing name/value= pair (or > + the beginning of the string if the fail= ure is in > + the first name/value pair) if the reque= st was not > + successful. > + @param[out] Results A null-terminated Unicode string in > + format which has all va= lues filled > + in for the names in the Request string.= String to > + be allocated by the called function. > + > + @retval EFI_SUCCESS The Results is filled with the requeste= d values. > + @retval EFI_OUT_OF_RESOURCES Not enough memory to store the > results. > + @retval EFI_INVALID_PARAMETER Request is illegal syntax, or unknown > name. > + @retval EFI_NOT_FOUND Routing data doesn't match any storage = in > this > + driver. > + > +**/ > +EFI_STATUS > +EFIAPI > +Hii2RedfishBootExtractConfig ( > + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, > + IN CONST EFI_STRING Request, > + OUT EFI_STRING *Progress, > + OUT EFI_STRING *Results > + ) > +{ > + EFI_STATUS Status; > + > + if (Progress =3D=3D NULL || Results =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + *Progress =3D Request; > + > + if (Request =3D=3D NULL) { > + return EFI_UNSUPPORTED; > + } > + > + // > + // Check whether request for EFI Varstore. EFI varstore get data // > + through hii database, not support in this path. > + // > + if (HiiIsConfigHdrMatch(Request, &gHii2RedfishBootFormsetGuid, > L"Hii2RedfishBootEfiVar")) { > + return EFI_UNSUPPORTED; > + } > + > + // > + // Handle boot order list > + // > + if (HiiIsConfigHdrMatch(Request, &gHii2RedfishBootFormsetGuid, > L"Hii2RedfishBootOptionVar")) { > + Status =3D gHiiConfigRouting->BlockToConfig ( > + gHiiConfigRouting, > + Request, > + (UINT8 *) &mBootOptionsVarData, > + sizeof (HII_2_REDFISH_BOOT_OPTION_VARSTO= RE_DATA), > + Results, > + Progress > + ); > + > + // > + // Set Progress string to the original request string. > + // > + if (Request =3D=3D NULL) { > + *Progress =3D NULL; > + } else if (StrStr (Request, L"OFFSET") =3D=3D NULL) { > + *Progress =3D Request + StrLen (Request); > + } > + > + return EFI_SUCCESS; > + } > + > + return EFI_NOT_FOUND; > +} > + > + > +/** > + This function processes the results of changes in configuration. > + > + @param[in] This Points to the > EFI_HII_CONFIG_ACCESS_PROTOCOL. > + @param[in] Configuration A null-terminated Unicode string in > > + format. > + @param[out] Progress A pointer to a string filled in with th= e offset of > + the most recent '&' before the first fa= iling > + name/value pair (or the beginning of th= e string if > + the failure is in the first name/value = pair) or > + the terminating NULL if all was success= ful. > + > + @retval EFI_SUCCESS The Results is processed successfully. > + @retval EFI_INVALID_PARAMETER Configuration is NULL. > + @retval EFI_NOT_FOUND Routing data doesn't match any storage = in > this > + driver. > + > +**/ > +EFI_STATUS > +EFIAPI > +Hii2RedfishBootRouteConfig ( > + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, > + IN CONST EFI_STRING Configuration, > + OUT EFI_STRING *Progress > + ) > +{ > + EFI_STATUS Status; > + UINTN BufferSize; > + HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA BootOptionsVar; > + > + *Progress =3D Configuration; > + > + // > + // Check whether request for EFI Varstore. EFI varstore get data // > + through hii database, not support in this path. > + // > + if (HiiIsConfigHdrMatch(Configuration, &gHii2RedfishBootFormsetGuid, > L"Hii2RedfishBootEfiVar")) { > + return EFI_UNSUPPORTED; > + } > + > + // > + // Handle boot order list > + // > + if (HiiIsConfigHdrMatch(Configuration, &gHii2RedfishBootFormsetGuid, > L"Hii2RedfishBootOptionVar")) { > + BufferSize =3D sizeof(HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA); > + ZeroMem (&BootOptionsVar, > sizeof(HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA)); > + Status =3D gHiiConfigRouting->ConfigToBlock ( > + gHiiConfigRouting, > + Configuration, > + (UINT8 *)&BootOptionsVar, > + &BufferSize, > + Progress > + ); > + > + if (CompareMem (BootOptionsVar.BootOptionOrder, > mBootOptionsVarData.BootOptionOrder, (sizeof (UINT32) * > MAX_BOOT_OPTIONS))) { > + Status =3D UpdateBootorderList (&BootOptionsVar); > + if (!EFI_ERROR (Status)) { > + // > + // Boot order update successed. Copy it to local copy. > + // > + CopyMem (mBootOptionsVarData.BootOptionOrder, > BootOptionsVar.BootOptionOrder, (sizeof (UINT32) * > MAX_BOOT_OPTIONS)); > + } > + } > + > + return EFI_SUCCESS; > + } > + > + return EFI_NOT_FOUND; > +} > + > + > +/** > + This function processes the results of changes in configuration. > + > + @param[in] This Points to the > EFI_HII_CONFIG_ACCESS_PROTOCOL. > + @param[in] Action Specifies the type of action taken by t= he browser. > + @param[in] QuestionId A unique value which is sent to the ori= ginal > + exporting driver so that it can identif= y the type > + of data to expect. > + @param[in] Type The type of value for the question. > + @param[in] Value A pointer to the data being sent to the= original > + exporting driver. > + @param[out] ActionRequest On return, points to the action request= ed > by the > + callback function. > + > + @retval EFI_SUCCESS The callback successfully handled the a= ction. > + @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold > the > + variable and its data. > + @retval EFI_DEVICE_ERROR The variable could not be saved. > + @retval EFI_UNSUPPORTED The specified Action is not supported b= y > the > + callback. > + > +**/ > +EFI_STATUS > +EFIAPI > +Hii2RedfishBootDriverCallback ( > + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, > + IN EFI_BROWSER_ACTION Action, > + IN EFI_QUESTION_ID QuestionId, > + IN UINT8 Type, > + IN EFI_IFR_TYPE_VALUE *Value, > + OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest > + ) > +{ > + DEBUG ((DEBUG_INFO, "%a, action: 0x%x QID: 0x%x\n", __FUNCTION__, > +Action, QuestionId)); > + > + if (QuestionId =3D=3D QUESTION_ID_BOOT_SOURCE_OVERRIDE_ENABLED && > Action =3D=3D EFI_BROWSER_ACTION_FORM_OPEN) { > + RefreshBootOrderList (); > + > + return EFI_SUCCESS; > + } > + > + return EFI_UNSUPPORTED; > +} > + > +EFI_HII_CONFIG_ACCESS_PROTOCOL mHii2RedfishConfigAccess =3D { > + Hii2RedfishBootExtractConfig, > + Hii2RedfishBootRouteConfig, > + Hii2RedfishBootDriverCallback > +}; > + > +/** > + Callback function executed when the ready-to-provisioning event group = is > signaled. > + > + @param[in] Event Event whose notification function is being invok= ed. > + @param[out] Context Pointer to the Context buffer > + > +**/ > +VOID > +EFIAPI > +Hii2RedfishBootReadyToProvisioning ( > + IN EFI_EVENT Event, > + OUT VOID *Context > + ) > +{ > + // > + // Refresh boot order and create configure language > + // > + RefreshBootOrderList (); > +} > + > +/** > + Main entry for this driver. > + > + @param[in] ImageHandle Image handle this driver. > + @param[in] SystemTable Pointer to SystemTable. > + > + @retval EFI_SUCESS This function always complete successfully. > + > +**/ > +EFI_STATUS > +EFIAPI > +Hii2RedfishBootDxeDriverEntryPoint ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + EFI_STATUS Status; > + > + mDriverHandle =3D NULL; > + Status =3D gBS->InstallMultipleProtocolInterfaces ( > + &mDriverHandle, > + &gEfiDevicePathProtocolGuid, > + &mHiiVendorDevicePath, > + &gEfiHiiConfigAccessProtocolGuid, > + &mHii2RedfishConfigAccess, > + NULL > + ); > + > + // > + // Publish our HII data > + // > + mHiiHandle =3D HiiAddPackages ( > + &mHii2RedfishBootGuid, > + mDriverHandle, > + Hii2RedfishBootDxeStrings, > + Hii2RedfishBootVfrBin, > + NULL > + ); > + if (mHiiHandle =3D=3D NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + Status =3D InitialHiiVairable (); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to initial variable: %r\n", > + __FUNCTION__, Status)); } > + > + // > + // Register read-to-provisioning event // Status =3D > + CreateReadyToProvisioningEvent ( > + Hii2RedfishBootReadyToProvisioning, > + NULL, > + &mEvent > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to register ready-to-provisioning > + event: %r\n", __FUNCTION__, Status)); } > + > + return EFI_SUCCESS; > +} > + > +/** > + Unloads the application and its installed protocol. > + > + @param[in] ImageHandle Handle that identifies the image to be > unloaded. > + > + @retval EFI_SUCCESS The image has been unloaded. > +**/ > +EFI_STATUS > +EFIAPI > +Hii2RedfishBootDxeDriverUnload ( > + IN EFI_HANDLE ImageHandle > + ) > +{ > + if (mHiiHandle !=3D NULL) { > + HiiRemovePackages (mHiiHandle); > + } > + > + if (mEvent !=3D NULL) { > + gBS->CloseEvent (mEvent); > + } > + > + return EFI_SUCCESS; > +} > diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.h > b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.h > new file mode 100644 > index 0000000000..58e6d33f0f > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.h > @@ -0,0 +1,53 @@ > +/** @file > + HII-to-Redfish memory driver header file. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef HII_2_REDFISH_BOOT_DXE_H_ > +#define HII_2_REDFISH_BOOT_DXE_H_ > + > +#include > + > +#include > +#include > +#include > +#include > +#include #include > + > +#include > +#include > +#include > +#include > +#include #include > + #include > + > +#include > + > +#include > +#include > + > +#include "Hii2RedfishBootData.h" > + > +extern UINT8 Hii2RedfishBootVfrBin[]; > + > +#define COMPUTER_SYSTEM_SECHEMA_VERSION "x-uefi-redfish- > ComputerSystem.v1_5_0" > +#define COMPUTER_SYSTEM_BOOT_BOOTORDER > L"/Systems/{1}/Boot/BootOrder" > + > +#pragma pack(1) > + > +/// > +/// HII specific Vendor Device Path definition. > +/// > +typedef struct { > + VENDOR_DEVICE_PATH VendorDevicePath; > + EFI_DEVICE_PATH_PROTOCOL End; > +} HII_VENDOR_DEVICE_PATH; > + > +#pragma pack() > + > +#endif > diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf > b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf > new file mode 100644 > index 0000000000..8d40885904 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf > @@ -0,0 +1,60 @@ > +## @file > +# HII-to-Redfish boot driver. > +# > +# (C) Copyright 2022 Hewlett Packard Enterprise Development LP
# # > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D Hii2RedfishBootDxe > + FILE_GUID =3D F9BA69BD-1EDB-4334-9D57-7E974ADF136= 1 > + MODULE_TYPE =3D UEFI_DRIVER > + VERSION_STRING =3D 1.0 > + ENTRY_POINT =3D Hii2RedfishBootDxeDriverEntryPoint > + UNLOAD_IMAGE =3D Hii2RedfishBootDxeDriverUnload > + > +[Sources] > + Hii2RedfishBootDxe.c > + Hii2RedfishBootDxe.h > + Hii2RedfishBootData.h > + Hii2RedfishBootVfr.vfr > + Hii2RedfishBootDxeStrings.uni > + Hii2RedfishBootDxeMap.uni > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + EmulatorPkg/EmulatorPkg.dec > + RedfishClientPkg/RedfishClientPkg.dec > + > +[LibraryClasses] > + UefiDriverEntryPoint > + BaseLib > + BaseMemoryLib > + DebugLib > + PcdLib > + MemoryAllocationLib > + UefiBootServicesTableLib > + UefiRuntimeServicesTableLib > + UefiLib > + PrintLib > + HiiLib > + UefiBootManagerLib > + UefiHiiServicesLib > + RedfishEventLib > + > +[Protocols] > + gEfiDevicePathProtocolGuid > + gEfiHiiConfigAccessProtocolGuid > + > + > +[Guids] > + gHii2RedfishBootFormsetGuid > + gEfiIfrTianoGuid > + > +[Depex] > + gEfiHiiDatabaseProtocolGuid > + > diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeMap.uni > b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeMap.uni > new file mode 100644 > index 0000000000..0589c90df5 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeMap.uni > @@ -0,0 +1,28 @@ > +/** @file > + HII-to-Redfish memory driver. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +/=3D# > +#langdef x-uefi-redfish-ComputerSystem.v1_5_0 > "ComputerSystem.v1_5_0" > + > +#string STR_BOOT_SOURCE_OVERRIDE_ENABLED #language x-uefi- > redfish-ComputerSystem.v1_5_0 > "/Systems/{1}/Boot/BootSourceOverrideEnabled" > +#string STR_BOOT_SOURCE_OVERRIDE_MODE #language x-uefi- > redfish-ComputerSystem.v1_5_0 > "/Systems/{1}/Boot/BootSourceOverrideMode" > +#string STR_BOOT_SOURCE_OVERRIDE_TARGET #language x-uefi- > redfish-ComputerSystem.v1_5_0 > "/Systems/{1}/Boot/BootSourceOverrideTarget" > + > +#string STR_DISABLED #language x-uefi-redfish- > ComputerSystem.v1_5_0 "Disabled" > +#string STR_ONCE #language x-uefi-redfish- > ComputerSystem.v1_5_0 "Once" > +#string STR_CONTINUOUS #language x-uefi-redfish- > ComputerSystem.v1_5_0 "Continuous" > +#string STR_UEFI #language x-uefi-redfish- > ComputerSystem.v1_5_0 "UEFI" > +#string STR_LEGACY #language x-uefi-redfish- > ComputerSystem.v1_5_0 "Legacy" > +#string STR_TARGET_NONE #language x-uefi-redfish- > ComputerSystem.v1_5_0 "None" > +#string STR_TARGET_PXE #language x-uefi-redfish- > ComputerSystem.v1_5_0 "Pxe" > +#string STR_TARGET_USB #language x-uefi-redfish- > ComputerSystem.v1_5_0 "Usb" > +#string STR_TARGET_HDD #language x-uefi-redfish- > ComputerSystem.v1_5_0 "Hdd" > +#string STR_TARGET_BIOS_SETUP #language x-uefi-redfish- > ComputerSystem.v1_5_0 "BiosSetup" > +#string STR_TARGET_UEFI #language x-uefi-redfish- > ComputerSystem.v1_5_0 "UefiTarget" > +#string STR_TARGET_UEFI_HTTP #language x-uefi-redfish- > ComputerSystem.v1_5_0 "UefiHttp" > diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeStrings.uni > b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeStrings.uni > new file mode 100644 > index 0000000000..c2057633c2 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeStrings.uni > @@ -0,0 +1,41 @@ > +/** @file > + HII-to-Redfish memory driver. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +/=3D# > +#langdef en-US "English" > + > +#string STR_FORM_SET_TITLE #language en-US "HII t= o Redfish > (Boot)" > +#string STR_FORM_SET_TITLE_HELP #language en-US "HII t= o > Redfish (Boot)" > +#string STR_FORM_TITLE #language en-US "HII t= o Redfish > Boot properties" > + > +#string STR_BOOT_ORDER #language en-US "Boot = Order" > +#string STR_BOOT_ORDER_LIST #language en-US "Boot = Order > List" > +#string STR_BOOT_ORDER_LIST_HELP #language en-US "Boot > Order List" > + > +#string STR_BOOT_SOURCE_OVERRIDE_ENABLED #language en-US > "Boot Source Override Enabled" > +#string STR_BOOT_SOURCE_OVERRIDE_ENABLED_HELP #language en-US > "Describes the state of the Boot Source Override feature." > + > +#string STR_BOOT_SOURCE_OVERRIDE_MODE #language en-US > "Boot Source Override Mode" > +#string STR_BOOT_SOURCE_OVERRIDE_MODE_HELP #language en-US > "The BIOS Boot Mode (either Legacy or UEFI) to be used when > BootSourceOverrideTarget boot source is booted from." > + > +#string STR_BOOT_SOURCE_OVERRIDE_TARGET #language en-US > "Boot Source Override Target" > +#string STR_BOOT_SOURCE_OVERRIDE_TARGET_HELP #language en-US > "The current boot source to be used at next boot instead of the normal bo= ot > device, if BootSourceOverrideEnabled is true." > + > +#string STR_DISABLED #language en-US "Disabl= ed" > +#string STR_ONCE #language en-US "Once" > +#string STR_CONTINUOUS #language en-US "Contin= uous" > +#string STR_UEFI #language en-US "UEFI" > +#string STR_LEGACY #language en-US "Legacy= " > +#string STR_TARGET_NONE #language en-US "None" > +#string STR_TARGET_PXE #language en-US "Pxe" > +#string STR_TARGET_USB #language en-US "Usb" > +#string STR_TARGET_HDD #language en-US "Hdd" > +#string STR_TARGET_BIOS_SETUP #language en-US "Bios S= etup > Menu" > +#string STR_TARGET_UEFI #language en-US "Uefi T= arget" > +#string STR_TARGET_UEFI_HTTP #language en-US "Uefi H= ttp" > diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr > b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr > new file mode 100644 > index 0000000000..3758de6bfd > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr > @@ -0,0 +1,83 @@ > +/** @file > + HII-to-Redfish boot driver VFR file. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > + > +#include "Hii2RedfishBootData.h" > + > +formset > + guid =3D HII_2_REDFISH_BOOT_FORMSET_GUID, > + title =3D STRING_TOKEN(STR_FORM_SET_TITLE), > + help =3D STRING_TOKEN(STR_FORM_SET_TITLE_HELP), > + classguid =3D EFI_HII_PLATFORM_SETUP_FORMSET_GUID, > + > + // > + // Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI) // > + efivarstore HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA, > + attribute =3D EFI_VARIABLE_BOOTSERVICE_ACCESS | > EFI_VARIABLE_NON_VOLATILE, // EFI variable attribures > + name =3D Hii2RedfishBootEfiVar, > + guid =3D HII_2_REDFISH_BOOT_FORMSET_GUID; > + > + // > + // Define a variable Storage for boot order // varstore > + HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA, > + varid =3D BOOT_OPTION_VAR_STORE_ID, > + name =3D Hii2RedfishBootOptionVar, > + guid =3D HII_2_REDFISH_BOOT_FORMSET_GUID; > + > + // > + // Define a Form (EFI_IFR_FORM) > + // > + form formid =3D FORM_ID, // Form ID > + title =3D STRING_TOKEN(STR_FORM_TITLE); // Form title > + > + oneof varid =3D Hii2RedfishBootEfiVar.BootSourceOverrideEnabled, > + questionid =3D QUESTION_ID_BOOT_SOURCE_OVERRIDE_ENABLED, > + prompt =3D STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_ENABLED), > + help =3D > STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_ENABLED_HELP), > + flags =3D INTERACTIVE | NUMERIC_SIZE_1, > + option text =3D STRING_TOKEN(STR_DISABLED), value =3D > STR_DISABLED, flags =3D DEFAULT; > + option text =3D STRING_TOKEN(STR_ONCE), value =3D = STR_ONCE, > flags =3D 0; > + option text =3D STRING_TOKEN(STR_CONTINUOUS), value =3D > STR_CONTINUOUS, flags =3D 0; > + endoneof; > + > + oneof varid =3D Hii2RedfishBootEfiVar.BootSourceOverrideMode, > + questionid =3D QUESTION_ID_BOOT_SOURCE_OVERRIDE_MODE, > + prompt =3D STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_MODE), > + help =3D STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_MODE_HELP), > + flags =3D INTERACTIVE | NUMERIC_SIZE_1, > + option text =3D STRING_TOKEN(STR_UEFI), value =3D = STR_UEFI, > flags =3D DEFAULT; > + option text =3D STRING_TOKEN(STR_LEGACY), value =3D = STR_LEGACY, > flags =3D 0; > + endoneof; > + > + oneof varid =3D Hii2RedfishBootEfiVar.BootSourceOverrideTarget, > + questionid =3D QUESTION_ID_BOOT_SOURCE_OVERRIDE_TARGET, > + prompt =3D STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_TARGET), > + help =3D > STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_TARGET_HELP), > + flags =3D INTERACTIVE | NUMERIC_SIZE_1, > + option text =3D STRING_TOKEN(STR_TARGET_NONE), value = =3D > STR_TARGET_NONE, flags =3D DEFAULT; > + option text =3D STRING_TOKEN(STR_TARGET_PXE), value = =3D > STR_TARGET_PXE, flags =3D 0; > + option text =3D STRING_TOKEN(STR_TARGET_USB), value = =3D > STR_TARGET_USB, flags =3D 0; > + option text =3D STRING_TOKEN(STR_TARGET_HDD), value = =3D > STR_TARGET_HDD, flags =3D 0; > + option text =3D STRING_TOKEN(STR_TARGET_BIOS_SETUP), value = =3D > STR_TARGET_BIOS_SETUP, flags =3D 0; > + option text =3D STRING_TOKEN(STR_TARGET_UEFI), value = =3D > STR_TARGET_UEFI, flags =3D 0; > + option text =3D STRING_TOKEN(STR_TARGET_UEFI_HTTP), value = =3D > STR_TARGET_UEFI_HTTP, flags =3D 0; > + endoneof; > + > + subtitle text =3D STRING_TOKEN(STR_BOOT_ORDER); > + > + // > + // This is where we will dynamically add choices for the Boot Manage= r > + // > + label LABEL_BOOT_OPTION; > + label LABEL_BOOT_OPTION_END; > + > + endform; > +endformset; > -- > 2.32.0.windows.2