From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (NAM02-BN1-obe.outbound.protection.outlook.com [40.107.212.52]) by mx.groups.io with SMTP id smtpd.web10.27146.1658968446370728820 for ; Wed, 27 Jul 2022 17:34:06 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=RJqjyBkY; 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.212.52, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H2E1MkCx3x7ubeo4pEJfCKtGqqQ+yr7Rcd+/lCMtPxRL79/hPBvfgIiNpRG3vIiq56IjULrKNFsNv/CCpyZECIKH/35L7bDZ+MElfC+WO+B+/OPdOAoHlvVXb0VPuurrijk/bGDsZRTTkbACmn8Lby5mRZ70rd0LYUoBRO8KqgCDz2pw+J5Ib7dc0cEUpRpufH2PLqnxpWoP0CQX6ju5RCt9fDiWthc4eLtwy1c3Blm/KpUDJ2nM2+sOWfJXIL2o129le7c8CUpDG3fzuSFNmQZZ4r/G2VorqYSOlfSJyaGrYOoEShAtuKQb+SzJ41QpuHxIeQKXNvd9ry+ZhRG/tg== 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=+o64T98DOLuakZV23xTLeHb1fvbA1A5ZbhREs/d/+nw=; b=K0IYVmToOkUkKGE8J+wr0KEG3PkcLT0JNfYbHMfF6eT5BCnIpJAb28oF6dHvjXa4zAA9/cQrleacDubs+t7arY3z2bniqV2k5IUncngWpeUvmls9CbFfQRwDMICCe6tgNPQ411KwsDrHqSuU60sDEsQMGTuOUIdy2mmgaWAZUBJKfsDAQoVygRAgigk8IDB+jG5GOr1YU7FXfTJPu7sbkb/zh+qAWbrLKTay+yuI3SftP2GB8CNzCehdve6uEBUIjiJ4hbegsJKfP/ziPfL+9yUNnHHzcFP8EWbIXgVz/1VwxSYjCoGNjxGqWPv3DyT9xL1xXW4ygkiH5XBfWbjJ4Q== 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=+o64T98DOLuakZV23xTLeHb1fvbA1A5ZbhREs/d/+nw=; b=RJqjyBkYJxxgldnKtn02kmbXGJEqvWJsjhBAwcm+X9BF2hatfXteHT7SonEJHeODlqXteOc0/+UCWTJ/3PekmOtrm4Fkb5GOsBlUC9nyyM0NqpIqd33BvfBbv2/qj2a6Prl5SAtjI1bri71w9jpa3RkjJjasPFhSJdmk1kRmIGc= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by BN6PR12MB1300.namprd12.prod.outlook.com (2603:10b6:404:1a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.6; Thu, 28 Jul 2022 00:34:01 +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.025; Thu, 28 Jul 2022 00:34:01 +0000 From: "Chang, Abner" To: Nickle Wang , "devel@edk2.groups.io" CC: "Yang, Atom" , Nick Ramirez Subject: Re: [edk2-staging][PATCH v3 04/15] edk2-staging/RedfishClientPkg: Introduce Redfish resource config library Thread-Topic: [edk2-staging][PATCH v3 04/15] edk2-staging/RedfishClientPkg: Introduce Redfish resource config library Thread-Index: AQHYoVmKrY6kwKqQBk6tBrOjWP2In62S8FVA Date: Thu, 28 Jul 2022 00:34:00 +0000 Message-ID: References: <20220727013802.247-1-nickle.wang@hpe.com> <20220727013802.247-5-nickle.wang@hpe.com> In-Reply-To: <20220727013802.247-5-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-28T00:33:56Z; 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=b9efe084-ffdc-43dc-9084-9ca7c1cc639f; 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: 6dfe19c7-ae99-40ce-9c47-08da7030dded x-ms-traffictypediagnostic: BN6PR12MB1300:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PIJJE6oifOmnwHm4/qQvn6C0dM+RQOtRDPDvmqXdQCR8mMeqeOsGcYxeVUHZBepnE2KOpXYFJNk6aukiWkrJ7zO6obXCRSM07KJto4Ynr6s37EXi55uyZYJwSVxKg9YfhccsslWMEZJWOAt0u24k93SYcRoaROZ0axN/8PQlbYygSI+sGXFtGdDsDLYxBxubDafKurZ9WEkaFTA/PmZHFb3g6VxfaUxLnquVlG4BQtjSfjTpBgOz1eRqKtA+L/LQ6yX1mB8nU6wTjJGSzTI81NW6bnSVDdnMcROqsG0nYLjWsVPOnsmYK1aAc0xRJo9uoQW6nF2/uM1j+kw6QfE/TbBGfUaUnyCvcsI5H0lbqUy67Sc3P/BcMrXwfs9Erx7AnwMHHa+Z/5UIfZGNUURgSJy0WZQdjAFesxPDbp0cQ39/vurDtSlfei6cgc96xWknTTiuEJKb1ppASRY36g/3OkxiyyU/Rh5BD3GJ+vjdUfGjrYppA35Q3X7aHqQQGuH0Z+Txw6wriwBIaSDIX8plOTM4uAyJ4FL0/OhyEC0V2nyZRSy/nDbNZPep+YpmxKFX5n1YusgtZ6DOF6I0GY0pI3/G876csZ2eGpKO12RKkK+87TG86Tfru645EXCwDjhJDx2H+O0sVP3Xp80Si4H2e3WDaHZqMGXimEcKnCkN+iHrn69wyCpFbnELQKTZFIS9cZvVXA/Yc9fL2J+oVS5EbL4k+LNzGqEYlCF2PgW/rx1BAND7QJXrBkV8nht0sf0BwrLst1j6HjGupSUVkb+RBWQ/JxlmBq5jlZym4CaCTl0kDq5+Ez3gRy86/ITkmc/s 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)(366004)(376002)(346002)(136003)(39860400002)(396003)(2906002)(55016003)(52536014)(8936002)(33656002)(8676002)(64756008)(66446008)(30864003)(4326008)(5660300002)(110136005)(54906003)(86362001)(66946007)(38070700005)(76116006)(66556008)(66476007)(316002)(296002)(6506007)(7696005)(53546011)(26005)(71200400001)(186003)(478600001)(41300700001)(9686003)(83380400001)(122000001)(38100700002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?US9SWc31yyh3EUZiOj8ZzgjlJzzEpnnfjy1LSAONsucN0FV8tiydBBmVhK7Y?= =?us-ascii?Q?0znTa9drSsIwgpkQRy9GnEozq6Rpx4q3pMedIEy4xzp8kQnuluodgh6jv9Ee?= =?us-ascii?Q?nVihgDXFwGliVkhu2+Mi7xoK9j30M0koHi3G0eV9gXuis7AQlXjBYNcmOZEw?= =?us-ascii?Q?L+ua59CeGpAbGiLJuRhjPsa/TKmHak4svoWQOFK5a9FzowvL8j3L2RhLL1df?= =?us-ascii?Q?K97vdx7QDIIRR26WpNGVOlCoQwR9D1ccvxXx8FGoOFpu48+C+hi5EwPIvGeP?= =?us-ascii?Q?+EOc6tRuPLc/mx1MJ0yxEn/oKW5cIpD5ejyaJA3IF8xdEL90SC2yYJiDci1e?= =?us-ascii?Q?EYAfereEdUItQUKb/lQOu8MoNSiU5cAi7H52ishqlNzvKSrgIN1w+gR4fXgg?= =?us-ascii?Q?Rc7TKcZsjYwLV2PgS070wre4eofpYV1S2HlyFz/OwNzfHtoGMszgiB1gtmjN?= =?us-ascii?Q?c9B5LIQycc2N1N5n2OmYzPZdIv8Zo4i+64YuQjclodHgea3f3PhyA+udIoM3?= =?us-ascii?Q?v42Ko+PgmQee8wquiCu+FNiGanzov2AXnx3iOK/mBFKEIlBWYGTYOsC9TLMm?= =?us-ascii?Q?x/ekKnmJjw6Z2cZr6fgr3qDf5w6wXVZSXWJfJp0nexn+J8aMTOVLzsZU+hs3?= =?us-ascii?Q?HoPHD3N1kDDaFW7tbuw3sRJStoyQBbZkcsGmO/sRsTo9fqSqNlD3gya/XjNu?= =?us-ascii?Q?EYiRisVLa6Qc/d9uOC3ZNeU2wp3gvncmrBkoOu+EEIW772Eo+m/lmA8BfU1p?= =?us-ascii?Q?QC7dw1Jfg2Xk7Sfw5WWJXy1PnOqfV8/A6fYpfbmNWuC+gnkO9ooM2hYOZvVo?= =?us-ascii?Q?ix0TXgwXQ0ADxZMoBKFEULkoQcOni3o2b3sQLtRpt3xxzwzgA5W8pezG4g90?= =?us-ascii?Q?R1Mz4fO9MYjqypquFCbdoPXwRtqh9sa/H7ClqzMxDQXttZMCBpu+uHsXkUdA?= =?us-ascii?Q?oT+oj6y+dlZq238h7faBRmmh67dgP0kuEyPnLNG3HEznCpNzAIWF97I923qZ?= =?us-ascii?Q?RhROQkbk8AlTOpz39/3ChA779LhsdcTIDH/awfz8+zHrwYNQrv6+TsBnL3/k?= =?us-ascii?Q?hx19SUsfibTgMFMrPnrPFAMhPMikSc7sYgJn9zb+sWlrZm8q9YN5t/O/8jhJ?= =?us-ascii?Q?0NQVpxSwlYntzYxKW3eKWrSVwNhM8+yANvaOGrRT/SPXek7QKSU5HcPMDPi7?= =?us-ascii?Q?7HmZKd8wYUeQ5GczIpQqDBOcHzFVihkFbbhInblGoBHuND4ufLqDi9jBi0zw?= =?us-ascii?Q?VrhIMrDEPxE4M3hXvpYoCiLHBYmTU4bZxdSg99eUYChIN8w/FtqiEar5ue9y?= =?us-ascii?Q?gOtozr3w2y7W6kyM5SCIS9c1tD6oipp0d+7CZ1ar0U9u1sjW6C85GufZXs9L?= =?us-ascii?Q?KRwSJ8o9hu5kvIDO5pZvLjTocnAc8GlBh2tgezCtErPG6pgAxp7ulJrZTxg/?= =?us-ascii?Q?2GtHjynXphoVb5nu4DhI7mWjoWeD+me0PWWibw6XaPB+S2zvIBDAzJ1wkTtb?= =?us-ascii?Q?GxQa5R+aFhrmLpr8KZ2HlhFHbh/5zVFoGzNS/t5jvWR/TUkTG4C9R2KR+7q2?= =?us-ascii?Q?ICd8B/RexJSzEm3CRx8=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: 6dfe19c7-ae99-40ce-9c47-08da7030dded X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jul 2022 00:34:00.9799 (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: pOO7j/LEyiUMOCmNPvt60EsVq3il3Iw0dkUmaRgzszbSQi54lPS+2kX4OkGTBUyn442QJJS1ZitMWW9OEJdXzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1300 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only - General] There is another SCHEMA_NAME_PREFIX_OFFSET in EdkIIRedfishResourceConfig.c. Please also address that when you push the code, no need V4 for this. Thanks Reviewed-by: Abner Chang > -----Original Message----- > From: Nickle Wang > Sent: Wednesday, July 27, 2022 9:38 AM > To: devel@edk2.groups.io > Cc: Chang, Abner ; Yang, Atom > ; Nick Ramirez > Subject: [edk2-staging][PATCH v3 04/15] edk2-staging/RedfishClientPkg: > Introduce Redfish resource config library >=20 > [CAUTION: External Email] >=20 > Add EdkIIRedfishResourceConfigLib in order to work with Redfish Config > Protocol and do the communication between each feature drivers. Also > introduce Redfish interchange data protocol to exchange data efficiently. >=20 > Signed-off-by: Nickle Wang > Cc: Abner Chang > Cc: Yang Atom > Cc: Nick Ramirez > --- > .../Library/EdkIIRedfishResourceConfigLib.h | 163 +++++ > .../Protocol/EdkIIRedfishInterchangeData.h | 52 ++ > .../EdkIIRedfishResourceConfigLib.c | 593 ++++++++++++++++++ > .../EdkIIRedfishResourceConfigLib.inf | 49 ++ > .../RedfishFeatureUtilityInternal.h | 3 +- > RedfishClientPkg/RedfishClientLibs.dsc.inc | 1 + > RedfishClientPkg/RedfishClientPkg.dec | 5 +- > 7 files changed, 864 insertions(+), 2 deletions(-) create mode 100644 > RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h > create mode 100644 > RedfishClientPkg/Include/Protocol/EdkIIRedfishInterchangeData.h > create mode 100644 > RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishResour > ceConfigLib.c > create mode 100644 > RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishResour > ceConfigLib.inf >=20 > diff --git > a/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h > b/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h > new file mode 100644 > index 0000000000..1e843ec551 > --- /dev/null > +++ b/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h > @@ -0,0 +1,163 @@ > +/** @file > + This file defines the EDKII resource config Library interface. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef EDKII_REDFISH_RESOURCE_CONFIG_LIB_H_ > +#define EDKII_REDFISH_RESOURCE_CONFIG_LIB_H_ > + > +#include > +#include > +#include > +#include #include > + > +#include > +/** > + Provising redfish resource by given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri Target URI to create resource. > + @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, > + HTTP PUT method is used. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigProvisionging ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri, > + IN RESOURCE_INFORMATION_EXCHANGE *InformationExchange, > + IN BOOLEAN HttpPostMode > + ); > + > +/** > + Consume resource from given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri The target URI to consume. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigConsume ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri > + ); > + > + > +/** > + Update resource to given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri The target URI to consume. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigUpdate ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri > + ); > + > + > +/** > + Check resource on given URI. > + > + @param[in] Uri The target URI to consume. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigCheck ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri > + ); > + > +/** > + Identify resource on given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri The target URI to consume. > + @param[in] InformationExchange Pointer to > RESOURCE_INFORMATION_EXCHANGE. > + > + @retval EFI_SUCCESS This is target resource which we want= to > handle. > + @retval EFI_UNSUPPORTED This is not the target resource. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigIdentify ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri, > + IN RESOURCE_INFORMATION_EXCHANGE *InformationExchangeUri > + ); > + > +/** > + Set Configure language of this resource in the > + RESOURCE_INFORMATION_EXCHANGE structure. > + > + @param[in] ConfigLangList Pointer to > REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG_LIST. > + > + @retval EFI_SUCCESS Configure language is set. > + @retval EFI_UNSUPPORTED > EdkIIRedfishFeatureInterchangeDataProtocol is not found. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceSetConfigureLang ( > + REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG_LIST *ConfigLangList > + ); > + > +/** > + > + Get schema information by given protocol and service instance. > + > + @param[in] RedfishService Pointer to Redfish service instance. > + @param[in] JsonStructProtocol Json Structure protocol instance. > + @param[in] Uri Target URI. > + @param[out] SchemaInfo Returned schema information. > + > + @retval EFI_SUCCESS Schema information is returned success= fully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +GetRedfishSchemaInfo ( > + IN REDFISH_SERVICE *RedfishService, > + IN EFI_REST_JSON_STRUCTURE_PROTOCOL *JsonStructProtocol, > + IN EFI_STRING Uri, > + OUT REDFISH_SCHEMA_INFO *SchemaInfo > + ); > + > +/** > + > + Get supported schema list by given specify schema name. > + > + @param[in] Schema Schema type name. > + @param[out] SchemaInfo Returned schema information. > + > + @retval EFI_SUCCESS Schema information is returned success= fully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +GetSupportedSchemaVersion ( > + IN CHAR8 *Schema, > + OUT REDFISH_SCHEMA_INFO *SchemaInfo > + ); > + > +#endif > diff --git > a/RedfishClientPkg/Include/Protocol/EdkIIRedfishInterchangeData.h > b/RedfishClientPkg/Include/Protocol/EdkIIRedfishInterchangeData.h > new file mode 100644 > index 0000000000..e8d0462fb7 > --- /dev/null > +++ b/RedfishClientPkg/Include/Protocol/EdkIIRedfishInterchangeData.h > @@ -0,0 +1,52 @@ > +/** @file > + This file defines the > EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL interface. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_H_ > +#define EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_H_ > + > +#include > + > +typedef struct > _EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL > +EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL; > + > +#define EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL_GUID > \ > + { \ > + 0x4B8FF71C, 0x4A7B, 0x9478, { 0xB7, 0x81, 0x35, 0x9B, 0x0A, 0xF2, = 0x00, > 0x91 } \ > + } > + > +typedef enum { > + InformationTypeNone =3D 0, ///< Invalid informat= ion. > + InformationTypeCollectionMemberUri, ///< URI to the new cre= ated > collection member. > + InformationTypeCollectionMemberConfigLanguage, ///< URI to the new > created collection member. > + InformationTypeMax > +} RESOURCE_INFORMATION_EXCHANGE_TYPE; > + > +typedef struct { > + RESOURCE_INFORMATION_EXCHANGE_TYPE Type; > + EFI_STRING ParentUri; ///< The parent URI (in configure l= anguage) > of the resource to process. > + EFI_STRING PropertyName; ///< The property name of the resou= rce > to process. > + EFI_STRING FullUri; ///< The full URI (in configure lan= guage) of the > resource to process. > +} RESOURCE_INFORMATION_SEND; > + > +typedef struct { > + RESOURCE_INFORMATION_EXCHANGE_TYPE Type; > + REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG_LIST > ConfigureLanguageList; } > +RESOURCE_INFORMATION_RETURNED; > + > +typedef struct { > + RESOURCE_INFORMATION_SEND SendInformation; > + RESOURCE_INFORMATION_RETURNED ReturnedInformation; > +} RESOURCE_INFORMATION_EXCHANGE; > + > +struct _EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL { > + RESOURCE_INFORMATION_EXCHANGE *ResourceInformationExchage; }; > + > +extern EFI_GUID gEdkIIRedfishFeatureInterchangeDataProtocolGuid; > + > +#endif > diff --git > a/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.c > b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishRes > ourceConfigLib.c > new file mode 100644 > index 0000000000..d09da6bd67 > --- /dev/null > +++ b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfis > +++ hResourceConfigLib.c > @@ -0,0 +1,593 @@ > +/** @file > + Redfish resource config library implementation > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > +#include > +#include > +#include > +#include > +#include #include > + > +#include > +#include > +#include > + > +EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL > *mRedfishResourceConfigProtocol =3D NULL; > +EFI_HANDLE medfishResourceConfigProtocolHand= le; > +EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL > mRedfishFeatureInterchangeData; > +REDFISH_SCHEMA_INFO mSchemaInfoCache; > + > +#define SCHEMA_NAME_PREFIX_OFFSET 15 // x-uefi-redfish- > + > +/** > + > + Get schema information by given protocol and service instance. > + > + @param[in] RedfishService Pointer to Redfish service instance. > + @param[in] JsonStructProtocol Json Structure protocol instance. > + @param[in] Uri Target URI. > + @param[out] SchemaInfo Returned schema information. > + > + @retval EFI_SUCCESS Schema information is returned success= fully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +GetRedfishSchemaInfo ( > + IN REDFISH_SERVICE *RedfishService, > + IN EFI_REST_JSON_STRUCTURE_PROTOCOL *JsonStructProtocol, > + IN EFI_STRING Uri, > + OUT REDFISH_SCHEMA_INFO *SchemaInfo > + ) > +{ > + EFI_STATUS Status; > + REDFISH_RESPONSE Response; > + REDFISH_PAYLOAD Payload; > + CHAR8 *JsonText; > + 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; > + } > + > + Status =3D GetResourceByUri (RedfishService, Uri, &Response); if > + (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to get resource from %s: %r", > __FUNCTION__, Uri, Status)); > + return Status; > + } > + > + Payload =3D Response.Payload; > + ASSERT (Payload !=3D NULL); > + > + JsonText =3D JsonDumpString (RedfishJsonInPayload (Payload), > + EDKII_JSON_COMPACT); ASSERT (JsonText !=3D NULL); > + > + // > + // Convert JSON text to C structure. > + // > + Status =3D JsonStructProtocol->ToStructure ( > + JsonStructProtocol, > + NULL, > + JsonText, > + &Header > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, ToStructure() failed: %r\n", > __FUNCTION__, Status)); > + return Status; > + } > + > + AsciiStrCpyS (SchemaInfo->Schema, REDFISH_SCHEMA_STRING_SIZE, > + Header->JsonRsrcIdentifier.NameSpace.ResourceTypeName); > + AsciiStrCpyS (SchemaInfo->Major, REDFISH_SCHEMA_VERSION_SIZE, > + Header->JsonRsrcIdentifier.NameSpace.MajorVersion); > + AsciiStrCpyS (SchemaInfo->Minor, REDFISH_SCHEMA_VERSION_SIZE, > + Header->JsonRsrcIdentifier.NameSpace.MinorVersion); > + AsciiStrCpyS (SchemaInfo->Errata, REDFISH_SCHEMA_VERSION_SIZE, > + Header->JsonRsrcIdentifier.NameSpace.ErrataVersion); > + > + // > + // Release resource. > + // > + JsonStructProtocol->DestoryStructure (JsonStructProtocol, Header); > + FreePool (JsonText); RedfishFreeResponse (Response.StatusCode, > + Response.HeaderCount, Response.Headers, Response.Payload); > + > + return EFI_SUCCESS; > +} > + > +/** > + > + Get supported schema list by given specify schema name. > + > + @param[in] Schema Schema type name. > + @param[out] SchemaInfo Returned schema information. > + > + @retval EFI_SUCCESS Schema information is returned success= fully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +GetSupportedSchemaVersion ( > + IN CHAR8 *Schema, > + OUT REDFISH_SCHEMA_INFO *SchemaInfo > + ) > +{ > + EFI_STATUS Status; > + CHAR8 *SupportSchema; > + CHAR8 *SchemaName; > + UINTN Index; > + UINTN Index2; > + BOOLEAN Found; > + > + if (IS_EMPTY_STRING (Schema) || SchemaInfo =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + Status =3D RedfishPlatformConfigGetSupportedSchema (NULL, > + &SupportSchema); if (EFI_ERROR (Status)) { > + return Status; > + } > + > + DEBUG ((DEBUG_INFO, "Supported schema: %a\n", SupportSchema)); > + > + Index =3D 0; > + Found =3D FALSE; > + SchemaName =3D SupportSchema; > + while (TRUE) { > + > + if (SupportSchema[Index] =3D=3D ';' || SupportSchema[Index] =3D=3D '= \0') { > + if (AsciiStrnCmp (&SchemaName[SCHEMA_NAME_PREFIX_OFFSET], > Schema, AsciiStrLen (Schema)) =3D=3D 0) { > + Found =3D TRUE; > + SupportSchema[Index] =3D '\0'; > + break; > + } > + > + SchemaName =3D &SupportSchema[Index + 1]; > + } > + > + if (SupportSchema[Index] =3D=3D '\0') { > + break; > + } > + > + ++Index; > + } > + > + if (Found) { > + > + AsciiStrCpyS (SchemaInfo->Schema, REDFISH_SCHEMA_STRING_SIZE, > + Schema); > + > + // > + // forward to '.' > + // > + Index =3D 0; > + while (SchemaName[Index] !=3D '\0' && SchemaName[Index] !=3D '.') { > + ++Index; > + } > + ASSERT (SchemaName[Index] !=3D '\0'); > + > + // > + // Skip '.' and 'v' > + // > + Index +=3D 2; > + > + // > + // forward to '_' > + // > + Index2 =3D Index; > + while (SchemaName[Index2] !=3D '\0' && SchemaName[Index2] !=3D '_')= { > + ++Index2; > + } > + ASSERT (SchemaName[Index2] !=3D '\0'); > + > + AsciiStrnCpyS (SchemaInfo->Major, REDFISH_SCHEMA_VERSION_SIZE, > &SchemaName[Index], (Index2 - Index)); > + Index =3D Index2; > + > + // > + // Skip '_' > + // > + ++Index; > + > + // > + // forward to '_' > + // > + Index2 =3D Index; > + while (SchemaName[Index2] !=3D '\0' && SchemaName[Index2] !=3D '_')= { > + ++Index2; > + } > + ASSERT (SchemaName[Index2] !=3D '\0'); > + > + AsciiStrnCpyS (SchemaInfo->Minor, REDFISH_SCHEMA_VERSION_SIZE, > &SchemaName[Index], (Index2 - Index)); > + Index =3D Index2; > + > + // > + // Skip '_' > + // > + ++Index; > + > + AsciiStrCpyS (SchemaInfo->Errata, REDFISH_SCHEMA_VERSION_SIZE, > + &SchemaName[Index]); } > + > + FreePool (SupportSchema); > + > + return (Found ? EFI_SUCCESS : EFI_NOT_FOUND); } > + > + > +/** > + > + Find Redfish Resource Config 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_CONFIG_PROTOCOL > + installed on it. > + > + @retval EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL * Pointer to > protocol > + @retval NULL No protocol fo= und. > + > +**/ > +EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL * > +GetRedfishResourceConfigProtocol ( > + IN REDFISH_SCHEMA_INFO *Schema, > + OUT EFI_HANDLE *Handle OPTIONAL > + ) > +{ > + EFI_STATUS Status; > + EFI_HANDLE *HandleBuffer; > + UINTN NumberOfHandles; > + UINTN Index; > + EDKII_REDFISH_RESOURCE_CONFIG_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 (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 (Handle !=3D NULL) { > + *Handle =3D medfishResourceConfigProtocolHandle; > + } > + return mRedfishResourceConfigProtocol; > + } > + } > + > + Status =3D gBS->LocateHandleBuffer ( > + ByProtocol, > + &gEdkIIRedfishResourceConfigProtocolGuid, > + 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], > + &gEdkIIRedfishResourceConfigProtocolGuid, > + (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) { > + medfishResourceConfigProtocolHandle =3D HandleBuffer[Index]; > + mRedfishResourceConfigProtocol =3D Protocol; > + CopyMem (&mSchemaInfoCache, Schema, sizeof > (REDFISH_SCHEMA_INFO)); > + if (Handle !=3D NULL) { > + *Handle =3D HandleBuffer[Index]; > + } > + } > + FreePool(HandleBuffer); > + > + return (Found ? Protocol : NULL); > +} > + > +/** > + Install EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL > + on child feature driver handle. > + > + @param[in] Handle Handle to install > EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL. > + @param[in] InformationExchange Pointer to > RESOURCE_INFORMATION_EXCHANGE. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +InstallInterchangeDataProtocol ( > + IN EFI_HANDLE Handle, > + IN RESOURCE_INFORMATION_EXCHANGE *InformationExchange > + ) > +{ > + EFI_STATUS Status; > + EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL *Interface; > + > + Status =3D gBS->HandleProtocol ( > + Handle, > + &gEdkIIRedfishFeatureInterchangeDataProtocolGuid, > + (VOID **)&Interface > + ); > + if (!EFI_ERROR (Status)) { > + Interface->ResourceInformationExchage =3D InformationExchange; > + return EFI_SUCCESS; > + } > + if (Status =3D=3D EFI_UNSUPPORTED) { > + mRedfishFeatureInterchangeData.ResourceInformationExchage =3D > InformationExchange; > + Status =3D gBS->InstallProtocolInterface ( > + &Handle, > + &gEdkIIRedfishFeatureInterchangeDataProtocolGuid, > + EFI_NATIVE_INTERFACE, > + (VOID *)&mRedfishFeatureInterchangeData > + ); > + } > + return Status; > +} > + > +/** > + Set Configure language of this resource in the > + RESOURCE_INFORMATION_EXCHANGE structure. > + > + @param[in] ConfigLangList Pointer to > REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG_LIST. > + > + @retval EFI_SUCCESS Configure language is set. > + @retval EFI_UNSUPPORTED > EdkIIRedfishFeatureInterchangeDataProtocol is not found. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceSetConfigureLang ( > + REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG_LIST *ConfigLangList > + ) > +{ > + EFI_STATUS Status; > + UINTN Index; > + EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL *Interface; > + > + Status =3D gBS->HandleProtocol ( > + medfishResourceConfigProtocolHandle, > + &gEdkIIRedfishFeatureInterchangeDataProtocolGuid, > + (VOID **)&Interface > + ); > + if (EFI_ERROR (Status)){ > + DEBUG ((DEBUG_ERROR, "%a, > EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL is not installed > %r", __FUNCTION__, Status)); > + return Status; > + } > + Interface->ResourceInformationExchage->ReturnedInformation.Type =3D > +InformationTypeCollectionMemberConfigLanguage; > + > +Interface->ResourceInformationExchage- > >ReturnedInformation.ConfigureLan > +guageList.Count =3D ConfigLangList->Count; > + 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", __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES; > + } > + for (Index =3D 0; Index < ConfigLangList->Count; Index++) { > + Interface->ResourceInformationExchage- > >ReturnedInformation.ConfigureLanguageList.List [Index].Index =3D > ConfigLangList->List[Index].Index; > + Interface->ResourceInformationExchage- > >ReturnedInformation.ConfigureLanguageList.List [Index].ConfigureLang =3D > + > +(EFI_STRING)AllocateCopyPool(StrSize(ConfigLangList->List[Index].Config > +ureLang), (VOID *)ConfigLangList->List[Index].ConfigureLang); > + } > + return EFI_SUCCESS; > +} > + > +/** > + Provising redfish resource by given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri Target URI to create resource. > + @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, > + HTTP PUT method is used. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigProvisionging ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri, > + IN RESOURCE_INFORMATION_EXCHANGE *InformationExchange, > + IN BOOLEAN HttpPostMode > + ) > +{ > + EFI_HANDLE Handle; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + > + protocol =3D GetRedfishResourceConfigProtocol (Schema, &Handle); if > + (protocol =3D=3D NULL || Handle =3D=3D NULL) { > + return EFI_DEVICE_ERROR; > + } > + > + // > + // Install EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL on > the > +child > + // feature driver handle. > + // > + InstallInterchangeDataProtocol (Handle, InformationExchange); > + return protocol->Provisioning(protocol, Uri, HttpPostMode); } > + > +/** > + Consume resource from given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri The target URI to consume. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigConsume ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri > + ) > +{ > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + > + protocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); if > + (protocol =3D=3D NULL) { > + return EFI_DEVICE_ERROR; > + } > + > + return protocol->Consume (protocol, Uri); } > + > + > +/** > + Update resource to given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri The target URI to consume. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigUpdate ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri > + ) > +{ > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + > + protocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); if > + (protocol =3D=3D NULL) { > + return EFI_DEVICE_ERROR; > + } > + > + return protocol->Update (protocol, Uri); } > + > +/** > + Check resource on given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri The target URI to consume. > + > + @retval EFI_SUCCESS Value is returned successfully. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigCheck ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri > + ) > +{ > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + > + protocol =3D GetRedfishResourceConfigProtocol (Schema, NULL); if > + (protocol =3D=3D NULL) { > + return EFI_DEVICE_ERROR; > + } > + > + return protocol->Check (protocol, Uri); } > + > +/** > + Identify resource on given URI. > + > + @param[in] Schema Redfish schema information. > + @param[in] Uri The target URI to consume. > + @param[in] InformationExchange Pointer to > RESOURCE_INFORMATION_EXCHANGE. > + > + @retval EFI_SUCCESS This is target resource which we want= to > handle. > + @retval EFI_UNSUPPORTED This is not the target resource. > + @retval Others Some error happened. > + > +**/ > +EFI_STATUS > +EdkIIRedfishResourceConfigIdentify ( > + IN REDFISH_SCHEMA_INFO *Schema, > + IN EFI_STRING Uri, > + IN RESOURCE_INFORMATION_EXCHANGE *InformationExchange > + ) > +{ > + EFI_HANDLE Handle; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *protocol; > + > + protocol =3D GetRedfishResourceConfigProtocol (Schema, &Handle); if > + (protocol =3D=3D NULL) { > + return EFI_DEVICE_ERROR; > + } > + > + // > + // Install EDKII_REDFISH_FEATURE_INTERCHANGE_DATA_PROTOCOL on > the > +child > + // feature driver handle. > + // > + InstallInterchangeDataProtocol (Handle, InformationExchange); > + return protocol->Identify (protocol, Uri); } > + > +/** > + > + Initial resource config library instace. > + > + @param[in] ImageHandle The image handle. > + @param[in] SystemTable The system table. > + > + @retval EFI_SUCEESS Install Boot manager menu success. > + @retval Other Return error status. > + > +**/ > +EFI_STATUS > +EFIAPI > +RedfishResourceConfigConstructor ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + mRedfishResourceConfigProtocol =3D NULL; > + ZeroMem (&mSchemaInfoCache, sizeof (REDFISH_SCHEMA_INFO)); > + > + return EFI_SUCCESS; > +} > + > +/** > + Release allocated resource. > + > + @param[in] ImageHandle Handle that identifies the image to be > unloaded. > + @param[in] SystemTable The system table. > + > + @retval EFI_SUCCESS The image has been unloaded. > + > +**/ > +EFI_STATUS > +EFIAPI > +RedfishResourceConfigDestructor ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + mRedfishResourceConfigProtocol =3D NULL; > + > + return EFI_SUCCESS; > +} > diff --git > a/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishReso > urceConfigLib.inf > b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfishRes > ourceConfigLib.inf > new file mode 100644 > index 0000000000..0da3423d26 > --- /dev/null > +++ b/RedfishClientPkg/Library/EdkIIRedfishResourceConfigLib/EdkIIRedfis > +++ hResourceConfigLib.inf > @@ -0,0 +1,49 @@ > +## @file > +# > +# (C) Copyright 2022 Hewlett Packard Enterprise Development LP
# # > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > + > +[Defines] > + INF_VERSION =3D 0x00010006 > + BASE_NAME =3D EdkIIRedfishResourceConfigLib > + FILE_GUID =3D B41884F6-693B-4ADE-9558-5C220A24A02= 5 > + MODULE_TYPE =3D DXE_DRIVER > + VERSION_STRING =3D 1.0 > + LIBRARY_CLASS =3D EdkIIRedfishResourceConfigLib| DXE_= DRIVER > + CONSTRUCTOR =3D RedfishResourceConfigConstructor > + DESTRUCTOR =3D RedfishResourceConfigDestructor > + > +# > +# VALID_ARCHITECTURES =3D IA32 X64 EBC > +# > + > +[Sources] > + EdkIIRedfishResourceConfigLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + RedfishPkg/RedfishPkg.dec > + RedfishClientPkg/RedfishClientPkg.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + UefiBootServicesTableLib > + BaseMemoryLib > + PcdLib > + MemoryAllocationLib > + RedfishFeatureUtilityLib > + RedfishPlatformConfigLib > + > +[Protocols] > + gEdkIIRedfishResourceConfigProtocolGuid ## CONSUMES ## > + gEdkIIRedfishFeatureInterchangeDataProtocolGuid ## CONSUMES ## > + > +[Pcd] > + gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaStringSize > + gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaVersionSize > + > diff --git > a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtility= Int > ernal.h > b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtility= Int > ernal.h > index b8f4df7bcd..7d38d327ef 100644 > --- > a/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtility= Int > ernal.h > +++ b/RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUt > +++ ilityInternal.h > @@ -34,7 +34,8 @@ > #define INDEX_STRING_SIZE 16 > #define IS_EMPTY_STRING(a) (a =3D=3D NULL || a[0] =3D=3D '\0') > #define INDEX_STRING L"{%d}" > -#define SCHEMA_NAME_PREFIX_OFFSET 15 // x-uefi-redfish- > +#define SCHEMA_NAME_PREFIX "x-uefi-redfish-" > +#define SCHEMA_NAME_PREFIX_OFFSET (AsciiStrLen > (SCHEMA_NAME_PREFIX)) > #define REDFISH_SYSTEM_ROOT_PATH "/v1/Systems[UUID~%g]" > #define MAX_CONF_LANG_LEN 128 >=20 > diff --git a/RedfishClientPkg/RedfishClientLibs.dsc.inc > b/RedfishClientPkg/RedfishClientLibs.dsc.inc > index 1cf0406912..8acb479170 100644 > --- a/RedfishClientPkg/RedfishClientLibs.dsc.inc > +++ b/RedfishClientPkg/RedfishClientLibs.dsc.inc > @@ -28,5 +28,6 @@ >=20 > RedfishContentCodingLib|RedfishPkg/Library/RedfishContentCodingLibNull/ > RedfishContentCodingLibNull.inf >=20 > ConverterCommonLib|RedfishClientPkg/ConverterLib/edk2library/Converte > rCommonLib/ConverterCommonLib.inf >=20 > + > + EdkIIRedfishResourceConfigLib|RedfishClientPkg/Library/EdkIIRedfishRes > + ourceConfigLib/EdkIIRedfishResourceConfigLib.inf >=20 > RedfishEventLib|RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib.= i > nf >=20 > RedfishVersionLib|RedfishClientPkg/Library/RedfishVersionLib/RedfishVersi > onLib.inf > diff --git a/RedfishClientPkg/RedfishClientPkg.dec > b/RedfishClientPkg/RedfishClientPkg.dec > index 2ce51d14af..9d18c42c24 100644 > --- a/RedfishClientPkg/RedfishClientPkg.dec > +++ b/RedfishClientPkg/RedfishClientPkg.dec > @@ -1,7 +1,7 @@ > ## @file > # Redfish Client Package > # > -# (C) Copyright 2021 Hewlett Packard Enterprise Development LP
> +# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
> # > # SPDX-License-Identifier: BSD-2-Clause-Patent ## @@ -21,6 +21,7 @@ >=20 > [LibraryClasses] > RedfishFeatureUtilityLib|Include/Library/RedfishFeatureUtilityLib.h > + > + EdkIIRedfishResourceConfigLib|Include/Library/EdkIIRedfishResourceConf > + igLib.h > RedfishEventLib|Include/Library/RedfishEventLib.h > RedfishVersionLib|Include/Library/RedfishVersionLib.h >=20 > @@ -36,6 +37,8 @@ > gEdkIIRedfishResourceConfigProtocolGuid =3D { 0x6f164c68, 0xfb09, 0x46= 46, > { 0xa8, 0xd3, 0x24, 0x11, 0x5d, 0xab, 0x3e, 0xe7 } } > ## Include/Protocol/EdkiiRedfishETagProtocol.h > gEdkIIRedfishETagProtocolGuid =3D { 0x5706d368, 0xaf66, 0x48= f5, { 0x89, > 0xfc, 0xa6, 0x61, 0xce, 0xb5, 0xa6, 0xa9 } } > + ## Include/Protocol/EdkIIRedfishInterchangeData.h > + gEdkIIRedfishFeatureInterchangeDataProtocolGuid =3D { 0x4B8FF71C, > + 0x4A7B, 0x9478, { 0xB7, 0x81, 0x35, 0x9B, 0x0A, 0xF2, 0x00, 0x91 } } >=20 > [Guids] > ## Include/Guid/RedfishClientPkgTokenSpace.h > -- > 2.32.0.windows.2