From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (NAM10-MW2-obe.outbound.protection.outlook.com [40.107.94.45]) by mx.groups.io with SMTP id smtpd.web10.18412.1683727625730648294 for ; Wed, 10 May 2023 07:07:05 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=VtztcPx1; 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.94.45, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F1QRToLuNBh2M1Fjv9Hhzxkdxwh/2Obigy9QmEJXmzKTencX6NSLscKkezQqrzgesKlLccgl8QGOgiUlEXvc+VIP0qvbQ6saf37WYdYy+qegd2LUORoW6Hb9DablH73YVya6P/UycNYDBL6TYm7TY0TEKvviozJLexh47LvLpJ88ESYUop4NmXD6sGsvjlfPs/l+rWB42I6y5k1zP6+/2IUrVkr7QRZzOeU9RlW4rkeW1q6DKc8H/wQ9aO3JfZZFt2vHOPPXyg/LiGNuesybkq3kibp8cHIndY/f+6lXUivGgXk1OTMTJg/GYWRXgsX33/5n7xDsMo/pYHMmtu9oLQ== 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=bl8F8jySlpbYBuMiLD29OMc92lO7SHhOttZTV21X6eU=; b=ItbBzaIqT9sWcKZbgMyGqUWOgIx7W/Mtlvlu0Lwox+m+Lzl+XstwibPbzJ5I9/9mMKxe5CuD7tuqJGFrWJ7M+hKpeDbzgdPnllVd4+h2y1qxDBsQ9D4x4FHdbNaTEjqKdB0GunnRYVf+cbwFR059ml3TRtr3qBGfCaNREo243cEV4ASHJncrskoRw7s0fqP6DX9rSzr/ib/p8EAKlzuf4F/KneCFzCLjWaOt28t+Xi9tZBwu4EvZGDwIKriKwrwD7+nWC8hKOFYc1UllcBmUJredKWwbkJkZ55cqdSovsInSF/PAFHjgEHf1eUzf/GMgtCbzKUKsgHglhYGlK0xVJw== 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=bl8F8jySlpbYBuMiLD29OMc92lO7SHhOttZTV21X6eU=; b=VtztcPx10cP1YPmYAHz2FNz0keE6LzBhRovnFZD2cPd4NQVqznO1pmRdU2Xuywvomd8q8FTljx7SP+UYqK3GXGMPJ3IH2qQfA9GS5ueFgIHcejbMwIKvoBMVBbl5yRGkb2J2GB2NgBIm2lRvSNmA4qtuh1wEEtBLo4dt5rXbyFI= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by PH7PR12MB6857.namprd12.prod.outlook.com (2603:10b6:510:1af::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.18; Wed, 10 May 2023 14:07:02 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::46f1:bdce:a4bc:29e3]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::46f1:bdce:a4bc:29e3%3]) with mapi id 15.20.6363.032; Wed, 10 May 2023 14:07:02 +0000 From: "Chang, Abner" To: Nickle Wang , "devel@edk2.groups.io" CC: Igor Kulchytskyy Subject: Re: [edk2-redfish-client][PATCH 3/5] RedfishClientPkg: Introduce Computer System collection driver Thread-Topic: [edk2-redfish-client][PATCH 3/5] RedfishClientPkg: Introduce Computer System collection driver Thread-Index: AQHZg0AENSbEhJqg/kmCs9LJ7B7dRa9Tir5A Date: Wed, 10 May 2023 14:07:02 +0000 Message-ID: References: <20230510130435.9406-1-nicklew@nvidia.com> In-Reply-To: <20230510130435.9406-1-nicklew@nvidia.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=2023-05-10T14:07:00Z; 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=679c35bd-4d1a-4e08-8efa-610d75a4e814; 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-traffictypediagnostic: MN2PR12MB3966:EE_|PH7PR12MB6857:EE_ x-ms-office365-filtering-correlation-id: 4e214b8f-1a59-4f2b-36f6-08db515fd435 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 39cDQZWW3Z6dOzRbiv2WcXwHPap1Hjj5r+KcBfLc6UHOUxt5610SLUrqgvlJlFaEbKsuIZa2BCrjH2MG8y2EQ2CfZmEtBVV5phyi6XvD66JCN6zZQUIKHBPZTn6MxkQGR86o0dT2kwsz/Ikv0DzeAnvlftCwFHDZYzOLP9bFzTCda9HAGoDTLRFTUAOEHU+TP2PYGQBNkOhZ/pWUS3+YiN1gu9O6DIlGvwWRDdtx7b+V+P+fOfmT9DrMJpFNKTikLcISjChzUcZwsF6TWXsFcLWbneMbBcqdygKtZ5UXRu7G4pcbANdecWo1bc7xk4qT69E77wZgmJ0AxzN+r79YGoJJqYyzLU4M0+EuAQOb/TjL1o3IDA9trvVTV633BhV1goxkXvF0zN1H3l4TW0RDTN0K3qkGummLNaDWPBc2hrJblWAGF6LtMOLoiVY0/H0oi1Nr4gCjjCjgJs20XxFMCMBQ4pJ2SPYDfdv3SNFKCIag5c86I99gCKF2pZN1omx3keB2uz1oM+veaqLbgeMMdIbBpREUohxhNM9xlwfIcEYDqBF7Mj2muE53a2j/jAmhCHAdEx1t0v9geIK5eNcWbRxa5RhVmqBKOJawgQaw9cdG7Z3ho8EwxnlQiVF8dW5IElxjVgUtopgVR1z9nnH1uw== 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:(13230028)(4636009)(396003)(346002)(366004)(376002)(39860400002)(136003)(451199021)(83380400001)(6506007)(9686003)(33656002)(26005)(41300700001)(86362001)(7696005)(38100700002)(55016003)(71200400001)(186003)(53546011)(122000001)(66476007)(66556008)(66946007)(66446008)(64756008)(76116006)(110136005)(38070700005)(478600001)(4326008)(52536014)(8936002)(316002)(2906002)(8676002)(30864003)(5660300002)(559001)(579004)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?S7YGAX2FOtl81XCaeSqxW7qNeGhZca7a6ztXYYzYDRyUv2Crw857HRB91Wp0?= =?us-ascii?Q?G6g2mK5w/utz6sB5/q88iSukSHvYOSzyEEL0vkLvOQyKcenb61sw8YUC0Vhh?= =?us-ascii?Q?PjPtE81clsDAPJqQC/cr3wDiwnaBO44aT5G+7OVZiOi44gzHhhn1vGke8HSL?= =?us-ascii?Q?DyP9uYcw/eDiy092T+fIQ0vR+JMKZaBDLcjpRoFN6/HfpfTvqKUInP0aPtss?= =?us-ascii?Q?sZoe3lvAZsICcTZgmbJWwK/cqiD5MlfTvDkFUc2rFp6aQXcZX5MSMdIzYyeA?= =?us-ascii?Q?u54gegHGA+T9HzkCTDJnGIq4sgMfbFbs2DdZklqsUqEqAzN/ZTgHPF3Dhklc?= =?us-ascii?Q?OufjHwweETyAPjCloeAeBOHsAEi/u7j38r0zeoeiELDkkthk4BynsXbugbxF?= =?us-ascii?Q?h0d/cXeuUPkVrinny/8/TNxzx9aHI49mp6SPVkDTYR6RnTE7LGmtjEjO45Tb?= =?us-ascii?Q?qg2/LqW9o6zYzjF1CDt4ZlHObTcjsOr9htm8liSfa2KiKAsMbdHcnaBN0bEK?= =?us-ascii?Q?8nIzxGoNDqKH6S8pLrP0ZaGOZECIT8h2NeAF4wij/btuZEL+HkKgRyzOM5hg?= =?us-ascii?Q?nrYjRdWVCgAhVBgp1C20eRF9F7aKAhwdOeSyfNCIz3SWIBovTwTgifNeobEH?= =?us-ascii?Q?d8OAwHLVo1URT1GM2sxVvlunfowxf5OnR8+Zkb417IS5vD8jVCFOiZjRpuPz?= =?us-ascii?Q?HQai7sBOEcPJpmlx84YBf0p6VDUNPTdUvCapbsyvEg77dAur2aFc3oPNDoip?= =?us-ascii?Q?RkXUZXLvyEkrEcvycEUyST2P1zcXTXcxZBZKGPzKoI5KeOgnUha3LJ12YrZV?= =?us-ascii?Q?fJIb0/7zl8rdeCFtgZU5F2SryLxcrrMeZDlIGPh7azXJiO1tuhxTIOJ4BmxC?= =?us-ascii?Q?nES9MpItk61yhYaYriQ5Wlg8m/DwFc6dKK6SvTFkCNfeSXblXMBWBfGplyKT?= =?us-ascii?Q?/D0cptE53qoSL6/xi97qa1sqf4nROm06g385Y6dJoUEq5ueb37hO0LCzeITB?= =?us-ascii?Q?wGMbReEIwnEMhdQ7ptp6mCi6mkcgcgIY8MwBk5r0UA5Vco25zegbkliBhF1h?= =?us-ascii?Q?ALbtnXkTFvpCJT/GQNPf/LgoWO/owN9YkZyzJeFHBwyW4EXEkldkHpXkOnsx?= =?us-ascii?Q?E2+TiA2mrDAxmvc5br37G2ZJG6r1DfIVf57yqEsa+tqKwir1SORTF/r9ESds?= =?us-ascii?Q?vg60f5a9PCXESQFcYotodwjBdc7R065dFstoBK1Ig/C5b1tuShEHUJv07amu?= =?us-ascii?Q?0DT1cmBgaKp2FV60tmUfLWKonpkX3jzaXRda0j6P6FPu+gf9kCE3gvZv2Vvd?= =?us-ascii?Q?wlOABZcXL0uPPKBXGQMbVc02UoywuwH5XwU8e7iBtTmlgmrckCYLzbyD0yzN?= =?us-ascii?Q?7PtyktDFkstHCHE7VXs1f5Efn0Qtj7PJfWElku2iXBUrPLIhhiMn5ZMavB6i?= =?us-ascii?Q?1Y6oxp70LseOCtCcTxTK64q/u4Y7x+Ev+5zEUPH6ACSAwvkbw6OQwubqK1pV?= =?us-ascii?Q?A4f9PEmgcytkNUS8Cto7Zv88ySiFsLnU5jNgWqUbpavcfZPypSkR0gkf7wAN?= =?us-ascii?Q?qtWafGh/NriOfqzUoYU=3D?= 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: 4e214b8f-1a59-4f2b-36f6-08db515fd435 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 May 2023 14:07:02.6457 (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: YIR9RQZ2r2bCgtg/hbTONYho+yrpIeAnNgjnyIJzgKcVzOb7hxB7sWqJD6HcDFFPi0v1sf2dJb2E+G0AH/JSyw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6857 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only - General] Please check commit message, the line seems too long. Reviewed-by: > -----Original Message----- > From: Nickle Wang > Sent: Wednesday, May 10, 2023 9:05 PM > To: devel@edk2.groups.io > Cc: Chang, Abner ; Igor Kulchytskyy > > Subject: [edk2-redfish-client][PATCH 3/5] RedfishClientPkg: Introduce > Computer System collection driver >=20 > Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding. >=20 >=20 > Introduce new feature driver to support Computer System Collection > schema. Update corresponding FDF and DSC file to enable this feature driv= er. >=20 > Signed-off-by: Nickle Wang > Cc: Abner Chang > Cc: Igor Kulchytskyy > --- > .../RedfishClientComponents.dsc.inc | 2 + > RedfishClientPkg/RedfishClientLibs.dsc.inc | 1 + > .../ComputerSystemCollectionDxe.inf | 56 ++ > .../ComputerSystemCollectionDxe.h | 21 + > .../ComputerSystemCollectionDxe.c | 667 ++++++++++++++++++ > RedfishClientPkg/RedfishClient.fdf.inc | 2 + > 6 files changed, 749 insertions(+) > create mode 100644 > RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste > mCollectionDxe.inf > create mode 100644 > RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste > mCollectionDxe.h > create mode 100644 > RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste > mCollectionDxe.c >=20 > diff --git a/RedfishClientPkg/RedfishClientComponents.dsc.inc > b/RedfishClientPkg/RedfishClientComponents.dsc.inc > index 031d8755..d4a33385 100644 > --- a/RedfishClientPkg/RedfishClientComponents.dsc.inc > +++ b/RedfishClientPkg/RedfishClientComponents.dsc.inc > @@ -21,6 +21,7 @@ > # > RedfishClientPkg/Features/Memory/V1_7_1/Dxe/MemoryDxe.inf >=20 > RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe.inf > + > + > RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste > mCo > + llectionDxe.inf >=20 > !include RedfishClientPkg/RedfishJsonStructureDxe.dsc.inc >=20 > @@ -30,3 +31,4 @@ >=20 > RedfishClientPkg/Converter/Memory/v1_7_1/RedfishMemory_V1_7_1_Dx > e.inf >=20 > RedfishClientPkg/Converter/MemoryCollection/RedfishMemoryCollection_ > Dxe.inf > !endif > + > + > RedfishClientPkg/Converter/ComputerSystemCollection/RedfishComputerS > ys > + temCollection_Dxe.inf > diff --git a/RedfishClientPkg/RedfishClientLibs.dsc.inc > b/RedfishClientPkg/RedfishClientLibs.dsc.inc > index 413b83a7..21595613 100644 > --- a/RedfishClientPkg/RedfishClientLibs.dsc.inc > +++ b/RedfishClientPkg/RedfishClientLibs.dsc.inc > @@ -19,6 +19,7 @@ > # >=20 > MemoryV1_7_1Lib|RedfishClientPkg/ConverterLib/edk2library/Memory/v1 > _7_1/Lib.inf >=20 > MemoryCollectionLib|RedfishClientPkg/ConverterLib/edk2library/MemoryC > ollection/Lib.inf > + > + ComputerSystemCollectionLib|RedfishClientPkg/ConverterLib/edk2library/ > + ComputerSystemCollection/Lib.inf >=20 > NetLib|NetworkPkg/Library/DxeNetLib/DxeNetLib.inf > HttpLib|NetworkPkg/Library/DxeHttpLib/DxeHttpLib.inf > diff --git > a/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > emCollectionDxe.inf > b/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > emCollectionDxe.inf > new file mode 100644 > index 00000000..107d6c07 > --- /dev/null > +++ > b/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > +++ emCollectionDxe.inf > @@ -0,0 +1,56 @@ > +## @file > +# > +# Redfish ComputerSystemCollection collection driver. > +# > +# (C) Copyright 2020-2022 Hewlett Packard Enterprise Development > +LP
# # SPDX-License-Identifier: BSD-2-Clause-Patent # ## > + > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D ComputerSystemCollectionDxe > + FILE_GUID =3D df883f2e-9f58-4514-9cc9-06cbe6f63073 > + MODULE_TYPE =3D DXE_DRIVER > + VERSION_STRING =3D 1.0 > + ENTRY_POINT =3D RedfishCollectionEntryPoint > + UNLOAD_IMAGE =3D RedfishCollectionUnload > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + RedfishPkg/RedfishPkg.dec > + RedfishClientPkg/RedfishClientPkg.dec > + > +[Sources] > + ComputerSystemCollectionDxe.h > + ComputerSystemCollectionDxe.c > + > +[LibraryClasses] > + DebugLib > + BaseMemoryLib > + ConverterCommonLib > + MemoryAllocationLib > + RedfishFeatureUtilityLib > + RedfishLib > + UefiLib > + UefiDriverEntryPoint > + UefiBootServicesTableLib > + EdkIIRedfishResourceConfigLib > + RedfishVersionLib > + > +[Protocols] > + gEdkIIRedfishConfigHandlerProtocolGuid ## CONSUMED > + gEfiRestJsonStructureProtocolGuid ## CONSUMED > + gEdkIIRedfishFeatureProtocolGuid ## CONSUMED > + > +[Guids] > + > +[Pcd] > + gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaStringSize > + gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaVersionSize > + > +[Depex] > + TRUE > diff --git > a/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > emCollectionDxe.h > b/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > emCollectionDxe.h > new file mode 100644 > index 00000000..4c5f67fb > --- /dev/null > +++ > b/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > emCollectionDxe.h > @@ -0,0 +1,21 @@ > +/** @file > + > + Redfish feature driver implementation - internal header file > + > + (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef EFI_REDFISH_COMPUTERSYSTEM_COLLECTION_H_ > +#define EFI_REDFISH_COMPUTERSYSTEM_COLLECTION_H_ > + > +#include > ction.h> > +#include > + > +#define REDFISH_SCHEMA_NAME "ComputerSystem" > +#define REDFISH_MANAGED_URI L"Systems/{}" > +#define MAX_URI_LENGTH 256 > + > +#endif > diff --git > a/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > emCollectionDxe.c > b/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > emCollectionDxe.c > new file mode 100644 > index 00000000..393ec955 > --- /dev/null > +++ > b/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyst > emCollectionDxe.c > @@ -0,0 +1,667 @@ > +/** @file > + > + Redfish feature driver implementation - ComputerSystemCollection > + > + (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include "ComputerSystemCollectionDxe.h" > + > +REDFISH_COLLECTION_PRIVATE *mRedfishCollectionPrivate =3D NULL; > + > +EFI_STATUS > +HandleResource ( > + IN REDFISH_COLLECTION_PRIVATE *Private, > + IN EFI_STRING Uri > + ) > +{ > + EFI_STATUS Status; > + REDFISH_SCHEMA_INFO SchemaInfo; > + EFI_STRING ConfigLang; > + EFI_STRING ReturnedConfigLang; > + UINTN Index; > + > + if ((Private =3D=3D NULL) || IS_EMPTY_STRING (Uri)) { > + return EFI_INVALID_PARAMETER; > + } > + > + // > + // Resource match > + // > + > + DEBUG ((REDFISH_DEBUG_TRACE, "%a, process resource for: %s\n", > __FUNCTION__, Uri)); > + > + Status =3D GetRedfishSchemaInfo (Private->RedfishService, Private- > >JsonStructProtocol, Uri, &SchemaInfo); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to get schema information from: %s > %r\n", __FUNCTION__, Uri, Status)); > + return Status; > + } > + > + // > + // Check and see if this is target resource that we want to handle. > + // Some resource is handled by other provider so we have to make sure > this first. > + // > + DEBUG ((REDFISH_DEBUG_TRACE, "%s Identify for %s\n", __FUNCTION__, > Uri)); > + ConfigLang =3D RedfishGetConfigLanguage (Uri); > + if (ConfigLang =3D=3D NULL) { > + Status =3D EdkIIRedfishResourceConfigIdentify (&SchemaInfo, Uri, Pri= vate- > >InformationExchange); > + if (EFI_ERROR (Status)) { > + if (Status =3D=3D EFI_UNSUPPORTED) { > + DEBUG ((DEBUG_INFO, "%a, \"%s\" is not handled by us\n", > __FUNCTION__, Uri)); > + return EFI_SUCCESS; > + } > + > + DEBUG ((DEBUG_ERROR, "%a, fail to identify resource: \"%s\": %r\n"= , > __FUNCTION__, Uri, Status)); > + return Status; > + } > + } else { > + DEBUG ((REDFISH_DEBUG_TRACE, "%a, history record found: %s\n", > __FUNCTION__, ConfigLang)); > + // > + // Set exchange information > + // > + Status =3D GetArrayIndexFromArrayTypeConfigureLang (ConfigLang, > &ReturnedConfigLang, &Index); > + if (!EFI_ERROR (Status) || (Status =3D=3D EFI_NOT_FOUND)) { > + Private->InformationExchange->ReturnedInformation.Type > =3D InformationTypeCollectionMemberConfigLanguage; > + Private->InformationExchange- > >ReturnedInformation.ConfigureLanguageList.Count =3D 1; > + Private->InformationExchange- > >ReturnedInformation.ConfigureLanguageList.List =3D > + AllocateZeroPool (sizeof > (REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG)); > + > + if (Private->InformationExchange- > >ReturnedInformation.ConfigureLanguageList.List =3D=3D NULL) { > + DEBUG ((DEBUG_ERROR, "%a, Fail to allocate memory for > REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG.\n", __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES; > + } > + > + Private->InformationExchange- > >ReturnedInformation.ConfigureLanguageList.List[0].Index =3D Inde= x; > + Private->InformationExchange- > >ReturnedInformation.ConfigureLanguageList.List[0].ConfigureLang =3D > + (EFI_STRING)AllocateCopyPool (StrSize (ReturnedConfigLang), (VOI= D > *)ReturnedConfigLang); > + } else { > + DEBUG ((DEBUG_ERROR, "%a, > GetArrayIndexFromArrayTypeConfigureLang fail: %r\n", __FUNCTION__, > Status)); > + } > + > + FreePool (ConfigLang); > + } > + > + // > + // Check and see if target property exist or not even when collection > memeber exists. > + // If not, we sill do provision. > + // > + DEBUG ((REDFISH_DEBUG_TRACE, "%a Check for %s\n", __FUNCTION__, > Uri)); > + Status =3D EdkIIRedfishResourceConfigCheck (&SchemaInfo, Uri); > + if (EFI_ERROR (Status)) { > + // > + // The target property does not exist, do the provision to create pr= operty. > + // > + DEBUG ((REDFISH_DEBUG_TRACE, "%a provision for %s\n", > __FUNCTION__, Uri)); > + Status =3D EdkIIRedfishResourceConfigProvisionging (&SchemaInfo, Uri= , > Private->InformationExchange, FALSE); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to provision with GET mode: %r\n"= , > __FUNCTION__, Status)); > + } > + > + return Status; > + } > + > + // > + // Consume first. > + // > + DEBUG ((REDFISH_DEBUG_TRACE, "%a consume for %s\n", > __FUNCTION__, Uri)); > + Status =3D EdkIIRedfishResourceConfigConsume (&SchemaInfo, Uri); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to consume resoruce for: %s: %r\n", > __FUNCTION__, Uri, Status)); > + } > + > + // > + // Patch. > + // > + DEBUG ((REDFISH_DEBUG_TRACE, "%a update for %s\n", __FUNCTION__, > Uri)); > + Status =3D EdkIIRedfishResourceConfigUpdate (&SchemaInfo, Uri); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to update resoruce for: %s: %r\n", > __FUNCTION__, Uri, Status)); > + } > + > + return Status; > +} > + > +EFI_STATUS > +HandleCollectionResource ( > + IN REDFISH_COLLECTION_PRIVATE *Private > + ) > +{ > + EFI_STATUS Status; > + EFI_REDFISH_COMPUTERSYSTEMCOLLECTION *Collection; > + EFI_REDFISH_COMPUTERSYSTEMCOLLECTION_CS *CollectionCs; > + RedfishCS_Link *List; > + RedfishCS_Header *Header; > + RedfishCS_Type_Uri_Data *UriData; > + EFI_STRING MemberUri; > + > + if (Private =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + if ((Private->JsonStructProtocol =3D=3D NULL) || (Private->CollectionJ= son =3D=3D > NULL)) { > + return EFI_NOT_READY; > + } > + > + DEBUG ((REDFISH_DEBUG_TRACE, "%a, process collection for: %s\n", > __FUNCTION__, Private->CollectionUri)); > + > + // > + // Convert JSON text to C structure. > + // > + Status =3D Private->JsonStructProtocol->ToStructure ( > + Private->JsonStructProtocol, > + NULL, > + Private->CollectionJson, > + (EFI_REST_JSON_STRUCTURE_HEADE= R **)&Collection > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, ToStructure() failed: %r\n", > __FUNCTION__, Status)); > + return Status; > + } > + > + CollectionCs =3D Collection->ComputerSystemCollection; > + > + if (*CollectionCs->Membersodata_count =3D=3D 0) { > + return EFI_NOT_FOUND; > + } > + > + if (IsLinkEmpty (&CollectionCs->Members)) { > + return EFI_NOT_FOUND; > + } > + > + List =3D GetFirstLink (&CollectionCs->Members); > + while (TRUE) { > + Header =3D (RedfishCS_Header *)List; > + if (Header->ResourceType =3D=3D RedfishCS_Type_Uri) { > + UriData =3D (RedfishCS_Type_Uri_Data *)Header; > + MemberUri =3D NULL; > + MemberUri =3D StrAsciiToUnicode (UriData->Uri); > + ASSERT (MemberUri !=3D NULL); > + if (MemberUri !=3D NULL) { > + Status =3D HandleResource (Private, MemberUri); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, process ComputerSystemCollection > resource: %a failed: %r\n", __FUNCTION__, UriData->Uri, Status)); > + } > + > + FreePool (MemberUri); > + } > + } > + > + if (IsLinkAtEnd (&CollectionCs->Members, List)) { > + break; > + } > + > + List =3D GetNextLink (&CollectionCs->Members, List); > + } > + > + // > + // Release resource. > + // > + Private->JsonStructProtocol->DestoryStructure (Private- > >JsonStructProtocol, (EFI_REST_JSON_STRUCTURE_HEADER *)Collection); > + > + return EFI_SUCCESS; > +} > + > +EFI_STATUS > +CreateCollectionResource ( > + IN REDFISH_COLLECTION_PRIVATE *Private > + ) > +{ > + EFI_STATUS Status; > + REDFISH_SCHEMA_INFO SchemaInfo; > + > + if (Private =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + DEBUG ((REDFISH_DEBUG_TRACE, "%a, create resource for collection for: > %s\n", __FUNCTION__, Private->CollectionUri)); > + > + Status =3D GetSupportedSchemaVersion (REDFISH_SCHEMA_NAME, > &SchemaInfo); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to find supported schema from HII > database: %r\n", __FUNCTION__, Status)); > + return Status; > + } > + > + DEBUG ((REDFISH_DEBUG_TRACE, "%a, supported schema: %a > %a.%a.%a\n", __FUNCTION__, SchemaInfo.Schema, SchemaInfo.Major, > SchemaInfo.Minor, SchemaInfo.Errata)); > + > + Status =3D EdkIIRedfishResourceConfigProvisionging (&SchemaInfo, Priva= te- > >CollectionUri, Private->InformationExchange, TRUE); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to create resoruce for: %s: %r\n", > __FUNCTION__, Private->CollectionUri, Status)); > + } > + > + return Status; > +} > + > +EFI_STATUS > +ReleaseCollectionResource ( > + IN REDFISH_COLLECTION_PRIVATE *Private > + ) > +{ > + if (Private =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + // > + // Release resource > + // > + if (Private->RedResponse.Payload !=3D NULL) { > + RedfishFreeResponse ( > + Private->RedResponse.StatusCode, > + Private->RedResponse.HeaderCount, > + Private->RedResponse.Headers, > + Private->RedResponse.Payload > + ); > + Private->RedResponse.StatusCode =3D NULL; > + Private->RedResponse.HeaderCount =3D 0; > + Private->RedResponse.Headers =3D NULL; > + Private->RedResponse.Payload =3D NULL; > + } > + > + if (Private->CollectionJson !=3D NULL) { > + FreePool (Private->CollectionJson); > + Private->CollectionJson =3D NULL; > + } > + > + if (Private->RedfishVersion !=3D NULL) { > + FreePool (Private->RedfishVersion); > + Private->RedfishVersion =3D NULL; > + } > + > + return EFI_SUCCESS; > +} > + > +EFI_STATUS > +CollectionHandler ( > + IN REDFISH_COLLECTION_PRIVATE *Private > + ) > +{ > + EFI_STATUS Status; > + > + if (Private =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + DEBUG ((REDFISH_DEBUG_TRACE, "%a, collection handler for %s\n", > __FUNCTION__, Private->CollectionUri)); > + > + // > + // Query collection from Redfish service. > + // > + Status =3D GetResourceByUri (Private->RedfishService, Private- > >CollectionUri, &Private->RedResponse); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, unable to get resource from: %s :%r\n", > __FUNCTION__, Private->CollectionUri, Status)); > + goto ON_RELEASE; > + } > + > + Private->CollectionPayload =3D Private->RedResponse.Payload; > + ASSERT (Private->CollectionPayload !=3D NULL); > + > + Private->CollectionJson =3D JsonDumpString (RedfishJsonInPayload (Priv= ate- > >CollectionPayload), EDKII_JSON_COMPACT); > + ASSERT (Private->CollectionJson !=3D NULL); > + > + Status =3D HandleCollectionResource (Private); > + if (EFI_ERROR (Status) && (Status =3D=3D EFI_NOT_FOUND)) { > + Status =3D CreateCollectionResource (Private); > + } > + > +ON_RELEASE: > + > + ReleaseCollectionResource (Private); > + > + return Status; > +} > + > +/** > + The callback function provided by Redfish Feature driver. > + > + @param[in] This Pointer to EDKII_REDFISH_FEATURE_PR= OTOCOL > instance. > + @param[in] FeatureAction The action Redfish feature driver s= hould > take. > + @param[in] Uri The collection URI. > + @param[in] Context The context of Redfish feature driv= er. > + @param[in,out] InformationExchange The pointer to > RESOURCE_INFORMATION_EXCHANGE > + > + @retval EFI_SUCCESS Redfish feature driver callback is ex= ecuted > successfully. > + @retval Others Some errors happened. > + > + @retval EFI_SUCCESS Redfish feature driver callback is ex= ecuted > successfully. > + @retval Others Some errors happened. > + > +**/ > +EFI_STATUS > +EFIAPI > +RedfishCollectionFeatureCallback ( > + IN EDKII_REDFISH_FEATURE_PROTOCOL *This, > + IN FEATURE_CALLBACK_ACTION FeatureAction, > + IN VOID *Context, > + IN OUT RESOURCE_INFORMATION_EXCHANGE *InformationExchange > + ) > +{ > + EFI_STATUS Status; > + REDFISH_SERVICE RedfishService; > + REDFISH_COLLECTION_PRIVATE *Private; > + EFI_STRING ResourceUri; > + > + if (FeatureAction !=3D CallbackActionStartOperation) { > + return EFI_UNSUPPORTED; > + } > + > + Private =3D (REDFISH_COLLECTION_PRIVATE *)Context; > + > + RedfishService =3D Private->RedfishService; > + if (RedfishService =3D=3D NULL) { > + return EFI_NOT_READY; > + } > + > + // > + // Save in private structure. > + // > + Private->InformationExchange =3D InformationExchange; > + > + // > + // Find Redfish version on BMC > + // > + Private->RedfishVersion =3D RedfishGetVersion (RedfishService); > + > + // > + // Create the full URI from Redfish service root. > + // > + ResourceUri =3D (EFI_STRING)AllocateZeroPool (MAX_URI_LENGTH * sizeof > (CHAR16)); > + if (ResourceUri =3D=3D NULL) { > + DEBUG ((DEBUG_ERROR, "%a, Fail to allocate memory for full URI.\n", > __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES; > + } > + > + StrCatS (ResourceUri, MAX_URI_LENGTH, Private->RedfishVersion); > + StrCatS (ResourceUri, MAX_URI_LENGTH, InformationExchange- > >SendInformation.FullUri); > + > + // > + // Initialize collection path > + // > + Private->CollectionUri =3D RedfishGetUri (ResourceUri); > + if (Private->CollectionUri =3D=3D NULL) { > + ASSERT (FALSE); > + return EFI_OUT_OF_RESOURCES; > + } > + > + Status =3D CollectionHandler (Private); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, CollectionHandler failure: %r\n", > __FUNCTION__, Status)); > + } > + > + return EFI_SUCCESS; > +} > + > +/** > + Initialize a Redfish configure handler. > + > + This function will be called by the Redfish config driver to initializ= e each > Redfish configure > + handler. > + > + @param[in] This Pointer to > EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL instance. > + @param[in] RedfishConfigServiceInfo Redfish service informaion. > + > + @retval EFI_SUCCESS The handler has been initialized = successfully. > + @retval EFI_DEVICE_ERROR Failed to create or configure the= REST EX > protocol instance. > + @retval EFI_ALREADY_STARTED This handler has already been > initialized. > + @retval Other Error happens during the initiali= zation. > + > +**/ > +EFI_STATUS > +EFIAPI > +RedfishCollectionInit ( > + IN EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL *This, > + IN REDFISH_CONFIG_SERVICE_INFORMATION > *RedfishConfigServiceInfo > + ) > +{ > + REDFISH_COLLECTION_PRIVATE *Private; > + > + Private =3D REDFISH_COLLECTION_PRIVATE_DATA_FROM_PROTOCOL (This); > + > + Private->RedfishService =3D RedfishCreateService > (RedfishConfigServiceInfo); > + if (Private->RedfishService =3D=3D NULL) { > + return EFI_DEVICE_ERROR; > + } > + > + return EFI_SUCCESS; > +} > + > +/** > + Stop a Redfish configure handler. > + > + @param[in] This Pointer to > EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL instance. > + > + @retval EFI_SUCCESS This handler has been stoped successf= ully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EFIAPI > +RedfishCollectionStop ( > + IN EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL *This > + ) > +{ > + REDFISH_COLLECTION_PRIVATE *Private; > + > + Private =3D REDFISH_COLLECTION_PRIVATE_DATA_FROM_PROTOCOL (This); > + > + if (Private->RedfishService !=3D NULL) { > + RedfishCleanupService (Private->RedfishService); > + Private->RedfishService =3D NULL; > + } > + > + ReleaseCollectionResource (Private); > + > + if (Private->FeatureProtocol !=3D NULL) { > + Private->FeatureProtocol->Unregister ( > + Private->FeatureProtocol, > + REDFISH_MANAGED_URI, > + NULL > + ); > + } > + > + return EFI_SUCCESS; > +} > + > +/** > + Callback function when gEfiRestJsonStructureProtocolGuid is installed. > + > + @param[in] Event Event whose notification function is being invoked= . > + @param[in] Context Pointer to the notification function's context. > +**/ > +VOID > +EFIAPI > +EfiRestJasonStructureProtocolIsReady ( > + IN EFI_EVENT Event, > + IN VOID *Context > + ) > +{ > + EFI_STATUS Status; > + > + if (mRedfishCollectionPrivate =3D=3D NULL) { > + return; > + } > + > + if (mRedfishCollectionPrivate->JsonStructProtocol !=3D NULL) { > + return; > + } > + > + Status =3D gBS->LocateProtocol ( > + &gEfiRestJsonStructureProtocolGuid, > + NULL, > + (VOID **)&mRedfishCollectionPrivate->JsonStructProtoco= l > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to locate > gEfiRestJsonStructureProtocolGuid: %r\n", __FUNCTION__, Status)); > + } > + > + gBS->CloseEvent (Event); > +} > + > +/** > + Callback function when gEdkIIRedfishFeatureProtocolGuid is installed. > + > + @param[in] Event Event whose notification function is being invoked= . > + @param[in] Context Pointer to the notification function's context. > +**/ > +VOID > +EFIAPI > +EdkIIRedfishFeatureProtocolIsReady ( > + IN EFI_EVENT Event, > + IN VOID *Context > + ) > +{ > + EFI_STATUS Status; > + EDKII_REDFISH_FEATURE_PROTOCOL *FeatureProtocol; > + > + if (mRedfishCollectionPrivate =3D=3D NULL) { > + return; > + } > + > + if (mRedfishCollectionPrivate->FeatureProtocol !=3D NULL) { > + return; > + } > + > + Status =3D gBS->LocateProtocol ( > + &gEdkIIRedfishFeatureProtocolGuid, > + NULL, > + (VOID **)&FeatureProtocol > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to locate > gEdkIIRedfishFeatureProtocolGuid: %r\n", __FUNCTION__, Status)); > + gBS->CloseEvent (Event); > + return; > + } > + > + Status =3D FeatureProtocol->Register ( > + FeatureProtocol, > + REDFISH_MANAGED_URI, > + RedfishCollectionFeatureCallback, > + (VOID *)mRedfishCollectionPrivate > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to register %s: %r\n", > __FUNCTION__, REDFISH_MANAGED_URI, Status)); > + } > + > + mRedfishCollectionPrivate->FeatureProtocol =3D FeatureProtocol; > + > + gBS->CloseEvent (Event); > +} > + > +/** > + Unloads an image. > + > + @param ImageHandle Handle that identifies the image to be > unloaded. > + > + @retval EFI_SUCCESS The image has been unloaded. > + @retval EFI_INVALID_PARAMETER ImageHandle is not a valid image > handle. > + > +**/ > +EFI_STATUS > +EFIAPI > +RedfishCollectionUnload ( > + IN EFI_HANDLE ImageHandle > + ) > +{ > + EFI_STATUS Status; > + EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL *ConfigHandler; > + > + if (mRedfishCollectionPrivate =3D=3D NULL) { > + return EFI_NOT_READY; > + } > + > + ConfigHandler =3D NULL; > + > + // > + // Firstly, find ConfigHandler Protocol interface in this ImageHandle. > + // > + Status =3D gBS->OpenProtocol ( > + ImageHandle, > + &gEdkIIRedfishConfigHandlerProtocolGuid, > + (VOID **)&ConfigHandler, > + NULL, > + NULL, > + EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL > + ); > + if (EFI_ERROR (Status) || (ConfigHandler =3D=3D NULL)) { > + return Status; > + } > + > + ConfigHandler->Stop (ConfigHandler); > + > + // > + // Last, uninstall ConfigHandler Protocol. > + // > + Status =3D gBS->UninstallMultipleProtocolInterfaces ( > + ImageHandle, > + &gEdkIIRedfishConfigHandlerProtocolGuid, > + ConfigHandler, > + NULL > + ); > + > + FreePool (mRedfishCollectionPrivate); > + mRedfishCollectionPrivate =3D NULL; > + > + return Status; > +} > + > +EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL mRedfishConfigHandler =3D { > + RedfishCollectionInit, > + RedfishCollectionStop > +}; > + > +/** > + This is the declaration of an EFI image entry point. This entry point = is > + the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers incl= uding > + both device drivers and bus drivers. It initialize the global variable= s and > + publish the driver binding protocol. > + > + @param[in] ImageHandle The firmware allocated handle for the UE= FI > image. > + @param[in] SystemTable A pointer to the EFI System Table. > + > + @retval EFI_SUCCESS The operation completed successfully. > + @retval EFI_ACCESS_DENIED EFI_ISCSI_INITIATOR_NAME_PROTOCOL > was installed unexpectedly. > + @retval Others Other errors as indicated. > +**/ > +EFI_STATUS > +EFIAPI > +RedfishCollectionEntryPoint ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + EFI_STATUS Status; > + VOID *Registration; > + > + if (mRedfishCollectionPrivate !=3D NULL) { > + return EFI_ALREADY_STARTED; > + } > + > + mRedfishCollectionPrivate =3D AllocateZeroPool (sizeof > (REDFISH_COLLECTION_PRIVATE)); > + CopyMem (&mRedfishCollectionPrivate->ConfigHandler, > &mRedfishConfigHandler, sizeof > (EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL)); > + > + Status =3D gBS->InstallProtocolInterface ( > + &ImageHandle, > + &gEdkIIRedfishConfigHandlerProtocolGuid, > + EFI_NATIVE_INTERFACE, > + &mRedfishCollectionPrivate->ConfigHandler > + ); > + > + EfiCreateProtocolNotifyEvent ( > + &gEfiRestJsonStructureProtocolGuid, > + TPL_CALLBACK, > + EfiRestJasonStructureProtocolIsReady, > + NULL, > + &Registration > + ); > + > + EfiCreateProtocolNotifyEvent ( > + &gEdkIIRedfishFeatureProtocolGuid, > + TPL_CALLBACK, > + EdkIIRedfishFeatureProtocolIsReady, > + NULL, > + &Registration > + ); > + > + return Status; > +} > diff --git a/RedfishClientPkg/RedfishClient.fdf.inc > b/RedfishClientPkg/RedfishClient.fdf.inc > index 5c4b9670..7d5de565 100644 > --- a/RedfishClientPkg/RedfishClient.fdf.inc > +++ b/RedfishClientPkg/RedfishClient.fdf.inc > @@ -16,6 +16,7 @@ > INF > RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.inf > INF RedfishClientPkg/Features/Memory/V1_7_1/Dxe/MemoryDxe.inf > INF > RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe.inf > + INF > RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste > mCollectionDxe.inf >=20 > !include RedfishClientPkg/RedfishJsonStructureDxe.fdf.inc > # > @@ -23,4 +24,5 @@ > # > INF > RedfishClientPkg/Converter/Memory/v1_7_1/RedfishMemory_V1_7_1_Dx > e.inf > INF > RedfishClientPkg/Converter/MemoryCollection/RedfishMemoryCollection_ > Dxe.inf > + INF > RedfishClientPkg/Converter/ComputerSystemCollection/RedfishComputerS > ystemCollection_Dxe.inf > !endif > -- > 2.17.1