Thanks Abner! Review comments for 04/15 and 05/15 are addressed in version 3.
Nickle -----Original Message----- From: Chang, Abner <abner.ch...@amd.com> Sent: Tuesday, July 26, 2022 10:04 AM To: Wang, Nickle (Server BIOS) <nickle.w...@hpe.com>; devel@edk2.groups.io Cc: Yang, Atom <atom.y...@amd.com>; Nick Ramirez <nrami...@nvidia.com> Subject: RE: [edk2-staging][PATCH v2 05/15] edk2-staging/RedfishClientPkg: Introduce resource identify library [AMD Official Use Only - General] Comment in-line. You can search [Chang, Abner] for the comment. > -----Original Message----- > From: Nickle Wang <nickle.w...@hpe.com> > Sent: Monday, July 25, 2022 9:36 AM > To: devel@edk2.groups.io > Cc: Chang, Abner <abner.ch...@amd.com>; Yang, Atom > <atom.y...@amd.com>; Nick Ramirez <nrami...@nvidia.com> > Subject: [edk2-staging][PATCH v2 05/15] edk2-staging/RedfishClientPkg: > Introduce resource identify library > > [CAUTION: External Email] > > Introduce resource identify library which works with resource config > protocol to identify Redfish resource. This library provides the > flexibility for platform to implement its own policy and identify > resource. Two library implementation are provided as demonstration > code. NULL version of library accepts all Redfish resource and another > implementation to computer system resource uses UUID to identify Redfish > resource. > > Signed-off-by: Nickle Wang <nickle.w...@hpe.com> > Cc: Abner Chang <abner.ch...@amd.com> > Cc: Yang Atom <atom.y...@amd.com> > Cc: Nick Ramirez <nrami...@nvidia.com> > --- > .../Library/RedfishResourceIdentifyLib.h | 29 ++++ > .../RedfishResourceIdentifyLibComuterSystem.c | 164 > ++++++++++++++++++ ...edfishResourceIdentifyLibComuterSystem.inf | > ++++++++++++++++++ 42 > +++++ > .../RedfishResourceIdentifyLibNull.c | 37 ++++ > .../RedfishResourceIdentifyLibNull.inf | 37 ++++ > RedfishClientPkg/RedfishClientLibs.dsc.inc | 2 +- > RedfishClientPkg/RedfishClientPkg.dec | 1 + > 7 files changed, 311 insertions(+), 1 deletion(-) create mode 100644 > RedfishClientPkg/Include/Library/RedfishResourceIdentifyLib.h > create mode 100644 > RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_5_ > 0/Re dfishResourceIdentifyLibComuterSystem.c > create mode 100644 > RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_5_ > 0/Re dfishResourceIdentifyLibComuterSystem.inf > create mode 100644 > RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourc > eIdenti > fyLibNull.c > create mode 100644 > RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourc > eIdenti > fyLibNull.inf > > diff --git > a/RedfishClientPkg/Include/Library/RedfishResourceIdentifyLib.h > b/RedfishClientPkg/Include/Library/RedfishResourceIdentifyLib.h > new file mode 100644 > index 0000000000..91d01b7d68 > --- /dev/null > +++ b/RedfishClientPkg/Include/Library/RedfishResourceIdentifyLib.h > @@ -0,0 +1,29 @@ > +/** @file > + This file defines the Redfish resource identify Library interface. > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef REDFISH_RESOURCE_IDENTIFY_LIB_H_ #define > +REDFISH_RESOURCE_IDENTIFY_LIB_H_ > + > +/** > + Identify resource from given URI and context in JSON format > + > + @param[in] Uri URI of given Redfish resource > + @param[in] Json Context in JSON format of give Redfish resource > + > + @retval TRUE This is the Redfish resource that we have to handle. > + @retval FALSE We don't handle this Redfish resource. > + > +**/ > +BOOLEAN > +RedfishIdentifyResource ( > + IN EFI_STRING Uri, > + IN CHAR8 *Json > + ); > + > +#endif > diff --git > a/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_ > 5_0/ RedfishResourceIdentifyLibComuterSystem.c > b/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_ > 5_0/ RedfishResourceIdentifyLibComuterSystem.c > new file mode 100644 > index 0000000000..e5699f194c > --- /dev/null > +++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem > +++ /v 1_5_0/RedfishResourceIdentifyLibComuterSystem.c > @@ -0,0 +1,164 @@ > +/** @file > + Redfish resource identify library implementation for computer > +system version 1.5.0 > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include <Uefi.h> > +#include <RedfishBase.h> > + > +#include <Library/UefiLib.h> > +#include <Library/BaseLib.h> > +#include <Library/DebugLib.h> > +#include <Library/NetLib.h> > +#include <Library/UefiBootServicesTableLib.h> > +#include <Library/RedfishResourceIdentifyLib.h> > + > +#include <Protocol/RestJsonStructure.h> > + > +#include > +<RedfishJsonStructure/ComputerSystem/v1_5_0/EfiComputerSystemV1_5_0.h > > > + > +EFI_REST_JSON_STRUCTURE_PROTOCOL *mJsonStructProtocol = NULL; > + > +/** > + Identify resource from given URI and context in JSON format > + > + @param[in] Uri URI of given Redfish resource > + @param[in] Json Context in JSON format of give Redfish resource > + > + @retval TRUE This is the Redfish resource that we have to handle. > + @retval FALSE We don't handle this Redfish resource. > + > +**/ > +BOOLEAN > +RedfishIdentifyResource ( > + IN EFI_STRING Uri, > + IN CHAR8 *Json > + ) > +{ > + EFI_STATUS Status; > + EFI_REDFISH_COMPUTERSYSTEM_V1_5_0 *ComputerSystem; > + EFI_REDFISH_COMPUTERSYSTEM_V1_5_0_CS *ComputerSystemCs; > + EFI_GUID SystemUuid; > + EFI_GUID ResourceUuid; > + > + if (IS_EMPTY_STRING (Uri) || IS_EMPTY_STRING (Json)) { > + return FALSE; > + } > + > + if (mJsonStructProtocol == NULL) { > + return FALSE; > + } > + > + ComputerSystem = NULL; > + ComputerSystemCs = NULL; > + > + Status = mJsonStructProtocol->ToStructure ( > + mJsonStructProtocol, > + NULL, > + Json, > + (EFI_REST_JSON_STRUCTURE_HEADER > **)&ComputerSystem > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, ToStructure() failed: %r\n", > + __FUNCTION__, > Status)); > + return FALSE; > + } > + > + ComputerSystemCs = ComputerSystem->ComputerSystem; > + > + if (IS_EMPTY_STRING (ComputerSystemCs->UUID)) { > + return FALSE; > + } > + > + Status = AsciiStrToGuid (ComputerSystemCs->UUID, &ResourceUuid); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, fail to get resource UUID: %r\n", > __FUNCTION__, Status)); > + return FALSE; > + } > + > + Status = NetLibGetSystemGuid (&SystemUuid); if (EFI_ERROR > + (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, fail to get system UUID from SMBIOS: > + %r\n", > __FUNCTION__, Status)); > + return FALSE; > + } > + > + DEBUG ((REDFISH_DEBUG_TRACE, "%a, Identify: System: %g Resource: > + %g\n", __FUNCTION__, &SystemUuid, &ResourceUuid)); if (CompareGuid > (&ResourceUuid, &SystemUuid)) { > + Status = EFI_SUCCESS; > + } else { > + Status = EFI_UNSUPPORTED; > + } > + > + mJsonStructProtocol->DestoryStructure ( > + mJsonStructProtocol, > + (EFI_REST_JSON_STRUCTURE_HEADER *)ComputerSystem > + ); > + > + return (Status == EFI_SUCCESS ? TRUE : FALSE); } > + > +/** > + 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 > +RestJasonStructureProtocolIsReady > + ( > + IN EFI_EVENT Event, > + IN VOID *Context > + ) > +{ > + EFI_STATUS Status; > + > + if (mJsonStructProtocol != NULL) { > + return; > + } > + > + Status = gBS->LocateProtocol ( > + &gEfiRestJsonStructureProtocolGuid, > + NULL, > + (VOID **)&mJsonStructProtocol > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a, failed to locate > + gEfiRestJsonStructureProtocolGuid: %r\n", __FUNCTION__, Status)); } > + > + gBS->CloseEvent (Event); > +} > + > +/** > + > + Install JSON protocol notification > + > + @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 > +RedfishResourceIdentifyComuterSystemConstructor ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + VOID *Registration; > + > + EfiCreateProtocolNotifyEvent ( > + &gEfiRestJsonStructureProtocolGuid, > + TPL_CALLBACK, > + RestJasonStructureProtocolIsReady, > + NULL, > + &Registration > + ); > + > + return EFI_SUCCESS; > +} > diff --git > a/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_ > 5_0/ RedfishResourceIdentifyLibComuterSystem.inf > b/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem/v1_ > 5_0/ RedfishResourceIdentifyLibComuterSystem.inf > new file mode 100644 > index 0000000000..862522cdf6 > --- /dev/null > +++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibComuterSystem > +++ /v 1_5_0/RedfishResourceIdentifyLibComuterSystem.inf > @@ -0,0 +1,42 @@ > +## @file > +# > +# (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR> # > +# > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > + > +[Defines] > + INF_VERSION = 0x00010006 > + BASE_NAME = RedfishResourceIdentifyLibComuterSystem > + FILE_GUID = 2AEE2C80-126A-44A6-877E-642F20510D13 > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = RedfishResourceIdentifyLib| DXE_DRIVER > + CONSTRUCTOR = > RedfishResourceIdentifyComuterSystemConstructor > + > +# > +# VALID_ARCHITECTURES = IA32 X64 EBC > +# > + > +[Sources] > + RedfishResourceIdentifyLibComuterSystem.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + NetworkPkg/NetworkPkg.dec > + RedfishPkg/RedfishPkg.dec > + RedfishClientPkg/RedfishClientPkg.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + UefiBootServicesTableLib > + UefiLib > + > +[Protocols] > + gEfiRestJsonStructureProtocolGuid ## CONSUMES > + > +[Pcd] > + > diff --git > a/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResou > rceIde > ntifyLibNull.c > b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResou > rceIde > ntifyLibNull.c > new file mode 100644 > index 0000000000..98eb8fde47 > --- /dev/null > +++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishR > +++ es > +++ ourceIdentifyLibNull.c > @@ -0,0 +1,37 @@ > +/** @file > + Redfish resource identify NULL library implementation > + > + (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include <Uefi.h> > +#include <RedfishBase.h> > +#include <Library/BaseLib.h> > +#include <Library/DebugLib.h> > +#include <Library/RedfishResourceIdentifyLib.h> > + > +/** > + Identify resource from given URI and context in JSON format > + > + @param[in] Uri URI of given Redfish resource > + @param[in] Json Context in JSON format of give Redfish resource > + > + @retval TRUE This is the Redfish resource that we have to handle. > + @retval FALSE We don't handle this Redfish resource. > + > +**/ > +BOOLEAN > +RedfishIdentifyResource ( > + IN EFI_STRING Uri, > + IN CHAR8 *Json > + ) > +{ > + if (!IS_EMPTY_STRING (Uri)) { > + DEBUG ((DEBUG_VERBOSE, "%a, accept resource: %s\n", __FUNCTION__, > +Uri)); > + } > + > + return TRUE; > +} > diff --git > a/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResou > rceIde > ntifyLibNull.inf > b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResou > rceIde > ntifyLibNull.inf > new file mode 100644 > index 0000000000..092e180305 > --- /dev/null > +++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishR > +++ es > +++ ourceIdentifyLibNull.inf > @@ -0,0 +1,37 @@ > +## @file > +# > +# (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR> # > +# > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > + > +[Defines] > + INF_VERSION = 0x00010006 > + BASE_NAME = RedfishResourceIdentifyLibNull > + FILE_GUID = 6FFD4E25-48F8-4CB6-B194-CFAB407316E1 > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = RedfishResourceIdentifyLib| DXE_DRIVER > + > +# > +# VALID_ARCHITECTURES = IA32 X64 EBC > +# > + > +[Sources] > + RedfishResourceIdentifyLibNull.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + RedfishPkg/RedfishPkg.dec > + RedfishClientPkg/RedfishClientPkg.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + > +[Protocols] > + > +[Pcd] [Chang, Abner] We can remove Protocol and Pcd section if we don need anything for them. Thanks. Abner > + > diff --git a/RedfishClientPkg/RedfishClientLibs.dsc.inc > b/RedfishClientPkg/RedfishClientLibs.dsc.inc > index 8acb479170..413b83a732 100644 > --- a/RedfishClientPkg/RedfishClientLibs.dsc.inc > +++ b/RedfishClientPkg/RedfishClientLibs.dsc.inc > @@ -27,7 +27,7 @@ > > RedfishPlatformConfigLib|RedfishPkg/Library/RedfishPlatformConfigLib/R > RedfishPlatformConfigLib|edfish > PlatformConfigLib.inf > > RedfishContentCodingLib|RedfishPkg/Library/RedfishContentCodingLibNull > RedfishContentCodingLib|/Red > fishContentCodingLibNull.inf > > ConverterCommonLib|RedfishClientPkg/ConverterLib/edk2library/Converter > ConverterCommonLib|Co > mmonLib/ConverterCommonLib.inf > - > + > + RedfishResourceIdentifyLib|RedfishClientPkg/Library/RedfishResourceI > + RedfishResourceIdentifyLib|de > + ntifyLibNull/RedfishResourceIdentifyLibNull.inf > > EdkIIRedfishResourceConfigLib|RedfishClientPkg/Library/EdkIIRedfishRes > EdkIIRedfishResourceConfigLib|ource > ConfigLib/EdkIIRedfishResourceConfigLib.inf > > RedfishEventLib|RedfishClientPkg/Library/RedfishEventLib/RedfishEventL > ib.inf > > RedfishVersionLib|RedfishClientPkg/Library/RedfishVersionLib/RedfishVe > RedfishVersionLib|rsionLi > b.inf > diff --git a/RedfishClientPkg/RedfishClientPkg.dec > b/RedfishClientPkg/RedfishClientPkg.dec > index 9d18c42c24..c61c581213 100644 > --- a/RedfishClientPkg/RedfishClientPkg.dec > +++ b/RedfishClientPkg/RedfishClientPkg.dec > @@ -21,6 +21,7 @@ > > [LibraryClasses] > RedfishFeatureUtilityLib|Include/Library/RedfishFeatureUtilityLib.h > + > + RedfishResourceIdentifyLib|Include/Library/RedfishResourceIdentifyLib. > + h > > EdkIIRedfishResourceConfigLib|Include/Library/EdkIIRedfishResourceConfigLib. > h > RedfishEventLib|Include/Library/RedfishEventLib.h > RedfishVersionLib|Include/Library/RedfishVersionLib.h > -- > 2.32.0.windows.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#91884): https://edk2.groups.io/g/devel/message/91884 Mute This Topic: https://groups.io/mt/92596787/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-