public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Nickle Wang via groups.io" <nicklew=nvidia.com@groups.io>
To: "abner.chang@amd.com" <abner.chang@amd.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Igor Kulchytskyy <igork@ami.com>
Subject: Re: [edk2-devel] [edk2-redfish-client][PATCH] RedfishClientPkg/FeatureDriver: ComputerSystem_1_5_0 driver
Date: Fri, 26 Jan 2024 02:17:56 +0000	[thread overview]
Message-ID: <MW4PR12MB7031A16806E688040C9ACFCFD9792@MW4PR12MB7031.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20240126011447.1814-1-abner.chang@amd.com>

Hi Abner,

I found one minor issue:

>      if (ConfigLangList.Count == 0) {
> +      DEBUG ((DEBUG_MANAGEABILITY, "  No platform Redfish ConfigureLang
> + found for %s\n", __func__, Private->Uri));
>        return EFI_SUCCESS;


"%a:" is missing above.

Regards,
Nickle

> -----Original Message-----
> From: abner.chang@amd.com <abner.chang@amd.com>
> Sent: Friday, January 26, 2024 9:15 AM
> To: devel@edk2.groups.io
> Cc: Nickle Wang <nicklew@nvidia.com>; Igor Kulchytskyy <igork@ami.com>
> Subject: [edk2-redfish-client][PATCH] RedfishClientPkg/FeatureDriver:
> ComputerSystem_1_5_0 driver
> 
> External email: Use caution opening links or attachments
> 
> 
> From: Abner Chang <abner.chang@amd.com>
> 
> Update Redfish ComputerSystem_1_5_0 feature driver to align the
> implementation with latest code. This driver handles all of ComputerSystem
> v1_5_0 properties and incorporate with Redfish simualtor.
> 
> Signed-off-by: Abner Chang <abner.chang@amd.com>
> Cc: Nickle Wang <nicklew@nvidia.com>
> Cc: Igor Kulchytskyy <igork@ami.com>
> ---
>  .../v1_5_0/Dxe/ComputerSystemDxe.inf          |   1 +
>  .../v1_5_0/Common/ComputerSystemCommon.c      | 347 ++++++++++++------
>  .../v1_5_0/Dxe/ComputerSystemDxe.c            |  64 ++--
>  3 files changed, 271 insertions(+), 141 deletions(-)
> 
> diff --git
> a/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystemDx
> e.inf
> b/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystemDx
> e.inf
> index 36cbe06211..4e7dc5c7c5 100644
> ---
> a/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystemDx
> e.inf
> +++
> b/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystem
> +++ Dxe.inf
> @@ -37,6 +37,7 @@
>    RedfishResourceIdentifyLib
>    UefiLib
>    UefiDriverEntryPoint
> +  RedfishAddendumLib
>    RedfishHttpCacheLib
> 
>  [Protocols]
> diff --git
> a/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Common/ComputerSyste
> mCommon.c
> b/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Common/ComputerSyste
> mCommon.c
> index 3ace03bd4c..7cd2a6f378 100644
> ---
> a/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Common/ComputerSyste
> mCommon.c
> +++
> b/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Common/ComputerSys
> +++ temCommon.c
> @@ -53,7 +53,7 @@ RedfishConsumeResourceCommon (
>                                            (EFI_REST_JSON_STRUCTURE_HEADER
> **)&ComputerSystem
>                                            );
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, ToStructure() failed: %r\n", __func__, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: ToStructure() failed: %r\n", __func__,
> + Status));
>      return Status;
>    }
> 
> @@ -66,8 +66,8 @@ RedfishConsumeResourceCommon (
>      //
>      // No change
>      //
> -    DEBUG ((DEBUG_MANAGEABILITY, "%a, ETAG: %s has no change, ignore
> consume action\n", __func__, Private->Uri));
> -    Status = EFI_ALREADY_STARTED;
> +    DEBUG ((DEBUG_MANAGEABILITY, "%a: ETAG: %s has no change, ignore
> consume action\n", __func__, Private->Uri));
> +    Status = EFI_SUCCESS;
>      goto ON_RELEASE;
>    }
> 
> @@ -154,12 +154,12 @@ RedfishConsumeResourceCommon (
>      if (ConfigureLang != NULL) {
>        Status = ApplyFeatureSettingsStringArrayType (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, ConfigureLang, ComputerSystemCs->Boot-
> >BootOrder);
>        if (EFI_ERROR (Status)) {
> -        DEBUG ((DEBUG_ERROR, "%a, apply setting for %s failed: %r\n", __func__,
> ConfigureLang, Status));
> +        DEBUG ((DEBUG_ERROR, "%a: apply setting for %s failed: %r\n",
> + __func__, ConfigureLang, Status));
>        }
> 
>        FreePool (ConfigureLang);
>      } else {
> -      DEBUG ((DEBUG_ERROR, "%a, can not get configure language for URI: %s\n",
> __func__, Private->Uri));
> +      DEBUG ((DEBUG_ERROR, "%a: can not get configure language for URI:
> + %s\n", __func__, Private->Uri));
>      }
>    }
> 
> @@ -174,12 +174,12 @@ RedfishConsumeResourceCommon (
>      if (ConfigureLang != NULL) {
>        Status = ApplyFeatureSettingsStringType (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, ConfigureLang, ComputerSystemCs->Boot-
> >BootSourceOverrideEnabled);
>        if (EFI_ERROR (Status)) {
> -        DEBUG ((DEBUG_ERROR, "%a, apply setting for %s failed: %r\n", __func__,
> ConfigureLang, Status));
> +        DEBUG ((DEBUG_ERROR, "%a: apply setting for %s failed: %r\n",
> + __func__, ConfigureLang, Status));
>        }
> 
>        FreePool (ConfigureLang);
>      } else {
> -      DEBUG ((DEBUG_ERROR, "%a, can not get configure language for URI: %s\n",
> __func__, Private->Uri));
> +      DEBUG ((DEBUG_ERROR, "%a: can not get configure language for URI:
> + %s\n", __func__, Private->Uri));
>      }
>    }
> 
> @@ -194,12 +194,12 @@ RedfishConsumeResourceCommon (
>      if (ConfigureLang != NULL) {
>        Status = ApplyFeatureSettingsStringType (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, ConfigureLang, ComputerSystemCs->Boot-
> >BootSourceOverrideMode);
>        if (EFI_ERROR (Status)) {
> -        DEBUG ((DEBUG_ERROR, "%a, apply setting for %s failed: %r\n", __func__,
> ConfigureLang, Status));
> +        DEBUG ((DEBUG_ERROR, "%a: apply setting for %s failed: %r\n",
> + __func__, ConfigureLang, Status));
>        }
> 
>        FreePool (ConfigureLang);
>      } else {
> -      DEBUG ((DEBUG_ERROR, "%a, can not get configure language for URI: %s\n",
> __func__, Private->Uri));
> +      DEBUG ((DEBUG_ERROR, "%a: can not get configure language for URI:
> + %s\n", __func__, Private->Uri));
>      }
>    }
> 
> @@ -234,12 +234,12 @@ RedfishConsumeResourceCommon (
>      if (ConfigureLang != NULL) {
>        Status = ApplyFeatureSettingsStringType (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, ConfigureLang, ComputerSystemCs->Boot-
> >UefiTargetBootSourceOverride);
>        if (EFI_ERROR (Status)) {
> -        DEBUG ((DEBUG_ERROR, "%a, apply setting for %s failed: %r\n", __func__,
> ConfigureLang, Status));
> +        DEBUG ((DEBUG_ERROR, "%a: apply setting for %s failed: %r\n",
> + __func__, ConfigureLang, Status));
>        }
> 
>        FreePool (ConfigureLang);
>      } else {
> -      DEBUG ((DEBUG_ERROR, "%a, can not get configure language for URI: %s\n",
> __func__, Private->Uri));
> +      DEBUG ((DEBUG_ERROR, "%a: can not get configure language for URI:
> + %s\n", __func__, Private->Uri));
>      }
>    }
> 
> @@ -742,9 +742,9 @@ ON_RELEASE:
> 
>  EFI_STATUS
>  ProvisioningComputerSystemProperties (
> -  IN  EFI_REST_JSON_STRUCTURE_PROTOCOL *JsonStructProtocol,
> -  IN  CHAR8 *InputJson,
> -  IN  CHAR8 *ResourceId, OPTIONAL
> +  IN  EFI_REST_JSON_STRUCTURE_PROTOCOL  *JsonStructProtocol,
> +  IN  CHAR8                             *InputJson,
> +  IN  CHAR8                             *ResourceId OPTIONAL,
>    IN  EFI_STRING                        ConfigureLang,
>    IN  BOOLEAN                           ProvisionMode,
>    OUT CHAR8                             **ResultJson
> @@ -752,6 +752,8 @@ ProvisioningComputerSystemProperties (  {
>    EFI_REDFISH_COMPUTERSYSTEM_V1_5_0     *ComputerSystem;
>    EFI_REDFISH_COMPUTERSYSTEM_V1_5_0_CS  *ComputerSystemCs;
> +  EFI_REDFISH_COMPUTERSYSTEM_V1_5_0     *ComputerSystemEmpty;
> +  EFI_REDFISH_COMPUTERSYSTEM_V1_5_0_CS  *ComputerSystemCsEmpty;
>    EFI_STATUS                            Status;
>    BOOLEAN                               PropertyChanged;
>    CHAR8                                 *AsciiStringValue;
> @@ -778,17 +780,33 @@ ProvisioningComputerSystemProperties (
>                                           (EFI_REST_JSON_STRUCTURE_HEADER
> **)&ComputerSystem
>                                           );
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, ToStructure failure: %r\n", __func__, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: ToStructure failure: %r\n", __func__, Status));
> +    return Status;
> +  }
> +
> +  ComputerSystemEmpty = NULL;
> +  Status              = JsonStructProtocol->ToStructure (
> +                                              JsonStructProtocol,
> +                                              NULL,
> +                                              ComputerSystemEmptyJson,
> +                                              (EFI_REST_JSON_STRUCTURE_HEADER
> **)&ComputerSystemEmpty
> +                                              );  if (EFI_ERROR
> + (Status)) {
> +    DEBUG ((DEBUG_ERROR, "%a: ToStructure failure: %r\n", __func__,
> + Status));
>      return Status;
>    }
> 
>    ComputerSystemCs = ComputerSystem->ComputerSystem;
> +  //
> +  // Initial an empty ComputerSystemCS
> +  //
> +  ComputerSystemCsEmpty = ComputerSystemEmpty->ComputerSystem;
> 
>    //
>    // ID
>    //
>    if ((ComputerSystemCs->Id == NULL) && !IS_EMPTY_STRING (ResourceId)) {
> -    ComputerSystemCs->Id = AllocateCopyPool (AsciiStrSize (ResourceId),
> ResourceId);
> +    ComputerSystemCsEmpty->Id = AllocateCopyPool (AsciiStrSize
> + (ResourceId), ResourceId);
>    }
> 
>    //
> @@ -798,8 +816,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"AssetTag", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->AssetTag,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->AssetTag = AsciiStringValue;
> -        PropertyChanged            = TRUE;
> +        ComputerSystemCsEmpty->AssetTag = AsciiStringValue;
> +        PropertyChanged                 = TRUE;
>        }
>      }
>    }
> @@ -811,8 +829,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"BiosVersion", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->BiosVersion,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->BiosVersion = AsciiStringValue;
> -        PropertyChanged               = TRUE;
> +        ComputerSystemCsEmpty->BiosVersion = AsciiStringValue;
> +        PropertyChanged                    = TRUE;
>        }
>      }
>    }
> @@ -828,8 +846,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"Boot/BootNext", ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->Boot->BootNext,
> AsciiStringValue) != 0)) {
> -          ComputerSystemCs->Boot->BootNext = AsciiStringValue;
> -          PropertyChanged                  = TRUE;
> +          ComputerSystemCsEmpty->Boot->BootNext = AsciiStringValue;
> +          PropertyChanged                       = TRUE;
>          }
>        }
>      }
> @@ -841,7 +859,7 @@ ProvisioningComputerSystemProperties (
>        AsciiStringArrayValue = GetPropertyStringArrayValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"Boot/BootOrder", ConfigureLang, &ArraySize);
>        if (AsciiStringArrayValue != NULL) {
>          if (ProvisionMode || !CompareRedfishStringArrayValues
> (ComputerSystemCs->Boot->BootOrder, AsciiStringArrayValue, ArraySize)) {
> -          AddRedfishCharArray (&ComputerSystemCs->Boot->BootOrder,
> AsciiStringArrayValue, ArraySize);
> +          AddRedfishCharArray (&ComputerSystemCsEmpty->Boot->BootOrder,
> + AsciiStringArrayValue, ArraySize);
>            PropertyChanged = TRUE;
>          }
>        }
> @@ -854,8 +872,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"Boot/BootSourceOverrideEnabled",
> ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->Boot-
> >BootSourceOverrideEnabled, AsciiStringValue) != 0)) {
> -          ComputerSystemCs->Boot->BootSourceOverrideEnabled =
> AsciiStringValue;
> -          PropertyChanged                                   = TRUE;
> +          ComputerSystemCsEmpty->Boot->BootSourceOverrideEnabled =
> AsciiStringValue;
> +          PropertyChanged                                        = TRUE;
>          }
>        }
>      }
> @@ -867,8 +885,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"Boot/BootSourceOverrideMode",
> ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->Boot-
> >BootSourceOverrideMode, AsciiStringValue) != 0)) {
> -          ComputerSystemCs->Boot->BootSourceOverrideMode = AsciiStringValue;
> -          PropertyChanged                                = TRUE;
> +          ComputerSystemCsEmpty->Boot->BootSourceOverrideMode =
> AsciiStringValue;
> +          PropertyChanged                                     = TRUE;
>          }
>        }
>      }
> @@ -880,8 +898,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"Boot/BootSourceOverrideTarget",
> ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->Boot-
> >BootSourceOverrideTarget, AsciiStringValue) != 0)) {
> -          ComputerSystemCs->Boot->BootSourceOverrideTarget = AsciiStringValue;
> -          PropertyChanged                                  = TRUE;
> +          ComputerSystemCsEmpty->Boot->BootSourceOverrideTarget =
> AsciiStringValue;
> +          PropertyChanged                                       = TRUE;
>          }
>        }
>      }
> @@ -893,8 +911,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"Boot/UefiTargetBootSourceOverride",
> ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->Boot-
> >UefiTargetBootSourceOverride, AsciiStringValue) != 0)) {
> -          ComputerSystemCs->Boot->UefiTargetBootSourceOverride =
> AsciiStringValue;
> -          PropertyChanged                                      = TRUE;
> +          ComputerSystemCsEmpty->Boot->UefiTargetBootSourceOverride =
> AsciiStringValue;
> +          PropertyChanged                                           = TRUE;
>          }
>        }
>      }
> @@ -907,8 +925,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"HostName", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->HostName,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->HostName = AsciiStringValue;
> -        PropertyChanged            = TRUE;
> +        ComputerSystemCsEmpty->HostName = AsciiStringValue;
> +        PropertyChanged                 = TRUE;
>        }
>      }
>    }
> @@ -926,9 +944,9 @@ ProvisioningComputerSystemProperties (
>          if (ProvisionMode || (*ComputerSystemCs->HostWatchdogTimer-
> >FunctionEnabled != *BooleanValue)) {
>            IntegerValue = AllocatePool (sizeof (*IntegerValue));
>            if (IntegerValue != NULL) {
> -            *IntegerValue                                        = (BooleanValue ? 0x01 : 0x00);
> -            ComputerSystemCs->HostWatchdogTimer->FunctionEnabled =
> IntegerValue;
> -            PropertyChanged                                      = TRUE;
> +            *IntegerValue                                             = (BooleanValue ? 0x01 : 0x00);
> +            ComputerSystemCsEmpty->HostWatchdogTimer->FunctionEnabled =
> IntegerValue;
> +            PropertyChanged                                           = TRUE;
>            }
>          }
>        }
> @@ -941,8 +959,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"HostWatchdogTimer/TimeoutAction",
> ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs-
> >HostWatchdogTimer->TimeoutAction, AsciiStringValue) != 0)) {
> -          ComputerSystemCs->HostWatchdogTimer->TimeoutAction =
> AsciiStringValue;
> -          PropertyChanged                                    = TRUE;
> +          ComputerSystemCsEmpty->HostWatchdogTimer->TimeoutAction =
> AsciiStringValue;
> +          PropertyChanged                                         = TRUE;
>          }
>        }
>      }
> @@ -954,8 +972,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"HostWatchdogTimer/WarningAction",
> ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs-
> >HostWatchdogTimer->WarningAction, AsciiStringValue) != 0)) {
> -          ComputerSystemCs->HostWatchdogTimer->WarningAction =
> AsciiStringValue;
> -          PropertyChanged                                    = TRUE;
> +          ComputerSystemCsEmpty->HostWatchdogTimer->WarningAction =
> AsciiStringValue;
> +          PropertyChanged                                         = TRUE;
>          }
>        }
>      }
> @@ -964,7 +982,7 @@ ProvisioningComputerSystemProperties (
>    //
>    // Handle HOSTEDSERVICES
>    //
> -  if (ComputerSystemCs->HostedServices != NULL) {
> +  if (ComputerSystemCsEmpty->HostedServices != NULL) {
>    }
> 
>    //
> @@ -981,8 +999,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"IndicatorLED", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->IndicatorLED,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->IndicatorLED = AsciiStringValue;
> -        PropertyChanged                = TRUE;
> +        ComputerSystemCsEmpty->IndicatorLED = AsciiStringValue;
> +        PropertyChanged                     = TRUE;
>        }
>      }
>    }
> @@ -994,8 +1012,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"Manufacturer", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->Manufacturer,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->Manufacturer = AsciiStringValue;
> -        PropertyChanged                = TRUE;
> +        ComputerSystemCsEmpty->Manufacturer = AsciiStringValue;
> +        PropertyChanged                     = TRUE;
>        }
>      }
>    }
> @@ -1011,8 +1029,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"MemorySummary/MemoryMirroring",
> ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->MemorySummary-
> >MemoryMirroring, AsciiStringValue) != 0)) {
> -          ComputerSystemCs->MemorySummary->MemoryMirroring =
> AsciiStringValue;
> -          PropertyChanged                                  = TRUE;
> +          ComputerSystemCsEmpty->MemorySummary->MemoryMirroring =
> AsciiStringValue;
> +          PropertyChanged                                       = TRUE;
>          }
>        }
>      }
> @@ -1024,8 +1042,8 @@ ProvisioningComputerSystemProperties (
>        NumericValue = GetPropertyNumericValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"MemorySummary/TotalSystemMemoryGiB",
> ConfigureLang);
>        if (NumericValue != NULL) {
>          if (ProvisionMode || (*ComputerSystemCs->MemorySummary-
> >TotalSystemMemoryGiB != *NumericValue)) {
> -          ComputerSystemCs->MemorySummary->TotalSystemMemoryGiB =
> NumericValue;
> -          PropertyChanged                                       = TRUE;
> +          ComputerSystemCsEmpty->MemorySummary->TotalSystemMemoryGiB =
> NumericValue;
> +          PropertyChanged                                            = TRUE;
>          }
>        }
>      }
> @@ -1037,8 +1055,8 @@ ProvisioningComputerSystemProperties (
>        NumericValue = GetPropertyNumericValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION,
> L"MemorySummary/TotalSystemPersistentMemoryGiB", ConfigureLang);
>        if (NumericValue != NULL) {
>          if (ProvisionMode || (*ComputerSystemCs->MemorySummary-
> >TotalSystemPersistentMemoryGiB != *NumericValue)) {
> -          ComputerSystemCs->MemorySummary-
> >TotalSystemPersistentMemoryGiB = NumericValue;
> -          PropertyChanged                                                 = TRUE;
> +          ComputerSystemCsEmpty->MemorySummary-
> >TotalSystemPersistentMemoryGiB = NumericValue;
> +          PropertyChanged                                                      = TRUE;
>          }
>        }
>      }
> @@ -1051,8 +1069,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"Model", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->Model,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->Model = AsciiStringValue;
> -        PropertyChanged         = TRUE;
> +        ComputerSystemCsEmpty->Model = AsciiStringValue;
> +        PropertyChanged              = TRUE;
>        }
>      }
>    }
> @@ -1078,8 +1096,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"PartNumber", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->PartNumber,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->PartNumber = AsciiStringValue;
> -        PropertyChanged              = TRUE;
> +        ComputerSystemCsEmpty->PartNumber = AsciiStringValue;
> +        PropertyChanged                   = TRUE;
>        }
>      }
>    }
> @@ -1091,8 +1109,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"PowerState", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->PowerState,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->PowerState = AsciiStringValue;
> -        PropertyChanged              = TRUE;
> +        ComputerSystemCsEmpty->PowerState = AsciiStringValue;
> +        PropertyChanged                   = TRUE;
>        }
>      }
>    }
> @@ -1108,8 +1126,8 @@ ProvisioningComputerSystemProperties (
>        NumericValue = GetPropertyNumericValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"ProcessorSummary/Count", ConfigureLang);
>        if (NumericValue != NULL) {
>          if (ProvisionMode || (*ComputerSystemCs->ProcessorSummary->Count !=
> *NumericValue)) {
> -          ComputerSystemCs->ProcessorSummary->Count = NumericValue;
> -          PropertyChanged                           = TRUE;
> +          ComputerSystemCsEmpty->ProcessorSummary->Count = NumericValue;
> +          PropertyChanged                                = TRUE;
>          }
>        }
>      }
> @@ -1121,8 +1139,8 @@ ProvisioningComputerSystemProperties (
>        NumericValue = GetPropertyNumericValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"ProcessorSummary/LogicalProcessorCount",
> ConfigureLang);
>        if (NumericValue != NULL) {
>          if (ProvisionMode || (*ComputerSystemCs->ProcessorSummary-
> >LogicalProcessorCount != *NumericValue)) {
> -          ComputerSystemCs->ProcessorSummary->LogicalProcessorCount =
> NumericValue;
> -          PropertyChanged                                           = TRUE;
> +          ComputerSystemCsEmpty->ProcessorSummary->LogicalProcessorCount =
> NumericValue;
> +          PropertyChanged                                                = TRUE;
>          }
>        }
>      }
> @@ -1134,8 +1152,8 @@ ProvisioningComputerSystemProperties (
>        AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"ProcessorSummary/Model", ConfigureLang);
>        if (AsciiStringValue != NULL) {
>          if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->ProcessorSummary-
> >Model, AsciiStringValue) != 0)) {
> -          ComputerSystemCs->ProcessorSummary->Model = AsciiStringValue;
> -          PropertyChanged                           = TRUE;
> +          ComputerSystemCsEmpty->ProcessorSummary->Model = AsciiStringValue;
> +          PropertyChanged                                = TRUE;
>          }
>        }
>      }
> @@ -1155,8 +1173,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"SKU", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->SKU,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->SKU = AsciiStringValue;
> -        PropertyChanged       = TRUE;
> +        ComputerSystemCsEmpty->SKU = AsciiStringValue;
> +        PropertyChanged            = TRUE;
>        }
>      }
>    }
> @@ -1168,8 +1186,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"SerialNumber", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->SerialNumber,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->SerialNumber = AsciiStringValue;
> -        PropertyChanged                = TRUE;
> +        ComputerSystemCsEmpty->SerialNumber = AsciiStringValue;
> +        PropertyChanged                     = TRUE;
>        }
>      }
>    }
> @@ -1181,8 +1199,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"SubModel", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->SubModel,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->SubModel = AsciiStringValue;
> -        PropertyChanged            = TRUE;
> +        ComputerSystemCsEmpty->SubModel = AsciiStringValue;
> +        PropertyChanged                 = TRUE;
>        }
>      }
>    }
> @@ -1194,8 +1212,8 @@ ProvisioningComputerSystemProperties (
>      AsciiStringValue = GetPropertyStringValue (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, L"SystemType", ConfigureLang);
>      if (AsciiStringValue != NULL) {
>        if (ProvisionMode || (AsciiStrCmp (ComputerSystemCs->SystemType,
> AsciiStringValue) != 0)) {
> -        ComputerSystemCs->SystemType = AsciiStringValue;
> -        PropertyChanged              = TRUE;
> +        ComputerSystemCsEmpty->SystemType = AsciiStringValue;
> +        PropertyChanged                   = TRUE;
>        }
>      }
>    }
> @@ -1212,14 +1230,24 @@ ProvisioningComputerSystemProperties (
>    //
>    Status = JsonStructProtocol->ToJson (
>                                   JsonStructProtocol,
> -                                 (EFI_REST_JSON_STRUCTURE_HEADER *)ComputerSystem,
> +                                 (EFI_REST_JSON_STRUCTURE_HEADER
> + *)ComputerSystemEmpty,
>                                   ResultJson
>                                   );
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, ToJson() failed: %r\n", __func__, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: ToJson() failed: %r\n", __func__,
> + Status));
>      return Status;
>    }
> 
> +  if (PropertyChanged) {
> +    // Remove Redfish unchangeable properties.
> +    Status = RedfishRemoveUnchangeableProperties (ResultJson);
> +    if (EFI_ERROR (Status)) {
> +      DEBUG ((DEBUG_ERROR, "%a: Fail to remove Redfish unchangeable
> properties from ResultJson.\n", __func__));
> +      *ResultJson = NULL;
> +      return Status;
> +    }
> +  }
> +
>    //
>    // Release resource.
>    //
> @@ -1228,6 +1256,17 @@ ProvisioningComputerSystemProperties (
>                          (EFI_REST_JSON_STRUCTURE_HEADER *)ComputerSystem
>                          );
> 
> +  //
> +  // Free memory allocated for Computersystem empty CS  //  if
> + (ComputerSystemCsEmpty->Boot->BootOrder != NULL) {
> +    DestoryRedfishCharArray (ComputerSystemCsEmpty->Boot->BootOrder,
> + ArraySize);  }
> +
> +  JsonStructProtocol->DestoryStructure (
> +                        JsonStructProtocol,
> +                        (EFI_REST_JSON_STRUCTURE_HEADER *)ComputerSystemEmpty
> +                        );
>    return (PropertyChanged ? EFI_SUCCESS : EFI_NOT_FOUND);  }
> 
> @@ -1239,6 +1278,7 @@ ProvisioningComputerSystemResource (
>    )
>  {
>    CHAR8       *Json;
> +  CHAR8       *JsonWithAddendum;
>    EFI_STATUS  Status;
>    EFI_STRING  NewResourceLocation;
>    CHAR8       *EtagStr;
> @@ -1260,13 +1300,45 @@ ProvisioningComputerSystemResource (
>               &Json
>               );
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, provisioning resource for %s failed: %r\n",
> __func__, ConfigureLang, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: provisioning resource for %s failed:
> + %r\n", __func__, ConfigureLang, Status));
>      return Status;
>    }
> 
> +  //
> +  // Check and see if platform has OEM data or not  //  Status =
> + RedfishGetOemData (
> +             Private->Uri,
> +             RESOURCE_SCHEMA,
> +             RESOURCE_SCHEMA_VERSION,
> +             Json,
> +             &JsonWithAddendum
> +             );
> +  if (!EFI_ERROR (Status) && (JsonWithAddendum != NULL)) {
> +    FreePool (Json);
> +    Json             = JsonWithAddendum;
> +    JsonWithAddendum = NULL;
> +  }
> +
> +  //
> +  // Check and see if platform has addendum data or not  //  Status =
> + RedfishGetAddendumData (
> +             Private->Uri,
> +             RESOURCE_SCHEMA,
> +             RESOURCE_SCHEMA_VERSION,
> +             Json,
> +             &JsonWithAddendum
> +             );
> +  if (!EFI_ERROR (Status) && (JsonWithAddendum != NULL)) {
> +    FreePool (Json);
> +    Json             = JsonWithAddendum;
> +    JsonWithAddendum = NULL;
> +  }
> +
>    Status = CreatePayloadToPostResource (Private->RedfishService, Private-
> >Payload, Json, &NewResourceLocation, &EtagStr);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, post ComputerSystem resource for %s failed:
> %r\n", __func__, ConfigureLang, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: post ComputerSystem resource for %s
> + failed: %r\n", __func__, ConfigureLang, Status));
>      goto RELEASE_RESOURCE;
>    }
> 
> @@ -1279,16 +1351,12 @@ ProvisioningComputerSystemResource (
>      RedfishSetRedfishUri (ConfigureLang, NewResourceLocation);
>    }
> 
> -  //
> -  // Handle Etag
> -  //
> +RELEASE_RESOURCE:
> +
>    if (EtagStr != NULL) {
> -    SetEtagWithUri (EtagStr, NewResourceLocation);
>      FreePool (EtagStr);
>    }
> 
> -RELEASE_RESOURCE:
> -
>    if (NewResourceLocation != NULL) {
>      FreePool (NewResourceLocation);
>    }
> @@ -1315,7 +1383,7 @@ ProvisioningComputerSystemResources (
> 
>    Status = RedfishFeatureGetUnifiedArrayTypeConfigureLang
> (RESOURCE_SCHEMA, RESOURCE_SCHEMA_VERSION,
> REDPATH_ARRAY_PATTERN, &UnifiedConfigureLangList);
>    if (EFI_ERROR (Status) || (UnifiedConfigureLangList.Count == 0)) {
> -    DEBUG ((DEBUG_ERROR, "%a, No HII question found with configure language:
> %s: %r\n", __func__, REDPATH_ARRAY_PATTERN, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: No HII question found with configure
> + language: %s: %r\n", __func__, REDPATH_ARRAY_PATTERN, Status));
>      return EFI_NOT_FOUND;
>    }
> 
> @@ -1341,14 +1409,13 @@ ProvisioningComputerSystemExistResource (  {
>    EFI_STATUS  Status;
>    EFI_STRING  ConfigureLang;
> -  CHAR8       *EtagStr;
>    CHAR8       *Json;
> +  CHAR8       *JsonWithAddendum;
> 
>    if (Private == NULL) {
>      return EFI_INVALID_PARAMETER;
>    }
> 
> -  EtagStr       = NULL;
>    Json          = NULL;
>    ConfigureLang = NULL;
> 
> @@ -1367,29 +1434,55 @@ ProvisioningComputerSystemExistResource (
>               );
>    if (EFI_ERROR (Status)) {
>      if (Status == EFI_NOT_FOUND) {
> -      DEBUG ((REDFISH_DEBUG_TRACE, "%a, provisioning existing resource for %s
> ignored. Nothing changed\n", __func__, ConfigureLang));
> +      DEBUG ((DEBUG_MANAGEABILITY, "%a: provisioning existing resource for
> %s ignored. Nothing changed\n", __func__, ConfigureLang));
> +      Status = EFI_SUCCESS;
>      } else {
> -      DEBUG ((DEBUG_ERROR, "%a, provisioning existing resource for %s failed:
> %r\n", __func__, ConfigureLang, Status));
> +      DEBUG ((DEBUG_ERROR, "%a: provisioning existing resource for %s
> + failed: %r\n", __func__, ConfigureLang, Status));
>      }
> 
>      goto ON_RELEASE;
>    }
> 
> -  DEBUG ((REDFISH_DEBUG_TRACE, "%a, provisioning existing resource for
> %s\n", __func__, ConfigureLang));
>    //
> -  // PUT back to instance
> +  // Check and see if platform has OEM data or not
>    //
> -  Status = CreatePayloadToPatchResource (Private->RedfishService, Private-
> >Payload, Json, &EtagStr);
> -  if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, patch resource for %s failed: %r\n", __func__,
> ConfigureLang, Status));
> +  Status = RedfishGetOemData (
> +             Private->Uri,
> +             RESOURCE_SCHEMA,
> +             RESOURCE_SCHEMA_VERSION,
> +             Json,
> +             &JsonWithAddendum
> +             );
> +  if (!EFI_ERROR (Status) && (JsonWithAddendum != NULL)) {
> +    FreePool (Json);
> +    Json             = JsonWithAddendum;
> +    JsonWithAddendum = NULL;
>    }
> 
>    //
> -  // Handle Etag
> +  // Check and see if platform has addendum data or not
>    //
> -  if (EtagStr != NULL) {
> -    SetEtagWithUri (EtagStr, Private->Uri);
> -    FreePool (EtagStr);
> +  Status = RedfishGetAddendumData (
> +             Private->Uri,
> +             RESOURCE_SCHEMA,
> +             RESOURCE_SCHEMA_VERSION,
> +             Json,
> +             &JsonWithAddendum
> +             );
> +  if (!EFI_ERROR (Status) && (JsonWithAddendum != NULL)) {
> +    FreePool (Json);
> +    Json             = JsonWithAddendum;
> +    JsonWithAddendum = NULL;
> +  }
> +
> +  DEBUG ((DEBUG_MANAGEABILITY, "%a: provisioning existing resource for
> + %s\n", __func__, ConfigureLang));
> +
> +  //
> +  // PUT back to instance
> +  //
> +  Status = CreatePayloadToPatchResource (Private->RedfishService,
> + Private->Payload, Json, NULL);  if (EFI_ERROR (Status)) {
> +    DEBUG ((DEBUG_ERROR, "%a: patch resource for %s failed: %r\n",
> + __func__, ConfigureLang, Status));
>    }
> 
>  ON_RELEASE:
> @@ -1458,7 +1551,7 @@ RedfishCheckResourceCommon (
>    }
> 
>    //
> -  // Check ETAG to see if we need to check this resource again or not.
> +  // Check ETAG to see if we need to check it
>    //
>    if (CheckEtag (Private->Uri, HeaderEtag, NULL)) {
>      //
> @@ -1470,12 +1563,12 @@ RedfishCheckResourceCommon (
> 
>    Status = RedfishPlatformConfigGetConfigureLang (RESOURCE_SCHEMA,
> RESOURCE_SCHEMA_VERSION, REDPATH_ARRAY_PATTERN, &ConfigureLangList,
> &Count);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, RedfishPlatformConfigGetConfigureLang failed:
> %r\n", __func__, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: failed: %r\n", __func__, Status));
>      return Status;
>    }
> 
>    if (Count == 0) {
> -    return EFI_NOT_FOUND;
> +    return EFI_UNSUPPORTED;
>    }
> 
>    Status = EFI_SUCCESS;
> @@ -1485,9 +1578,9 @@ RedfishCheckResourceCommon (
>        continue;
>      }
> 
> -    DEBUG ((DEBUG_MANAGEABILITY, "%a, [%d] check attribute for: %s\n",
> __func__, Index, Property));
> +    DEBUG ((DEBUG_MANAGEABILITY, "%a: [%d] check attribute for: %s\n",
> + __func__, Index, Property));
>      if (!MatchPropertyWithJsonContext (Property, Json)) {
> -      DEBUG ((DEBUG_MANAGEABILITY, "%a, property is missing: %s\n",
> __func__, Property));
> +      DEBUG ((DEBUG_MANAGEABILITY, "%a: property is missing: %s\n",
> + __func__, Property));
>        Status = EFI_NOT_FOUND;
>      }
>    }
> @@ -1515,14 +1608,13 @@ RedfishUpdateResourceCommon (  {
>    EFI_STATUS  Status;
>    CHAR8       *Json;
> +  CHAR8       *JsonWithAddendum;
>    EFI_STRING  ConfigureLang;
> -  CHAR8       *EtagStr;
> 
>    if ((Private == NULL) || IS_EMPTY_STRING (InputJson)) {
>      return EFI_INVALID_PARAMETER;
>    }
> 
> -  EtagStr       = NULL;
>    Json          = NULL;
>    ConfigureLang = NULL;
> 
> @@ -1541,29 +1633,55 @@ RedfishUpdateResourceCommon (
>               );
>    if (EFI_ERROR (Status)) {
>      if (Status == EFI_NOT_FOUND) {
> -      DEBUG ((REDFISH_DEBUG_TRACE, "%a, update resource for %s ignored.
> Nothing changed\n", __func__, ConfigureLang));
> +      DEBUG ((DEBUG_MANAGEABILITY, "%a: update resource for %s ignored.
> Nothing changed\n", __func__, ConfigureLang));
> +      Status = EFI_SUCCESS;
>      } else {
> -      DEBUG ((DEBUG_ERROR, "%a, update resource for %s failed: %r\n",
> __func__, ConfigureLang, Status));
> +      DEBUG ((DEBUG_ERROR, "%a: update resource for %s failed: %r\n",
> + __func__, ConfigureLang, Status));
>      }
> 
>      goto ON_RELEASE;
>    }
> 
> -  DEBUG ((REDFISH_DEBUG_TRACE, "%a, update resource for %s\n", __func__,
> ConfigureLang));
>    //
> -  // PUT back to instance
> +  // Check and see if platform has OEM data or not
>    //
> -  Status = CreatePayloadToPatchResource (Private->RedfishService, Private-
> >Payload, Json, &EtagStr);
> -  if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, patch resource for %s failed: %r\n", __func__,
> ConfigureLang, Status));
> +  Status = RedfishGetOemData (
> +             Private->Uri,
> +             RESOURCE_SCHEMA,
> +             RESOURCE_SCHEMA_VERSION,
> +             Json,
> +             &JsonWithAddendum
> +             );
> +  if (!EFI_ERROR (Status) && (JsonWithAddendum != NULL)) {
> +    FreePool (Json);
> +    Json             = JsonWithAddendum;
> +    JsonWithAddendum = NULL;
>    }
> 
>    //
> -  // Handle Etag
> +  // Check and see if platform has addendum data or not
>    //
> -  if (EtagStr != NULL) {
> -    SetEtagWithUri (EtagStr, Private->Uri);
> -    FreePool (EtagStr);
> +  Status = RedfishGetAddendumData (
> +             Private->Uri,
> +             RESOURCE_SCHEMA,
> +             RESOURCE_SCHEMA_VERSION,
> +             Json,
> +             &JsonWithAddendum
> +             );
> +  if (!EFI_ERROR (Status) && (JsonWithAddendum != NULL)) {
> +    FreePool (Json);
> +    Json             = JsonWithAddendum;
> +    JsonWithAddendum = NULL;
> +  }
> +
> +  DEBUG ((REDFISH_DEBUG_TRACE, "%a: update resource for %s\n",
> + __func__, ConfigureLang));
> +
> +  //
> +  // PUT back to instance
> +  //
> +  Status = CreatePayloadToPatchResource (Private->RedfishService,
> + Private->Payload, Json, NULL);  if (EFI_ERROR (Status)) {
> +    DEBUG ((DEBUG_ERROR, "%a: patch resource for %s failed: %r\n",
> + __func__, ConfigureLang, Status));
>    }
> 
>  ON_RELEASE:
> @@ -1604,11 +1722,12 @@ RedfishIdentifyResourceCommon (
>    if (Supported) {
>      Status = RedfishFeatureGetUnifiedArrayTypeConfigureLang
> (RESOURCE_SCHEMA, RESOURCE_SCHEMA_VERSION,
> REDPATH_ARRAY_PATTERN, &ConfigLangList);
>      if (EFI_ERROR (Status)) {
> -      DEBUG ((DEBUG_ERROR, "%a,
> RedfishFeatureGetUnifiedArrayTypeConfigureLang failed: %r\n", __func__,
> Status));
> +      DEBUG ((DEBUG_ERROR, "%a:
> + RedfishFeatureGetUnifiedArrayTypeConfigureLang failed: %r\n",
> + __func__, Status));
>        return Status;
>      }
> 
>      if (ConfigLangList.Count == 0) {
> +      DEBUG ((DEBUG_MANAGEABILITY, "  No platform Redfish ConfigureLang
> + found for %s\n", __func__, Private->Uri));
>        return EFI_SUCCESS;
>      }
> 
> diff --git
> a/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystemDx
> e.c
> b/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystemDx
> e.c
> index 04ff5c8270..174a8176a8 100644
> ---
> a/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystemDx
> e.c
> +++
> b/RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystem
> +++ Dxe.c
> @@ -15,7 +15,7 @@ extern REDFISH_RESOURCE_COMMON_PRIVATE
> *mRedfishResourcePrivate;
>  extern EFI_HANDLE                       mRedfishResourceConfigProtocolHandle;
> 
>  /**
> -  Provisioning redfish resource by given URI.
> +  Provision redfish resource by given URI.
> 
>    @param[in]   This                Pointer to EFI_HP_REDFISH_HII_PROTOCOL
> instance.
>    @param[in]   Uri                 Target URI to create resource.
> @@ -42,7 +42,7 @@ RedfishResourceProvisioningResource (
>      return EFI_INVALID_PARAMETER;
>    }
> 
> -  DEBUG ((DEBUG_MANAGEABILITY, "%a, provisioning in %s mode\n", __func__,
> (PostMode ? L"POST" : L"PATCH")));
> +  DEBUG ((DEBUG_MANAGEABILITY, "%a: provisioning in %s mode\n",
> + __func__, (PostMode ? L"POST" : L"PATCH")));
> 
>    Private =
> REDFISH_RESOURCE_COMMON_PRIVATE_DATA_FROM_RESOURCE_PROTOCOL
> (This);
> 
> @@ -53,7 +53,7 @@ RedfishResourceProvisioningResource (
>    ZeroMem (&Response, sizeof (Response));
>    Status = RedfishHttpGetResource (Private->RedfishService, Uri, &Response,
> TRUE);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, get resource from: %s failed\n", __func__,
> Uri));
> +    DEBUG ((DEBUG_ERROR, "%a: get resource from: %s failed\n",
> + __func__, Uri));
>      return Status;
>    }
> 
> @@ -62,6 +62,14 @@ RedfishResourceProvisioningResource (
>    ASSERT (Private->Payload != NULL);
> 
>    Status = RedfishProvisioningResourceCommon (Private, !PostMode);
> +  if (EFI_ERROR (Status)) {
> +    DEBUG ((DEBUG_ERROR, "%a: failed to provision resource to: %s:
> + %r\n", __func__, Uri, Status));  } else {
> +    //
> +    // Get latest ETag on URI and keep it in variable.
> +    //
> +    SetEtagFromUri (Private->RedfishService, Private->Uri, TRUE);  }
> 
>    //
>    // Release resource
> @@ -73,7 +81,6 @@ RedfishResourceProvisioningResource (
>        Response.Headers,
>        Response.Payload
>        );
> -    RedfishHttpResetResource (Uri);
>      Private->Payload = NULL;
>    }
> 
> @@ -118,7 +125,7 @@ RedfishResourceConsumeResource (
>    ZeroMem (&Response, sizeof (Response));
>    Status = RedfishHttpGetResource (Private->RedfishService, Uri, &Response,
> TRUE);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, get resource from: %s failed\n", __func__,
> Uri));
> +    DEBUG ((DEBUG_ERROR, "%a: get resource from: %s failed\n",
> + __func__, Uri));
>      return Status;
>    }
> 
> @@ -137,6 +144,7 @@ RedfishResourceConsumeResource (
>      Private->Uri     = PendingSettingUri;
>      ExpectedResponse = &PendingSettingResponse;
>    } else {
> +    DEBUG ((REDFISH_DEBUG_TRACE, "%a: No @Redfish.Settings is found\n",
> + __func__));
>      Private->Uri     = Uri;
>      ExpectedResponse = &Response;
>    }
> @@ -154,16 +162,14 @@ RedfishResourceConsumeResource (
>    GetHttpResponseEtag (ExpectedResponse, &Etag);
>    Status = RedfishConsumeResourceCommon (Private, Private->Json, Etag);
>    if (EFI_ERROR (Status)) {
> -    if (Status != EFI_ALREADY_STARTED) {
> -      DEBUG ((DEBUG_ERROR, "%a, failed to consume resource from: %s: %r\n",
> __func__, Uri, Status));
> -    }
> -  } else {
> -    //
> -    // Keep etag after consuming pending settings.
> -    //
> -    if (Etag != NULL) {
> -      SetEtagWithUri (Etag, Private->Uri);
> -    }
> +    DEBUG ((DEBUG_ERROR, "%a: failed to consume resource from: %s:
> + %r\n", __func__, Private->Uri, Status));  }
> +
> +  //
> +  // Release resource
> +  //
> +  if (Etag != NULL) {
> +    FreePool (Etag);
>    }
> 
>    //
> @@ -196,10 +202,6 @@ RedfishResourceConsumeResource (
>      Private->Json = NULL;
>    }
> 
> -  if (Etag != NULL) {
> -    FreePool (Etag);
> -  }
> -
>    return Status;
>  }
> 
> @@ -269,7 +271,7 @@ RedfishResourceUpdate (
>    ZeroMem (&Response, sizeof (Response));
>    Status = RedfishHttpGetResource (Private->RedfishService, Uri, &Response,
> TRUE);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, get resource from: %s failed\n", __func__,
> Uri));
> +    DEBUG ((DEBUG_ERROR, "%a: get resource from: %s failed\n",
> + __func__, Uri));
>      return Status;
>    }
> 
> @@ -282,7 +284,12 @@ RedfishResourceUpdate (
> 
>    Status = RedfishUpdateResourceCommon (Private, Private->Json);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, failed to update resource from: %s: %r\n",
> __func__, Uri, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: failed to update resource to: %s: %r\n",
> + __func__, Uri, Status));  } else {
> +    //
> +    // Get latest ETag on URI and keep it in variable.
> +    //
> +    SetEtagFromUri (Private->RedfishService, Private->Uri, TRUE);
>    }
> 
>    //
> @@ -342,7 +349,7 @@ RedfishResourceCheck (
>    ZeroMem (&Response, sizeof (Response));
>    Status = RedfishHttpGetResource (Private->RedfishService, Uri, &Response,
> TRUE);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, get resource from: %s failed\n", __func__,
> Uri));
> +    DEBUG ((DEBUG_ERROR, "%a: get resource from: %s failed\n",
> + __func__, Uri));
>      return Status;
>    }
> 
> @@ -360,12 +367,16 @@ RedfishResourceCheck (
>    GetHttpResponseEtag (&Response, &Etag);
>    Status = RedfishCheckResourceCommon (Private, Private->Json, Etag);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, failed to check resource from: %s: %r\n",
> __func__, Uri, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: failed to check resource from: %s: %r\n",
> + __func__, Uri, Status));
>    }
> 
>    //
>    // Release resource
>    //
> +  if (Etag != NULL) {
> +    FreePool (Etag);
> +  }
> +
>    if (Private->Payload != NULL) {
>      RedfishFreeResponse (
>        Response.StatusCode,
> @@ -419,7 +430,7 @@ RedfishResourceIdentify (
>    ZeroMem (&Response, sizeof (Response));
>    Status = RedfishHttpGetResource (Private->RedfishService, Uri, &Response,
> TRUE);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, get resource from: %s failed\n", __func__,
> Uri));
> +    DEBUG ((DEBUG_ERROR, "%a: get resource from: %s failed\n",
> + __func__, Uri));
>      return Status;
>    }
> 
> @@ -432,7 +443,7 @@ RedfishResourceIdentify (
> 
>    Status = RedfishIdentifyResourceCommon (Private, Private->Json);
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, identify %s failed: %r\n", __func__, Uri,
> Status));
> +    DEBUG ((DEBUG_ERROR, "%a: identify %s failed: %r\n", __func__, Uri,
> + Status));
>    }
> 
>    //
> @@ -570,7 +581,7 @@ EfiRestJasonStructureProtocolIsReady (
>                    (VOID **)&mRedfishResourcePrivate->JsonStructProtocol
>                    );
>    if (EFI_ERROR (Status)) {
> -    DEBUG ((DEBUG_ERROR, "%a, failed to locate
> gEfiRestJsonStructureProtocolGuid: %r\n", __func__, Status));
> +    DEBUG ((DEBUG_ERROR, "%a: failed to locate
> + gEfiRestJsonStructureProtocolGuid: %r\n", __func__, Status));
>    }
> 
>    gBS->CloseEvent (Event);
> @@ -645,7 +656,6 @@ RedfishResourceUnload (
>    @param[in]   SystemTable      A pointer to the EFI System Table.
> 
>    @retval EFI_SUCCESS           The operation completed successfully.
> -  @retval EFI_ACCESS_DENIED     EFI_ISCSI_INITIATOR_NAME_PROTOCOL was
> installed unexpectedly.
>    @retval Others                Other errors as indicated.
>  **/
>  EFI_STATUS
> --
> 2.37.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114484): https://edk2.groups.io/g/devel/message/114484
Mute This Topic: https://groups.io/mt/103967793/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



      reply	other threads:[~2024-01-26  2:18 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-26  1:14 [edk2-devel] [edk2-redfish-client][PATCH] RedfishClientPkg/FeatureDriver: ComputerSystem_1_5_0 driver Chang, Abner via groups.io
2024-01-26  2:17 ` Nickle Wang via groups.io [this message]

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=MW4PR12MB7031A16806E688040C9ACFCFD9792@MW4PR12MB7031.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