From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 6BB4574003C for ; Wed, 6 Mar 2024 06:12:34 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=raNHq+iLOJ9QI8M2OI0HRiMfeBgcexSogGi5GgEdEms=; c=relaxed/simple; d=groups.io; h=From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:msip_labels:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20240206; t=1709705552; v=1; b=rbWLjcTkupkpMvTBsM79iLpBAH1cFV0rPIWUGnU/2IlDlZsM0NOIx1VI280G4NAvRCdPeDow FqKvOagTxxDnHBIrt6aYUJBgUo9Jwm41PLIK9CRTTDP18fkZOSPwD7Xk6/brwQgir3sJajtQMgD V5LWcCoaHb6R80BONNQzo13pipWo5MOLfKxrDtWTRnqH1sFUMS2uS9ZDYClXAWAwvMze6W1wYd1 GpCxMpXpnzVT7TzLPD07okR0IxPJ4o0zKwigl5XE5cVk7pW4dkWdI5DtBPu00pfX4o0LeZP86mw 38KEVP0Y8mjUdr9bauHq+5AF4g2wBUEyikRks7Y1RIVJg== X-Received: by 127.0.0.2 with SMTP id J1j4YY7687511xAFTsAXoZZL; Tue, 05 Mar 2024 22:12:32 -0800 X-Received: from NAM10-MW2-obe.outbound.protection.outlook.com (NAM10-MW2-obe.outbound.protection.outlook.com [40.107.94.43]) by mx.groups.io with SMTP id smtpd.web11.6287.1709705551833478665 for ; Tue, 05 Mar 2024 22:12:32 -0800 X-Received: from LV8PR12MB9452.namprd12.prod.outlook.com (2603:10b6:408:200::8) by LV2PR12MB5848.namprd12.prod.outlook.com (2603:10b6:408:173::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.39; Wed, 6 Mar 2024 06:12:28 +0000 X-Received: from LV8PR12MB9452.namprd12.prod.outlook.com ([fe80::e006:4173:de2c:aca0]) by LV8PR12MB9452.namprd12.prod.outlook.com ([fe80::e006:4173:de2c:aca0%5]) with mapi id 15.20.7339.035; Wed, 6 Mar 2024 06:12:28 +0000 From: "Chang, Abner via groups.io" To: Nickle Wang , "devel@edk2.groups.io" CC: Igor Kulchytskyy , Nick Ramirez Subject: Re: [edk2-devel] [edk2-redfish-client][PATCH 2/3] RedfishClientPkg/Edk2RedfishResourceConfigLib: support config2 protocol Thread-Topic: [edk2-redfish-client][PATCH 2/3] RedfishClientPkg/Edk2RedfishResourceConfigLib: support config2 protocol Thread-Index: AQHabjerxhf3UQ/ZCUiS8yCWnBgF+bEqPNsw Date: Tue, 05 Mar 2024 22:12:32 -0800 Message-ID: References: <20240304132649.41171-1-nicklew@nvidia.com> In-Reply-To: <20240304132649.41171-1-nicklew@nvidia.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=136537ab-f6cf-4ede-b8e0-551b63361d83;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=0;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true;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_SetDate=2024-03-06T06:08:02Z;MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: LV8PR12MB9452:EE_|LV2PR12MB5848:EE_ x-ms-office365-filtering-correlation-id: b776d356-b878-4c0e-cc5d-08dc3da46676 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: KOW5t3bGMdZcMyqy7bsMhujRS+ocedsNF7VWnxIsQhsDo+9sUKdiWxjvIRBol3ndsy9jI839whsdxbC9ey4uJhJptkv2V7edWwaryhlTpKxl4Vd2HFRMClEzIC27lgeymXBuhrJxXlO+Wu+60aUiRoCKDz999PlLMYWHWCvm+F4sT0ZQeN/AZgDGO1lmARKVsH2/F5gPa5s2sG/MalFu6tlqaZEEASQxKE1OeFf8j9n38m+SFhy0E9KkzwqTi0Ms0mc23BHQxwesZ+d1O3nLyIlVjPrwKK0kshILubKD5YYZbbLAICTn2z0q8aqrBJIvfw89/fDqI2m0RvGvWsPc3FdE6yShT/g48RboP54tzy1BLB+WZsfGEUyWWlOiJm5oTBBQwu9dXHXAWQbSL5KW9VYh7YRTM3QybnUu1urjc5THcJ5o4tra4tk8DkWZpKcMvYFeq2Q2sgvtTVcugE2k8Cr7ozUHpB2xBUnyCnRjvvpoheOL1/plpi26GrnpRCq4qYFcuziSqRT96lNSYqs9F7WO/Qq4oSyxp+eC1eN7I7OxUYwCI1HMoptupUqmUo0qIjAHH8Kfhe+ReKbV1uS+cH8R2DFCPIxLTKwXWOTcZnvQ6RL8tNmi9P+Y/MPVTR81fVqdb6Ch2g1hLIXYG7swYzy4UWIyhuePVexmgMt49OP9pRXt0O1Bj3CD39JDiFm29qU9Y9AFLRV3GqGv8FJbFNrsuk6RHHi5POVh1pplF8M= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?kbcDKqwf7QHrn0kqd5BjrIGFgYaUsn+Klr87WBrj/fHRrt3H4Hb9AaYAKy2m?= =?us-ascii?Q?RcYlbZRGj+NCX6x8VLxM+bALVvtC/oT9j9QRH6NZVTBeHZcxdi94JO3nYzKN?= =?us-ascii?Q?A5utHHdZuvYsYkJDmAhkJ0ftLcGtfmZyoCo0hR98resCpbq80P4ytwt4lkVu?= =?us-ascii?Q?c70kT262WHH/GJ/+iTOW1f5X1vHG2d5EcK+YISfUfmnZDgbcLoDujyPcfW2M?= =?us-ascii?Q?2MKKNEXtUjbrLpIZAB+/w7tYN1dxDU4EcIH56wa2FicLDpeUscPklDqSxEIu?= =?us-ascii?Q?5suwwd9coM7IZi9njOO6i2oiVrHiQNZXY2qb+yIFFixwGS6Lo++o9OxAesas?= =?us-ascii?Q?6Ll14AcQgR/Z73pfhZZC2VzYV9MR0xJRTkcS+GgW12X8PzsKeEgtVXYxSxMz?= =?us-ascii?Q?08x8uuZgMbI/ZJOKtgnhGmo4Ig5Yhrm3WtVrutqoyXWApTvN+VdY/P8H8+A0?= =?us-ascii?Q?fHq1NVmKFSKPvURp/yb7akdTit/4M3Y9xM2Q6H9opbkkLQCPq0kQn8a2Gbaq?= =?us-ascii?Q?v8Bae2poKJ1zP6c3PVt780euUtxl7gAOpF8KLKourtHMnj4FngjFC2jAe3Ou?= =?us-ascii?Q?+UJEQ9T8BB8VWapwid5jmPRlCLGl9edllfO5F2JvMZUPYJQl4QhZlpx0pOcA?= =?us-ascii?Q?/6IonU5rYKEeGQVd0pWepct7NbzSRtZRebBxDcV1f+buA1tIiDHj9CGzm7Rq?= =?us-ascii?Q?Jaal/GS8uuSfdzrqu9i0OzAooGaPSVTeFE/rfhQGXFMlOHVWuKC2dFhm7nTx?= =?us-ascii?Q?zgWHghwNEBBpow8eN/KsjYlKvLUFheUPAEEcbhPrDRjhH6OY8a85mxgAb/Ud?= =?us-ascii?Q?cMYBO7rA6V3hIAqSXvau3omJr6OiAqAmC9Z/IO1JpP30FPrTXKFr3LdMH70A?= =?us-ascii?Q?v8nZwmBl2JqJ6oQfkCbp4j+c2J7BZIi29F8eKPRp4NV9ZLrJz4cCUSnrqcBt?= =?us-ascii?Q?9t64CWTujN2+orNzui/t9m5VfIl4SxpaAcliqf6GZ3/g0wxBmHwpe/RWw6Nf?= =?us-ascii?Q?DHTNik96bN2bTaVcDWX/5e7fN2OHIMZvfeonHTE2MC2PGVum5BfBidVAhBwG?= =?us-ascii?Q?IODRJAJy5O1sPrNF4B4BhnftDa1tDv/v23HE85RfGPteb5wm9okXRwvPEcj+?= =?us-ascii?Q?6ZE2KTEO7f/NYpx0bQaufOrRbJpbL/eGGFIlOVmR6HIEFLyOu2b4KyVl8rZK?= =?us-ascii?Q?+Q2C8OanG2LnVBobHh4cw+XXP/tIdH2//jrC+7KebZAf5/6CBiuL8bYhYZ7b?= =?us-ascii?Q?G6rixZ9/gtyIDH5xAYa9nocHCJUne+9PViXcaWp3J/xKsYnea3cuxyAlOqsL?= =?us-ascii?Q?HQ/LUnS/AFwkjBfQWnhCUsCJTfT6BnIcyQRWXP3lCVJguTOsdIE09j6Uf4X7?= =?us-ascii?Q?wVM2VAILXBnN15yaij++OQEjDzIcToXKgIMAvOAOHUKhtxOx9ARXVx/O1aL7?= =?us-ascii?Q?pi2Bpef4IUXti48UOJJqtCHPSRyvZvEg3HOYF3ltsTt5AkP7APloIX/iLI4h?= =?us-ascii?Q?No/V/Jp18xL85zMhUvpDvmv5oRmv+0qBPKoU8+CbtzaoiOt0P62hNbEIdNtk?= =?us-ascii?Q?2FNwhGnXHtPVhcuMF0JF4HuOOYEJCWCIiJHIszCa?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: LV8PR12MB9452.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b776d356-b878-4c0e-cc5d-08dc3da46676 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2024 06:12:28.2415 (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: pNcHAIxhDb8hpHq/RY6nXzcs7Gdf32hcDXrdYqN5Ai8ZXS6kcXClcOufNzzh3mxbciM96A06s9Jd9Wmxh67aBg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5848 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@amd.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 2w0W21M9DyIFKdODXplYczlsx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=rbWLjcTk; dmarc=pass (policy=none) header.from=groups.io; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io [AMD Official Use Only - General] Looks good to me. Reviewed-by: Abner Chang > -----Original Message----- > From: Nickle Wang > Sent: Monday, March 4, 2024 9:27 PM > To: devel@edk2.groups.io > Cc: Chang, Abner ; Igor Kulchytskyy > ; Nick Ramirez > Subject: [edk2-redfish-client][PATCH 2/3] > RedfishClientPkg/Edk2RedfishResourceConfigLib: support config2 protocol > > Caution: This message originated from an External Source. Use proper caut= ion > when opening attachments, clicking links, or responding. > > > Support Redfish resource config2 protocol in Edk2RedfishResourceConfigLib= . > This library will try Redfish resource config2 protocol first. And if > there is no matching protocol found, Redfish resource config protocol wil= l > be used. > > Signed-off-by: Nickle Wang > Cc: Abner Chang > Cc: Igor Kulchytskyy > Cc: Nick Ramirez > --- > .../EdkIIRedfishResourceConfigLib.inf | 4 +- > .../Library/EdkIIRedfishResourceConfigLib.h | 33 +- > .../EdkIIRedfishResourceConfigInternal.h | 44 ++ > .../EdkIIRedfishResourceConfigLib.c | 391 ++++++++++++++---- > 4 files changed, 385 insertions(+), 87 deletions(-) > create mode 100644 > RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishResour= c > eConfigInternal.h > > diff --git > a/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.inf > b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.inf > index 2d10445f0..998a05c80 100644 > --- > a/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.inf > +++ > b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.inf > @@ -22,6 +22,7 @@ > # > > [Sources] > + EdkIIRedfishResourceConfigInternal.h > EdkIIRedfishResourceConfigLib.c > > [Packages] > @@ -42,8 +43,9 @@ > RedfishHttpLib > > [Protocols] > - gEdkIIRedfishResourceConfigProtocolGuid ## CONSUMES ## > + gEdkIIRedfishResourceConfigProtocolGuid ## CONSUMES ## > gEdkIIRedfishFeatureInterchangeDataProtocolGuid ## CONSUMES ## > + gEdkIIRedfishResourceConfig2ProtocolGuid ## CONSUEMS ## > > [Pcd] > gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaStringSize > diff --git a/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigL= ib.h > b/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h > index 3aa953cec..57c7f2b80 100644 > --- a/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h > +++ b/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h > @@ -16,6 +16,7 @@ > #include > #include > #include > +#include > #include > > /** > @@ -23,6 +24,7 @@ > > @param[in] Schema Redfish schema information. > @param[in] Uri Target URI to create resource. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > @param[in] InformationExchange Pointer to > RESOURCE_INFORMATION_EXCHANGE. > @param[in] HttpPostMode TRUE if resource does not exist, HTTP= POST > method is used. > FALSE if the resource exist but some = of properties are > missing, > @@ -33,9 +35,11 @@ > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigProvisioning ( > IN REDFISH_SCHEMA_INFO *Schema, > IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL, > IN RESOURCE_INFORMATION_EXCHANGE *InformationExchange, > IN BOOLEAN HttpPostMode > ); > @@ -45,15 +49,18 @@ EdkIIRedfishResourceConfigProvisioning ( > > @param[in] Schema Redfish schema information. > @param[in] Uri The target URI to consume. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > > @retval EFI_SUCCESS Value is returned successfully. > @retval Others Some error happened. > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigConsume ( > IN REDFISH_SCHEMA_INFO *Schema, > - IN EFI_STRING Uri > + IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL > ); > > /** > @@ -61,21 +68,25 @@ EdkIIRedfishResourceConfigConsume ( > > @param[in] Schema Redfish schema information. > @param[in] Uri The target URI to consume. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > > @retval EFI_SUCCESS Value is returned successfully. > @retval Others Some error happened. > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigUpdate ( > IN REDFISH_SCHEMA_INFO *Schema, > - IN EFI_STRING Uri > + IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL > ); > > /** > Check resource on given URI. > > @param[in] Uri The target URI to consume. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > > @retval EFI_SUCCESS Value is returned successfully. > @retval EFI_UNSUPPORTED This resource is not owned by feature > driver. > @@ -84,9 +95,11 @@ EdkIIRedfishResourceConfigUpdate ( > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigCheck ( > IN REDFISH_SCHEMA_INFO *Schema, > - IN EFI_STRING Uri > + IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL > ); > > /** > @@ -94,6 +107,7 @@ EdkIIRedfishResourceConfigCheck ( > > @param[in] Schema Redfish schema information. > @param[in] Uri The target URI to consume. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > @param[in] InformationExchange Pointer to > RESOURCE_INFORMATION_EXCHANGE. > > @retval EFI_SUCCESS This is target resource which we want= to handle. > @@ -107,10 +121,12 @@ EdkIIRedfishResourceConfigCheck ( > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigIdentify ( > IN REDFISH_SCHEMA_INFO *Schema, > IN EFI_STRING Uri, > - IN RESOURCE_INFORMATION_EXCHANGE *InformationExchangeUri > + IN CHAR8 *JsonText OPTIONAL, > + IN RESOURCE_INFORMATION_EXCHANGE *InformationExchange > ); > > /** > @@ -126,6 +142,7 @@ EdkIIRedfishResourceConfigIdentify ( > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceSetConfigureLang ( > IN EFI_HANDLE ImageHandle, > IN REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG_LIST *ConfigLangList > @@ -133,11 +150,14 @@ EdkIIRedfishResourceSetConfigureLang ( > > /** > > - Get schema information by given protocol and service instance. > + Get schema information by given protocol and service instance if JsonT= ext > + is NULL or empty. When JsonText is provided by caller, this function r= ead > + schema information from JsonText. > > @param[in] RedfishService Pointer to Redfish service instance. > @param[in] JsonStructProtocol Json Structure protocol instance. > @param[in] Uri Target URI. > + @param[in] JsonText Redfish data in JSON format. This is o= ptional. > @param[out] SchemaInfo Returned schema information. > > @retval EFI_SUCCESS Schema information is returned success= fully. > @@ -145,10 +165,12 @@ EdkIIRedfishResourceSetConfigureLang ( > > **/ > EFI_STATUS > +EFIAPI > GetRedfishSchemaInfo ( > IN REDFISH_SERVICE *RedfishService, > IN EFI_REST_JSON_STRUCTURE_PROTOCOL *JsonStructProtocol, > IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL, > OUT REDFISH_SCHEMA_INFO *SchemaInfo > ); > > @@ -164,6 +186,7 @@ GetRedfishSchemaInfo ( > > **/ > EFI_STATUS > +EFIAPI > GetSupportedSchemaVersion ( > IN CHAR8 *Schema, > OUT REDFISH_SCHEMA_INFO *SchemaInfo > diff --git > a/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigInternal.h > b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigInternal.h > new file mode 100644 > index 000000000..51984738b > --- /dev/null > +++ > b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigInternal.h > @@ -0,0 +1,44 @@ > +/** @file > + Header file of EDKII Redfish Resource Config Library. > + > + Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights > reserved. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef REDFISH_RESOURCE_CONFIG_INTERNAL_H_ > +#define REDFISH_RESOURCE_CONFIG_INTERNAL_H_ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +/// > +/// Definition of EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOLS > +/// > +typedef union { > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *ConfigProtocol; > + EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL *Config2Protocol; > +} EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOLS; > + > +/// > +/// Definition of REDFISH_CONFIG_PROTOCOL_CACHE > +/// > +typedef struct { > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOLS RedfishResourceConfig; > + EFI_HANDLE CachedHandle; > + REDFISH_SCHEMA_INFO SchemaInfoCache; > +} REDFISH_CONFIG_PROTOCOL_CACHE; > + > +#define SCHEMA_NAME_PREFIX "x-uefi-redfish-" > +#define SCHEMA_NAME_PREFIX_OFFSET (AsciiStrLen > (SCHEMA_NAME_PREFIX)) > + > +#endif > diff --git > a/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.c > b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.c > index 5d0944f8c..4ba5c309d 100644 > --- > a/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.c > +++ > b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.c > @@ -7,32 +7,23 @@ > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#include > - > -EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL > *mRedfishResourceConfigProtocol =3D NULL; > -EFI_HANDLE mCachedHandle; > -EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL > mRedfishFeatureInterchangeData; > -REDFISH_SCHEMA_INFO mSchemaInfoCache; > > -#define SCHEMA_NAME_PREFIX "x-uefi-redfish-" > -#define SCHEMA_NAME_PREFIX_OFFSET (AsciiStrLen > (SCHEMA_NAME_PREFIX)) > +#include "EdkIIRedfishResourceConfigInternal.h" > + > +REDFISH_CONFIG_PROTOCOL_CACHE > *mRedfishResourceConfigCache =3D NULL; > +REDFISH_CONFIG_PROTOCOL_CACHE > *mRedfishResourceConfig2Cache =3D NULL; > +EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL > mRedfishFeatureInterchangeData; > > /** > > - Get schema information by given protocol and service instance. > + Get schema information by given protocol and service instance if JsonT= ext > + is NULL or empty. When JsonText is provided by caller, this function r= ead > + schema information from JsonText. > > @param[in] RedfishService Pointer to Redfish service instance. > @param[in] JsonStructProtocol Json Structure protocol instance. > @param[in] Uri Target URI. > + @param[in] JsonText Redfish data in JSON format. This is o= ptional. > @param[out] SchemaInfo Returned schema information. > > @retval EFI_SUCCESS Schema information is returned success= fully. > @@ -40,35 +31,45 @@ REDFISH_SCHEMA_INFO > mSchemaInfoCache; > > **/ > EFI_STATUS > +EFIAPI > GetRedfishSchemaInfo ( > IN REDFISH_SERVICE *RedfishService, > IN EFI_REST_JSON_STRUCTURE_PROTOCOL *JsonStructProtocol, > IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL, > OUT REDFISH_SCHEMA_INFO *SchemaInfo > ) > { > EFI_STATUS Status; > REDFISH_RESPONSE Response; > - REDFISH_PAYLOAD Payload; > - CHAR8 *JsonText; > + CHAR8 *JsonData; > EFI_REST_JSON_STRUCTURE_HEADER *Header; > > if ((RedfishService =3D=3D NULL) || (JsonStructProtocol =3D=3D NULL) |= | > IS_EMPTY_STRING (Uri) || (SchemaInfo =3D=3D NULL)) { > return EFI_INVALID_PARAMETER; > } > > + JsonData =3D NULL; > + Header =3D NULL; > ZeroMem (&Response, sizeof (Response)); > - Status =3D RedfishHttpGetResource (RedfishService, Uri, NULL, &Respons= e, > TRUE); > - if (EFI_ERROR (Status)) { > - DEBUG ((DEBUG_ERROR, "%a, failed to get resource from %s: %r", > __func__, Uri, Status)); > - return Status; > - } > + if (IS_EMPTY_STRING (JsonText)) { > + Status =3D RedfishHttpGetResource (RedfishService, Uri, NULL, &Respo= nse, > TRUE); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a: failed to get resource from %s: %r", > __func__, Uri, Status)); > + return Status; > + } > > - Payload =3D Response.Payload; > - ASSERT (Payload !=3D NULL); > + if (Response.Payload !=3D NULL) { > + JsonData =3D JsonDumpString (RedfishJsonInPayload (Response.Payloa= d), > EDKII_JSON_COMPACT); > + } > + } else { > + JsonData =3D AllocateCopyPool (AsciiStrSize (JsonText), JsonText); > + } > > - JsonText =3D JsonDumpString (RedfishJsonInPayload (Payload), > EDKII_JSON_COMPACT); > - ASSERT (JsonText !=3D NULL); > + if (IS_EMPTY_STRING (JsonData)) { > + Status =3D EFI_NOT_FOUND; > + goto ON_RELEASE; > + } > > // > // Convert JSON text to C structure. > @@ -76,17 +77,12 @@ GetRedfishSchemaInfo ( > Status =3D JsonStructProtocol->ToStructure ( > JsonStructProtocol, > NULL, > - JsonText, > + JsonData, > &Header > ); > if (EFI_ERROR (Status)) { > - if (Status =3D=3D EFI_UNSUPPORTED) { > - DEBUG ((DEBUG_ERROR, "%a, No proper JSON to C structure converter > for this Redfish resource.\n", __func__)); > - } else { > - DEBUG ((DEBUG_ERROR, "%a, ToStructure() failed: %r\n", __func__, > Status)); > - } > - > - return Status; > + DEBUG ((DEBUG_ERROR, "%a: ToStructure() failed: %r\n", __func__, > Status)); > + goto ON_RELEASE; > } > > AsciiStrCpyS (SchemaInfo->Schema, REDFISH_SCHEMA_STRING_SIZE, > Header->JsonRsrcIdentifier.NameSpace.ResourceTypeName); > @@ -94,14 +90,19 @@ GetRedfishSchemaInfo ( > AsciiStrCpyS (SchemaInfo->Minor, REDFISH_SCHEMA_VERSION_SIZE, > Header->JsonRsrcIdentifier.NameSpace.MinorVersion); > AsciiStrCpyS (SchemaInfo->Errata, REDFISH_SCHEMA_VERSION_SIZE, > Header->JsonRsrcIdentifier.NameSpace.ErrataVersion); > > +ON_RELEASE: > // > // Release resource. > // > JsonStructProtocol->DestoryStructure (JsonStructProtocol, Header); > - FreePool (JsonText); > + > + if (JsonData !=3D NULL) { > + FreePool (JsonData); > + } > + > RedfishHttpFreeResponse (&Response); > > - return EFI_SUCCESS; > + return Status; > } > > /** > @@ -116,6 +117,7 @@ GetRedfishSchemaInfo ( > > **/ > EFI_STATUS > +EFIAPI > GetSupportedSchemaVersion ( > IN CHAR8 *Schema, > OUT REDFISH_SCHEMA_INFO *SchemaInfo > @@ -257,17 +259,17 @@ GetRedfishResourceConfigProtocol ( > return NULL; > } > > - if (mRedfishResourceConfigProtocol !=3D NULL) { > - if ((AsciiStrCmp (Schema->Schema, mSchemaInfoCache.Schema) =3D=3D 0)= && > - (AsciiStrCmp (Schema->Major, mSchemaInfoCache.Major) =3D=3D 0) &= & > - (AsciiStrCmp (Schema->Minor, mSchemaInfoCache.Minor) =3D=3D 0) &= & > - (AsciiStrCmp (Schema->Errata, mSchemaInfoCache.Errata) =3D=3D 0)= ) > + if ((mRedfishResourceConfigCache !=3D NULL) && > (mRedfishResourceConfigCache->RedfishResourceConfig.ConfigProtocol !=3D > NULL)) { > + if ((AsciiStrCmp (Schema->Schema, mRedfishResourceConfigCache- > >SchemaInfoCache.Schema) =3D=3D 0) && > + (AsciiStrCmp (Schema->Major, mRedfishResourceConfigCache- > >SchemaInfoCache.Major) =3D=3D 0) && > + (AsciiStrCmp (Schema->Minor, mRedfishResourceConfigCache- > >SchemaInfoCache.Minor) =3D=3D 0) && > + (AsciiStrCmp (Schema->Errata, mRedfishResourceConfigCache- > >SchemaInfoCache.Errata) =3D=3D 0)) > { > if (Handle !=3D NULL) { > - *Handle =3D mCachedHandle; > + *Handle =3D mRedfishResourceConfigCache->CachedHandle; > } > > - return mRedfishResourceConfigProtocol; > + return mRedfishResourceConfigCache- > >RedfishResourceConfig.ConfigProtocol; > } > } > > @@ -310,9 +312,116 @@ GetRedfishResourceConfigProtocol ( > } > > if (Found) { > - mCachedHandle =3D HandleBuffer[Index]; > - mRedfishResourceConfigProtocol =3D Protocol; > - CopyMem (&mSchemaInfoCache, Schema, sizeof > (REDFISH_SCHEMA_INFO)); > + if (mRedfishResourceConfigCache !=3D NULL) { > + mRedfishResourceConfigCache->CachedHandle = =3D > HandleBuffer[Index]; > + mRedfishResourceConfigCache->RedfishResourceConfig.ConfigProtocol = =3D > Protocol; > + CopyMem (&mRedfishResourceConfigCache->SchemaInfoCache, Schema, > sizeof (REDFISH_SCHEMA_INFO)); > + } > + > + if (Handle !=3D NULL) { > + *Handle =3D HandleBuffer[Index]; > + } > + } > + > + FreePool (HandleBuffer); > + > + return (Found ? Protocol : NULL); > +} > + > +/** > + > + Find Redfish Resource Config2 Protocol that supports given schema and > version. > + > + @param[in] Schema Schema name. > + @param[out] Handle Pointer to receive the handle that has > EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL > + installed on it. > + > + @retval EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL * Pointer to > protocol > + @retval NULL No protocol f= ound. > + > +**/ > +EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL * > +GetRedfishResourceConfig2Protocol ( > + IN REDFISH_SCHEMA_INFO *Schema, > + OUT EFI_HANDLE *Handle OPTIONAL > + ) > +{ > + EFI_STATUS Status; > + EFI_HANDLE *HandleBuffer; > + UINTN NumberOfHandles; > + UINTN Index; > + EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL *Protocol; > + REDFISH_SCHEMA_INFO SchemaInfo; > + BOOLEAN Found; > + > + if (IS_EMPTY_STRING (Schema->Schema) || > + IS_EMPTY_STRING (Schema->Major) || > + IS_EMPTY_STRING (Schema->Minor) || > + IS_EMPTY_STRING (Schema->Errata) > + ) > + { > + return NULL; > + } > + > + if ((mRedfishResourceConfig2Cache !=3D NULL) && > (mRedfishResourceConfig2Cache->RedfishResourceConfig.Config2Protocol !=3D > NULL)) { > + if ((AsciiStrCmp (Schema->Schema, mRedfishResourceConfig2Cache- > >SchemaInfoCache.Schema) =3D=3D 0) && > + (AsciiStrCmp (Schema->Major, mRedfishResourceConfig2Cache- > >SchemaInfoCache.Major) =3D=3D 0) && > + (AsciiStrCmp (Schema->Minor, mRedfishResourceConfig2Cache- > >SchemaInfoCache.Minor) =3D=3D 0) && > + (AsciiStrCmp (Schema->Errata, mRedfishResourceConfig2Cache- > >SchemaInfoCache.Errata) =3D=3D 0)) > + { > + if (Handle !=3D NULL) { > + *Handle =3D mRedfishResourceConfig2Cache->CachedHandle; > + } > + > + return mRedfishResourceConfig2Cache- > >RedfishResourceConfig.Config2Protocol; > + } > + } > + > + Status =3D gBS->LocateHandleBuffer ( > + ByProtocol, > + &gEdkIIRedfishResourceConfig2ProtocolGuid, > + NULL, > + &NumberOfHandles, > + &HandleBuffer > + ); > + if (EFI_ERROR (Status)) { > + return NULL; > + } > + > + Found =3D FALSE; > + > + for (Index =3D 0; Index < NumberOfHandles; Index++) { > + Status =3D gBS->HandleProtocol ( > + HandleBuffer[Index], > + &gEdkIIRedfishResourceConfig2ProtocolGuid, > + (VOID **)&Protocol > + ); > + if (EFI_ERROR (Status)) { > + continue; > + } > + > + Status =3D Protocol->GetInfo (Protocol, &SchemaInfo); > + if (EFI_ERROR (Status)) { > + continue; > + } > + > + if ((AsciiStrCmp (Schema->Schema, SchemaInfo.Schema) =3D=3D 0) && > + (AsciiStrCmp (Schema->Major, SchemaInfo.Major) =3D=3D 0) && > + (AsciiStrCmp (Schema->Minor, SchemaInfo.Minor) =3D=3D 0) && > + (AsciiStrCmp (Schema->Errata, SchemaInfo.Errata) =3D=3D 0)) > + { > + Found =3D TRUE; > + break; > + } > + } > + > + if (Found) { > + if (mRedfishResourceConfig2Cache !=3D NULL) { > + mRedfishResourceConfig2Cache->CachedHandle = =3D > HandleBuffer[Index]; > + mRedfishResourceConfig2Cache- > >RedfishResourceConfig.Config2Protocol =3D Protocol; > + CopyMem (&mRedfishResourceConfig2Cache->SchemaInfoCache, > Schema, sizeof (REDFISH_SCHEMA_INFO)); > + } > + > if (Handle !=3D NULL) { > *Handle =3D HandleBuffer[Index]; > } > @@ -379,6 +488,7 @@ InstallInterchangeDataProtocol ( > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceSetConfigureLang ( > IN EFI_HANDLE ImageHandle, > IN REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG_LIST *ConfigLangList > @@ -411,7 +521,7 @@ EdkIIRedfishResourceSetConfigureLang ( > Interface->ResourceInformationExchage- > >ReturnedInformation.ConfigureLanguageList.List =3D > AllocateZeroPool (sizeof (REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG) > * ConfigLangList->Count); > if (Interface->ResourceInformationExchage- > >ReturnedInformation.ConfigureLanguageList.List =3D=3D NULL) { > - DEBUG ((DEBUG_ERROR, "%a, Fail to allocate memory for > REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG.\n", __func__)); > + DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for > REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG.\n", __func__)); > return EFI_OUT_OF_RESOURCES; > } > > @@ -425,10 +535,11 @@ EdkIIRedfishResourceSetConfigureLang ( > } > > /** > - Provising redfish resource by given URI. > + Provision redfish resource by given URI. > > @param[in] Schema Redfish schema information. > @param[in] Uri Target URI to create resource. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > @param[in] InformationExchange Pointer to > RESOURCE_INFORMATION_EXCHANGE. > @param[in] HttpPostMode TRUE if resource does not exist, HTTP= POST > method is used. > FALSE if the resource exist but some = of properties are > missing, > @@ -439,18 +550,41 @@ EdkIIRedfishResourceSetConfigureLang ( > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigProvisioning ( > IN REDFISH_SCHEMA_INFO *Schema, > IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL, > IN RESOURCE_INFORMATION_EXCHANGE *InformationExchange, > IN BOOLEAN HttpPostMode > ) > { > - EFI_HANDLE Handle; > - EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + EFI_HANDLE Handle; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *ConfigProtocol; > + EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL *Config2Protocol; > > - protocol =3D GetRedfishResourceConfigProtocol (Schema, &Handle); > - if ((protocol =3D=3D NULL) || (Handle =3D=3D NULL)) { > + // > + // Initialization. > + // > + Handle =3D NULL; > + ConfigProtocol =3D NULL; > + Config2Protocol =3D NULL; > + > + // > + // Try to use config2 protocol first. > + // > + Config2Protocol =3D GetRedfishResourceConfig2Protocol (Schema, &Handle= ); > + if ((Config2Protocol !=3D NULL) && (Handle !=3D NULL)) { > + // > + // Install EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL on > the child > + // feature driver handle. > + // > + InstallInterchangeDataProtocol (Handle, InformationExchange); > + return Config2Protocol->Provisioning (Config2Protocol, Uri, JsonText= , > HttpPostMode); > + } > + > + ConfigProtocol =3D GetRedfishResourceConfigProtocol (Schema, &Handle); > + if ((ConfigProtocol =3D=3D NULL) || (Handle =3D=3D NULL)) { > return EFI_DEVICE_ERROR; > } > > @@ -459,7 +593,7 @@ EdkIIRedfishResourceConfigProvisioning ( > // feature driver handle. > // > InstallInterchangeDataProtocol (Handle, InformationExchange); > - return protocol->Provisioning (protocol, Uri, HttpPostMode); > + return ConfigProtocol->Provisioning (ConfigProtocol, Uri, HttpPostMode= ); > } > > /** > @@ -467,25 +601,43 @@ EdkIIRedfishResourceConfigProvisioning ( > > @param[in] Schema Redfish schema information. > @param[in] Uri The target URI to consume. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > > @retval EFI_SUCCESS Value is returned successfully. > @retval Others Some error happened. > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigConsume ( > IN REDFISH_SCHEMA_INFO *Schema, > - IN EFI_STRING Uri > + IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL > ) > { > - EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *ConfigProtocol; > + EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL *Config2Protocol; > > - protocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); > - if (protocol =3D=3D NULL) { > + // > + // Initialization. > + // > + ConfigProtocol =3D NULL; > + Config2Protocol =3D NULL; > + > + // > + // Try to use config2 protocol first. > + // > + Config2Protocol =3D GetRedfishResourceConfig2Protocol (Schema, NULL); > + if (Config2Protocol !=3D NULL) { > + return Config2Protocol->Consume (Config2Protocol, Uri, JsonText); > + } > + > + ConfigProtocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); > + if (ConfigProtocol =3D=3D NULL) { > return EFI_DEVICE_ERROR; > } > > - return protocol->Consume (protocol, Uri); > + return ConfigProtocol->Consume (ConfigProtocol, Uri); > } > > /** > @@ -493,25 +645,43 @@ EdkIIRedfishResourceConfigConsume ( > > @param[in] Schema Redfish schema information. > @param[in] Uri The target URI to consume. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > > @retval EFI_SUCCESS Value is returned successfully. > @retval Others Some error happened. > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigUpdate ( > IN REDFISH_SCHEMA_INFO *Schema, > - IN EFI_STRING Uri > + IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL > ) > { > - EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *ConfigProtocol; > + EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL *Config2Protocol; > + > + // > + // Initialization. > + // > + ConfigProtocol =3D NULL; > + Config2Protocol =3D NULL; > > - protocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); > - if (protocol =3D=3D NULL) { > + // > + // Try to use config2 protocol first. > + // > + Config2Protocol =3D GetRedfishResourceConfig2Protocol (Schema, NULL); > + if (Config2Protocol !=3D NULL) { > + return Config2Protocol->Update (Config2Protocol, Uri, JsonText); > + } > + > + ConfigProtocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); > + if (ConfigProtocol =3D=3D NULL) { > return EFI_DEVICE_ERROR; > } > > - return protocol->Update (protocol, Uri); > + return ConfigProtocol->Update (ConfigProtocol, Uri); > } > > /** > @@ -519,25 +689,43 @@ EdkIIRedfishResourceConfigUpdate ( > > @param[in] Schema Redfish schema information. > @param[in] Uri The target URI to consume. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > > @retval EFI_SUCCESS Value is returned successfully. > @retval Others Some error happened. > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigCheck ( > IN REDFISH_SCHEMA_INFO *Schema, > - IN EFI_STRING Uri > + IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL > ) > { > - EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *ConfigProtocol; > + EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL *Config2Protocol; > + > + // > + // Initialization. > + // > + ConfigProtocol =3D NULL; > + Config2Protocol =3D NULL; > + > + // > + // Try to use config2 protocol first. > + // > + Config2Protocol =3D GetRedfishResourceConfig2Protocol (Schema, NULL); > + if (Config2Protocol !=3D NULL) { > + return Config2Protocol->Check (Config2Protocol, Uri, JsonText); > + } > > - protocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); > - if (protocol =3D=3D NULL) { > + ConfigProtocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); > + if (ConfigProtocol =3D=3D NULL) { > return EFI_DEVICE_ERROR; > } > > - return protocol->Check (protocol, Uri); > + return ConfigProtocol->Check (ConfigProtocol, Uri); > } > > /** > @@ -545,6 +733,7 @@ EdkIIRedfishResourceConfigCheck ( > > @param[in] Schema Redfish schema information. > @param[in] Uri The target URI to consume. > + @param[in] JsonText The JSON data in ASCII string format.= This is > optional. > @param[in] InformationExchange Pointer to > RESOURCE_INFORMATION_EXCHANGE. > > @retval EFI_SUCCESS This is target resource which we want= to handle. > @@ -553,17 +742,40 @@ EdkIIRedfishResourceConfigCheck ( > > **/ > EFI_STATUS > +EFIAPI > EdkIIRedfishResourceConfigIdentify ( > IN REDFISH_SCHEMA_INFO *Schema, > IN EFI_STRING Uri, > + IN CHAR8 *JsonText OPTIONAL, > IN RESOURCE_INFORMATION_EXCHANGE *InformationExchange > ) > { > - EFI_HANDLE Handle; > - EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + EFI_HANDLE Handle; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *ConfigProtocol; > + EDKII_REDFISH_RESOURCE_CONFIG2_PROTOCOL *Config2Protocol; > + > + // > + // Initialization. > + // > + Handle =3D NULL; > + ConfigProtocol =3D NULL; > + Config2Protocol =3D NULL; > + > + // > + // Try to use config2 protocol first. > + // > + Config2Protocol =3D GetRedfishResourceConfig2Protocol (Schema, &Handle= ); > + if ((Config2Protocol !=3D NULL) && (Handle !=3D NULL)) { > + // > + // Install EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL on > the child > + // feature driver handle. > + // > + InstallInterchangeDataProtocol (Handle, InformationExchange); > + return Config2Protocol->Identify (Config2Protocol, Uri, JsonText); > + } > > - protocol =3D GetRedfishResourceConfigProtocol (Schema, &Handle); > - if (protocol =3D=3D NULL) { > + ConfigProtocol =3D GetRedfishResourceConfigProtocol (Schema, &Handle); > + if (ConfigProtocol =3D=3D NULL) { > return EFI_DEVICE_ERROR; > } > > @@ -572,17 +784,17 @@ EdkIIRedfishResourceConfigIdentify ( > // feature driver handle. > // > InstallInterchangeDataProtocol (Handle, InformationExchange); > - return protocol->Identify (protocol, Uri); > + return ConfigProtocol->Identify (ConfigProtocol, Uri); > } > > /** > > - Initial resource config library instace. > + Initial resource config library instance. > > @param[in] ImageHandle The image handle. > @param[in] SystemTable The system table. > > - @retval EFI_SUCEESS Install Boot manager menu success. > + @retval EFI_SUCCESS Install Boot manager menu success. > @retval Other Return error status. > > **/ > @@ -593,8 +805,17 @@ RedfishResourceConfigConstructor ( > IN EFI_SYSTEM_TABLE *SystemTable > ) > { > - mRedfishResourceConfigProtocol =3D NULL; > - ZeroMem (&mSchemaInfoCache, sizeof (REDFISH_SCHEMA_INFO)); > + mRedfishResourceConfigCache =3D AllocateZeroPool (sizeof > (REDFISH_CONFIG_PROTOCOL_CACHE)); > + if (mRedfishResourceConfigCache =3D=3D NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + mRedfishResourceConfig2Cache =3D AllocateZeroPool (sizeof > (REDFISH_CONFIG_PROTOCOL_CACHE)); > + if (mRedfishResourceConfig2Cache =3D=3D NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + ZeroMem (&mRedfishFeatureInterchangeData, sizeof > (mRedfishFeatureInterchangeData)); > > return EFI_SUCCESS; > } > @@ -615,7 +836,15 @@ RedfishResourceConfigDestructor ( > IN EFI_SYSTEM_TABLE *SystemTable > ) > { > - mRedfishResourceConfigProtocol =3D NULL; > + if (mRedfishResourceConfigCache !=3D NULL) { > + FreePool (mRedfishResourceConfigCache); > + mRedfishResourceConfigCache =3D NULL; > + } > + > + if (mRedfishResourceConfig2Cache !=3D NULL) { > + FreePool (mRedfishResourceConfig2Cache); > + mRedfishResourceConfig2Cache =3D NULL; > + } > > return EFI_SUCCESS; > } > -- > 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116420): https://edk2.groups.io/g/devel/message/116420 Mute This Topic: https://groups.io/mt/104721512/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-