public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Chang, Abner" <abner.chang@amd.com>
To: Nickle Wang <nickle.wang@hpe.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Yang, Atom" <Atom.Yang@amd.com>, Nick Ramirez <nramirez@nvidia.com>
Subject: Re: [edk2-staging][PATCH v2 05/15] edk2-staging/RedfishClientPkg: Introduce resource identify library
Date: Tue, 26 Jul 2022 02:04:12 +0000	[thread overview]
Message-ID: <MN2PR12MB3966701BCB199A836DF1D7CBEA949@MN2PR12MB3966.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20220725013555.926-6-nickle.wang@hpe.com>

[AMD Official Use Only - General]

Comment in-line. You can search [Chang, Abner] for the comment.

> -----Original Message-----
> From: Nickle Wang <nickle.wang@hpe.com>
> Sent: Monday, July 25, 2022 9:36 AM
> To: devel@edk2.groups.io
> Cc: Chang, Abner <Abner.Chang@amd.com>; Yang, Atom
> <Atom.Yang@amd.com>; Nick Ramirez <nramirez@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.wang@hpe.com>
> Cc: Abner Chang <abner.chang@amd.com>
> Cc: Yang Atom <Atom.Yang@amd.com>
> Cc: Nick Ramirez <nramirez@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/RedfishResourceIdenti
> fyLibNull.c
>  create mode 100644
> RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIdenti
> 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/RedfishResourceIde
> ntifyLibNull.c
> b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIde
> ntifyLibNull.c
> new file mode 100644
> index 0000000000..98eb8fde47
> --- /dev/null
> +++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishRes
> +++ 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/RedfishResourceIde
> ntifyLibNull.inf
> b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishResourceIde
> ntifyLibNull.inf
> new file mode 100644
> index 0000000000..092e180305
> --- /dev/null
> +++ b/RedfishClientPkg/Library/RedfishResourceIdentifyLibNull/RedfishRes
> +++ 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/Redfish
> PlatformConfigLib.inf
> 
> RedfishContentCodingLib|RedfishPkg/Library/RedfishContentCodingLibNull/Red
> fishContentCodingLibNull.inf
> 
> ConverterCommonLib|RedfishClientPkg/ConverterLib/edk2library/ConverterCo
> mmonLib/ConverterCommonLib.inf
> -
> +
> + RedfishResourceIdentifyLib|RedfishClientPkg/Library/RedfishResourceIde
> + ntifyLibNull/RedfishResourceIdentifyLibNull.inf
> 
> EdkIIRedfishResourceConfigLib|RedfishClientPkg/Library/EdkIIRedfishResource
> ConfigLib/EdkIIRedfishResourceConfigLib.inf
>    RedfishEventLib|RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib.inf
> 
> RedfishVersionLib|RedfishClientPkg/Library/RedfishVersionLib/RedfishVersionLi
> 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

  reply	other threads:[~2022-07-26  2:04 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-25  1:35 [edk2-staging][PATCH v2 00/15] Update RedfishClientpkg Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 01/15] edk2-staging/RedfishClientPkg: Introduce Redfish event library Nickle Wang
2022-07-26  1:40   ` Chang, Abner
2022-07-25  1:35 ` [edk2-staging][PATCH v2 02/15] edk2-staging/RedfishClientPkg: Introduce Redfish version library Nickle Wang
2022-07-26  1:46   ` Chang, Abner
2022-07-25  1:35 ` [edk2-staging][PATCH v2 03/15] edk2-staging/RedfishClientPkg: Update Redfish Resource Config Protocol Nickle Wang
2022-07-26  1:49   ` Chang, Abner
2022-07-25  1:35 ` [edk2-staging][PATCH v2 04/15] edk2-staging/RedfishClientPkg: Introduce Redfish resource config library Nickle Wang
2022-07-26  1:58   ` Chang, Abner
2022-07-25  1:35 ` [edk2-staging][PATCH v2 05/15] edk2-staging/RedfishClientPkg: Introduce resource identify library Nickle Wang
2022-07-26  2:04   ` Chang, Abner [this message]
2022-07-27  1:39     ` Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 06/15] edk2-staging/RedfishClientPkg: Introduce RedfishConfigLangMap driver Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 07/15] edk2-staging/RedfishClientPkg: Update ETag driver Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 08/15] edk2-staging/RedfishClientPkg: Update Redfish feature core driver Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 09/15] edk2-staging/RedfishClientPkg: Update RedfishLib Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 10/15] edk2-staging/RedfishClientPkg: Update Redfish feature utility library Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 11/15] edk2-staging/RedfishClientPkg: Rename RedfishMemoryCollection driver Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 12/15] edk2-staging/RedfishClientPkg: Rename Memory feature driver Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 13/15] edk2-staging/RedfishClientPkg: Introduce Computer System collection driver Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 14/15] edk2-staging/RedfishClientPkg: Introduce Computer System feature driver Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 15/15] edk2-staging/RedfishClientPkg: Introduce Bios " Nickle Wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MN2PR12MB3966701BCB199A836DF1D7CBEA949@MN2PR12MB3966.namprd12.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox