From: "Chang, Abner" <abner.chang@amd.com>
To: Nickle Wang <nicklew@nvidia.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Igor Kulchytskyy <igork@ami.com>, Nick Ramirez <nramirez@nvidia.com>
Subject: Re: [edk2-staging][PATCH 2/3] edk2-staging/RedfishPkg: Introduce new interfaces to Redfish protocol
Date: Mon, 12 Dec 2022 02:44:24 +0000 [thread overview]
Message-ID: <MN2PR12MB396662C221F1E6C940A12304EAE29@MN2PR12MB3966.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20221207141007.170-1-nicklew@nvidia.com>
[AMD Official Use Only - General]
> -----Original Message-----
> From: Nickle Wang <nicklew@nvidia.com>
> Sent: Wednesday, December 7, 2022 10:10 PM
> To: devel@edk2.groups.io
> Cc: Chang, Abner <Abner.Chang@amd.com>; Igor Kulchytskyy
> <igork@ami.com>; Nick Ramirez <nramirez@nvidia.com>
> Subject: [edk2-staging][PATCH 2/3] edk2-staging/RedfishPkg: Introduce new
> interfaces to Redfish protocol
>
> Caution: This message originated from an External Source. Use proper
> caution when opening attachments, clicking links, or responding.
>
>
> Add two new iterfaces to Redfish Platform Config Protocol.
> GetAttribute() return attribute details and GetDefaultValue() get default
> value of attribute. These two interfaces are used to generate BIOS Attribute
> Registry
>
> Signed-off-by: Nickle Wang <nicklew@nvidia.com>
> Cc: Abner Chang <abner.chang@amd.com>
> Cc: Igor Kulchytskyy <igork@ami.com>
> Cc: Nick Ramirez <nramirez@nvidia.com>
> ---
> .../Protocol/EdkIIRedfishPlatformConfig.h | 105 +++
> .../RedfishPlatformConfigDxe.c | 625 ++++++++++++++----
> .../RedfishPlatformConfigDxe.h | 2 +
> .../RedfishPlatformConfigImpl.c | 55 +-
> .../RedfishPlatformConfigImpl.h | 44 +-
> 5 files changed, 705 insertions(+), 126 deletions(-)
Please assign the file order next time when format patch. You can refer to here:
https://github.com/tianocore/tianocore.github.io/wiki/Laszlo's-unkempt-git-guide-for-edk2-contributors-and-maintainers#contrib-10
Reviewed-by: Abner Chang <abner.chang@amd.com>
>
> diff --git a/RedfishPkg/Include/Protocol/EdkIIRedfishPlatformConfig.h
> b/RedfishPkg/Include/Protocol/EdkIIRedfishPlatformConfig.h
> index bbbab90b03..9be83b5e0b 100644
> --- a/RedfishPkg/Include/Protocol/EdkIIRedfishPlatformConfig.h
> +++ b/RedfishPkg/Include/Protocol/EdkIIRedfishPlatformConfig.h
> @@ -2,6 +2,7 @@
> This file defines the EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL
> interface.
>
> (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
> + Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -38,6 +39,18 @@ typedef enum {
> REDFISH_VALUE_TYPE_MAX
> } EDKII_REDFISH_VALUE_TYPES;
>
> +/**
> + Definition of EDKII_REDFISH_ATTRIBUTE_TYPES **/ typedef enum {
> + REDFISH_ATTRIBUTE_TYPE_UNKNOWN = 0,
> + REDFISH_ATTRIBUTE_TYPE_ENUMERATION,
> + REDFISH_ATTRIBUTE_TYPE_STRING,
> + REDFISH_ATTRIBUTE_TYPE_INTEGER,
> + REDFISH_ATTRIBUTE_TYPE_BOOLEAN,
> + REDFISH_ATTRIBUTE_TYPE_PASSWORD
> +} EDKII_REDFISH_ATTRIBUTE_TYPES;
> +
> /**
> Definition of EDKII_REDFISH_VALUE
> **/
> @@ -47,6 +60,41 @@ typedef struct {
> UINTN ArrayCount;
> } EDKII_REDFISH_VALUE;
>
> +/**
> + Definition of EDKII_REDFISH_ATTRIBUTE_VALUE **/ typedef struct {
> + CHAR8 *ValueName;
> + CHAR8 *ValueDisplayName;
> +} EDKII_REDFISH_ATTRIBUTE_VALUE;
> +
> +/**
> + Definition of EDKII_REDFISH_POSSIBLE_VALUES **/ typedef struct {
> + UINTN ValueCount;
> + EDKII_REDFISH_ATTRIBUTE_VALUE *ValueArray;
> +} EDKII_REDFISH_POSSIBLE_VALUES;
> +
> +/**
> + Definition of EDKII_REDFISH_ATTRIBUTE **/ typedef struct {
> + CHAR8 *AttributeName;
> + CHAR8 *DisplayName;
> + CHAR8 *HelpText;
> + CHAR8 *MenuPath;
> + EDKII_REDFISH_ATTRIBUTE_TYPES Type;
> + BOOLEAN ResetRequired;
> + BOOLEAN ReadOnly;
> + UINT64 NumMaximum;
> + UINT64 NumMinimum;
> + UINT64 NumStep;
> + UINT8 StrMaxSize;
> + UINT8 StrMinSize;
> + EDKII_REDFISH_POSSIBLE_VALUES Values;
> +} EDKII_REDFISH_ATTRIBUTE;
> +
> /**
> Get Redfish value with the given Schema and Configure Language.
>
> @@ -70,6 +118,37 @@ EFI_STATUS
> OUT EDKII_REDFISH_VALUE *Value
> );
>
> +//
> +// Default class standard
> +//
> +#define EDKII_REDFISH_DEFAULT_CLASS_STANDARD
> +EFI_HII_DEFAULT_CLASS_STANDARD
> +
> +/**
> + Get Redfish default value with the given Schema and Configure Language.
> +
> + @param[in] This Pointer to
> EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.
> + @param[in] Schema The Redfish schema to query.
> + @param[in] Version The Redfish version to query.
> + @param[in] ConfigureLang The target value which match this configure
> Language.
> + @param[in] DefaultClass The UEFI defined default class.
> + Please refer to UEFI spec. 33.2.5.8 "defaults" for details.
> + @param[out] Value The returned value.
> +
> + @retval EFI_SUCCESS Value is returned successfully.
> + @retval Others Some error happened.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EDKII_REDFISH_PLATFORM_CONFIG_GET_DEFAULT_VALUE)(
> + IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,
> + IN CHAR8 *Schema,
> + IN CHAR8 *Version,
> + IN EFI_STRING ConfigureLang,
> + IN UINT16 DefaultClass,
> + OUT EDKII_REDFISH_VALUE *Value
> + );
> +
> /**
> Set Redfish value with the given Schema and Configure Language.
>
> @@ -93,6 +172,29 @@ EFI_STATUS
> IN EDKII_REDFISH_VALUE Value
> );
>
> +/**
> + Get Redfish attribute value with the given Schema and Configure Language.
> +
> + @param[in] This Pointer to
> EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.
> + @param[in] Schema The Redfish schema to query.
> + @param[in] Version The Redfish version to query.
> + @param[in] ConfigureLang The target value which match this configure
> Language.
> + @param[out] AttributeValue The attribute value.
> +
> + @retval EFI_SUCCESS Value is returned successfully.
> + @retval Others Some error happened.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EDKII_REDFISH_PLATFORM_CONFIG_GET_ATTRIBUTE)(
> + IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,
> + IN CHAR8 *Schema,
> + IN CHAR8 *Version,
> + IN EFI_STRING ConfigureLang,
> + OUT EDKII_REDFISH_ATTRIBUTE *AttributeValue
> + );
> +
> /**
> Get the list of Configure Language from platform configuration by the given
> Schema and RegexPattern.
>
> @@ -143,8 +245,11 @@ EFI_STATUS
> );
>
> struct _EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL {
> + UINT64 Revision;
> EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE GetValue;
> EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE SetValue;
> + EDKII_REDFISH_PLATFORM_CONFIG_GET_DEFAULT_VALUE
> GetDefaultValue;
> + EDKII_REDFISH_PLATFORM_CONFIG_GET_ATTRIBUTE GetAttribute;
> EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG
> GetConfigureLang;
> EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA
> GetSupportedSchema; }; diff --git
> a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c
> b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c
> index 971035f27d..96b50b201c 100644
> --- a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c
> +++ b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c
> @@ -3,6 +3,7 @@
> The implementation of EDKII Redfidh Platform Config Protocol.
>
> (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
> + Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -13,6 +14,182 @@
>
> REDFISH_PLATFORM_CONFIG_PRIVATE *mRedfishPlatformConfigPrivate =
> NULL;
>
> +/**
> + Get the attribute name from config language.
> +
> + For example: /Bios/Attributes/BiosOption1 is config laugnage and
> + attribute name is BiosOption1.
> +
> + @param[in] ConfigLanguage Config language string.
> +
> + @retval CHAR8 * Attribute name string.
> + @retval NULL Can not find attribute name.
> +
> +**/
> +CHAR8 *
> +GetAttributeNameFromConfigLanguage (
> + IN CHAR8 *ConfigLanguage
> + )
> +{
> + CHAR8 *attributeName;
> + CHAR8 *Pointer;
> + UINTN StrLen;
> + UINTN Index;
> + UINTN AttrStrLen;
> +
> + if (IS_EMPTY_STRING (ConfigLanguage)) {
> + return NULL;
> + }
> +
> + attributeName = NULL;
> + Pointer = NULL;
> + AttrStrLen = 0;
> + StrLen = AsciiStrLen (ConfigLanguage);
> +
> + if (ConfigLanguage[StrLen - 1] == '/') {
> + //
> + // wrong format
> + //
> + DEBUG ((DEBUG_ERROR, "%a, invalid format: %a\n", __FUNCTION__,
> ConfigLanguage));
> + ASSERT (FALSE);
> + return NULL;
> + }
> +
> + Index = StrLen;
> + while (TRUE) {
> + Index -= 1;
> +
> + if (ConfigLanguage[Index] == '/') {
> + Pointer = &ConfigLanguage[Index + 1];
> + break;
> + }
> +
> + if (Index == 0) {
> + break;
> + }
> + }
> +
> + //
> + // Not found. There is no '/' in input string.
> + //
> + if (Pointer == NULL) {
> + return NULL;
> + }
> +
> + AttrStrLen = StrLen - Index;
> + attributeName = AllocateCopyPool (AttrStrLen, Pointer);
> +
> + return attributeName;
> +}
> +
> +/**
> + Convert one-of options to string array in Redfish attribute.
> +
> + @param[in] HiiHandle HII handle.
> + @param[in] SchemaName Schema string.
> + @param[in] HiiStatement Target HII statement.
> + @param[out] Values Attribute value array.
> +
> + @retval EFI_SUCCESS Options are converted successfully.
> + @retval Other Error occurs.
> +
> +**/
> +EFI_STATUS
> +OneOfStatementToAttributeValues (
> + IN EFI_HII_HANDLE HiiHandle,
> + IN CHAR8 *SchemaName,
> + IN HII_STATEMENT *HiiStatement,
> + OUT EDKII_REDFISH_POSSIBLE_VALUES *Values
> + )
> +{
> + LIST_ENTRY *Link;
> + HII_QUESTION_OPTION *Option;
> + UINTN Index;
> +
> + if ((HiiHandle == NULL) || (HiiStatement == NULL) || (Values == NULL)) {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + if (IsListEmpty (&HiiStatement->OptionListHead)) {
> + return EFI_NOT_FOUND;
> + }
> +
> + //
> + // Loop through the option to get count // Values->ValueCount = 0;
> + Link = GetFirstNode (&HiiStatement->OptionListHead);
> + while (!IsNull (&HiiStatement->OptionListHead, Link)) {
> + Values->ValueCount += 1;
> + Link = GetNextNode (&HiiStatement->OptionListHead, Link);
> + }
> +
> + Values->ValueArray = AllocateZeroPool (sizeof
> + (EDKII_REDFISH_ATTRIBUTE_VALUE) * Values->ValueCount); if (Values-
> >ValueArray == NULL) {
> + Values->ValueCount = 0;
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + Index = 0;
> + Link = GetFirstNode (&HiiStatement->OptionListHead); while (!IsNull
> + (&HiiStatement->OptionListHead, Link)) {
> + Option = HII_QUESTION_OPTION_FROM_LINK (Link);
> +
> + if (Option->Text != 0) {
> + Values->ValueArray[Index].ValueName = HiiGetRedfishAsciiString
> (HiiHandle, SchemaName, Option->Text);
> + Values->ValueArray[Index].ValueName = HiiGetEnglishAsciiString
> (HiiHandle, Option->Text);
> + }
> +
> + Index += 1;
> + Link = GetNextNode (&HiiStatement->OptionListHead, Link);
> + }
> +
> + return EFI_SUCCESS;
> +}
> +
> +/**
> + Return Redfish attribute type from given HII statment operand.
> +
> + @param[in] HiiStatement Target HII statement.
> +
> + @retval EDKII_REDFISH_ATTRIBUTE_TYPES Attribute type.
> +
> +**/
> +EDKII_REDFISH_ATTRIBUTE_TYPES
> +HiiStatementToAttributeType (
> + IN HII_STATEMENT *HiiStatement
> + )
> +{
> + EDKII_REDFISH_ATTRIBUTE_TYPES type;
> +
> + if (HiiStatement == NULL) {
> + return REDFISH_ATTRIBUTE_TYPE_UNKNOWN; }
> +
> + type = REDFISH_ATTRIBUTE_TYPE_UNKNOWN; switch
> + (HiiStatement->Operand) {
> + case EFI_IFR_ONE_OF_OP:
> + case EFI_IFR_ORDERED_LIST_OP:
> + type = REDFISH_ATTRIBUTE_TYPE_ENUMERATION;
> + break;
> + case EFI_IFR_STRING_OP:
> + type = REDFISH_ATTRIBUTE_TYPE_STRING;
> + break;
> + case EFI_IFR_NUMERIC_OP:
> + type = REDFISH_ATTRIBUTE_TYPE_INTEGER;
> + break;
> + case EFI_IFR_CHECKBOX_OP:
> + type = REDFISH_ATTRIBUTE_TYPE_BOOLEAN;
> + break;
> + case EFI_IFR_DATE_OP:
> + case EFI_IFR_TIME_OP:
> + default:
> + DEBUG ((DEBUG_ERROR, "%a, unsupported operand: 0x%x\n",
> __FUNCTION__, HiiStatement->Operand));
> + break;
> + }
> +
> + return type;
> +}
>
> /**
> Zero extend integer/boolean to UINT64 for comparing.
> @@ -264,7 +441,8 @@ CompareHiiStatementValue (
> /**
> Convert HII value to the string in HII one-of opcode.
>
> - @param[in] Statement Statement private instance
> + @param[in] HiiStatement HII Statement private instance
> + @param[in] Value HII Statement value
>
> @retval EFI_STRING_ID The string ID in HII database.
> 0 is returned when something goes wrong.
> @@ -272,29 +450,34 @@ CompareHiiStatementValue ( **/ EFI_STRING_ID
> HiiValueToOneOfOptionStringId (
> - IN REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE *Statement
> + IN HII_STATEMENT *HiiStatement,
> + IN HII_STATEMENT_VALUE *Value
> )
> {
> LIST_ENTRY *Link;
> HII_QUESTION_OPTION *Option;
>
> - if (Statement->HiiStatement->Operand != EFI_IFR_ONE_OF_OP) {
> + if ((HiiStatement == NULL) || (Value == NULL)) {
> return 0;
> }
>
> - if (IsListEmpty (&Statement->HiiStatement->OptionListHead)) {
> + if (HiiStatement->Operand != EFI_IFR_ONE_OF_OP) {
> return 0;
> }
>
> - Link = GetFirstNode (&Statement->HiiStatement->OptionListHead);
> - while (!IsNull (&Statement->HiiStatement->OptionListHead, Link)) {
> + if (IsListEmpty (&HiiStatement->OptionListHead)) {
> + return 0;
> + }
> +
> + Link = GetFirstNode (&HiiStatement->OptionListHead); while (!IsNull
> + (&HiiStatement->OptionListHead, Link)) {
> Option = HII_QUESTION_OPTION_FROM_LINK (Link);
>
> - if (CompareHiiStatementValue (&Statement->HiiStatement->Value,
> &Option->Value) == 0) {
> + if (CompareHiiStatementValue (Value, &Option->Value) == 0) {
> return Option->Text;
> }
>
> - Link = GetNextNode (&Statement->HiiStatement->OptionListHead, Link);
> + Link = GetNextNode (&HiiStatement->OptionListHead, Link);
> }
>
> return 0;
> @@ -531,7 +714,7 @@ DumpOrderedListValue (
> Convert HII value to the string in HII ordered list opcode. It's caller's
> responsibility to free returned buffer using FreePool().
>
> - @param[in] Statement Statement private instance
> + @param[in] HiiStatement HII Statement private instance
> @param[out] ReturnSize The size of returned array
>
> @retval EFI_STRING_ID The string ID array for options in ordered list.
> @@ -539,8 +722,8 @@ DumpOrderedListValue ( **/ EFI_STRING_ID *
> HiiValueToOrderedListOptionStringId (
> - IN REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE *Statement,
> - OUT UINTN *ReturnSize
> + IN HII_STATEMENT *HiiStatement,
> + OUT UINTN *ReturnSize
> )
> {
> LIST_ENTRY *Link;
> @@ -550,32 +733,32 @@ HiiValueToOrderedListOptionStringId (
> UINTN Index;
> UINT64 Value;
>
> - if (Statement == NULL || ReturnSize == NULL) {
> + if ((HiiStatement == NULL) || (ReturnSize == NULL)) {
> return NULL;
> }
>
> *ReturnSize = 0;
>
> - if (Statement->HiiStatement->Operand != EFI_IFR_ORDERED_LIST_OP) {
> + if (HiiStatement->Operand != EFI_IFR_ORDERED_LIST_OP) {
> return NULL;
> }
>
> - if (IsListEmpty (&Statement->HiiStatement->OptionListHead)) {
> + if (IsListEmpty (&HiiStatement->OptionListHead)) {
> return NULL;
> }
>
> DEBUG_CODE (
> - DumpOrderedListValue (Statement->HiiStatement);
> - );
> + DumpOrderedListValue (HiiStatement);
> + );
>
> OptionCount = 0;
> - Link = GetFirstNode (&Statement->HiiStatement->OptionListHead);
> - while (!IsNull (&Statement->HiiStatement->OptionListHead, Link)) {
> + Link = GetFirstNode (&HiiStatement->OptionListHead);
> + while (!IsNull (&HiiStatement->OptionListHead, Link)) {
> Option = HII_QUESTION_OPTION_FROM_LINK (Link);
>
> ++OptionCount;
>
> - Link = GetNextNode (&Statement->HiiStatement->OptionListHead, Link);
> + Link = GetNextNode (&HiiStatement->OptionListHead, Link);
> }
>
> *ReturnSize = OptionCount;
> @@ -587,8 +770,8 @@ HiiValueToOrderedListOptionStringId (
> }
>
> for (Index = 0; Index < OptionCount; Index++) {
> - Value = OrderedListGetArrayData (Statement->HiiStatement-
> >Value.Buffer, Statement->HiiStatement->Value.BufferValueType, Index);
> - ReturnedArray[Index] = OrderedListOptionValueToStringId (Statement-
> >HiiStatement, Value);
> + Value = OrderedListGetArrayData (HiiStatement->Value.Buffer,
> HiiStatement->Value.BufferValueType, Index);
> + ReturnedArray[Index] = OrderedListOptionValueToStringId
> + (HiiStatement, Value);
> }
>
> return ReturnedArray;
> @@ -657,6 +840,126 @@ HiiStringToOrderedListOptionValue (
> return EFI_NOT_FOUND;
> }
>
> +/**
> + Convert HII value to Redfish value.
> +
> + @param[in] HiiHandle HII handle.
> + @param[in] FullSchema Schema string.
> + @param[in] HiiStatement HII statement.
> + @param[in] Value Value to be converted.
> + @param[out] RedfishValue Value in Redfish format.
> +
> + @retval EFI_SUCCESS Redfish value is returned successfully.
> + @retval Others Errors occur
> +
> +**/
> +EFI_STATUS
> +HiiValueToRedfishValue (
> + IN EFI_HII_HANDLE HiiHandle,
> + IN CHAR8 *FullSchema,
> + IN HII_STATEMENT *HiiStatement,
> + IN HII_STATEMENT_VALUE *Value,
> + OUT EDKII_REDFISH_VALUE *RedfishValue
> + )
> +{
> + EFI_STATUS Status;
> + EFI_STRING_ID StringId;
> + UINTN Index;
> + UINTN Count;
> + EFI_STRING_ID *StringIdArray;
> +
> + if ((HiiHandle == NULL) || (HiiStatement == NULL) || (Value == NULL) ||
> (RedfishValue == NULL) || IS_EMPTY_STRING (FullSchema)) {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + StringIdArray = NULL;
> + Count = 0;
> +
> + switch (HiiStatement->Operand) {
> + case EFI_IFR_ONE_OF_OP:
> + StringId = HiiValueToOneOfOptionStringId (HiiStatement, Value);
> + if (StringId == 0) {
> + ASSERT (FALSE);
> + Status = EFI_DEVICE_ERROR;
> + break;
> + }
> +
> + RedfishValue->Value.Buffer = HiiGetRedfishAsciiString (HiiHandle,
> FullSchema, StringId);
> + if (RedfishValue->Value.Buffer == NULL) {
> + Status = EFI_OUT_OF_RESOURCES;
> + break;
> + }
> +
> + RedfishValue->Type = REDFISH_VALUE_TYPE_STRING;
> + break;
> + case EFI_IFR_STRING_OP:
> + if (Value->Type != EFI_IFR_TYPE_STRING) {
> + ASSERT (FALSE);
> + Status = EFI_DEVICE_ERROR;
> + break;
> + }
> +
> + RedfishValue->Type = REDFISH_VALUE_TYPE_STRING;
> + RedfishValue->Value.Buffer = AllocatePool (StrLen ((CHAR16 *)Value-
> >Buffer) + 1);
> + UnicodeStrToAsciiStrS ((CHAR16 *)Value->Buffer, RedfishValue-
> >Value.Buffer, StrLen ((CHAR16 *)Value->Buffer) + 1);
> + break;
> + case EFI_IFR_CHECKBOX_OP:
> + case EFI_IFR_NUMERIC_OP:
> + Status = HiiValueToRedfishNumeric (Value, RedfishValue);
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "%a, failed to convert HII value to Redfish
> value: %r\n", __FUNCTION__, Status));
> + break;
> + }
> +
> + break;
> + case EFI_IFR_ACTION_OP:
> + if (Value->Type != EFI_IFR_TYPE_ACTION) {
> + ASSERT (FALSE);
> + Status = EFI_DEVICE_ERROR;
> + break;
> + }
> +
> + //
> + // Action has no value. Just return unknown type.
> + //
> + RedfishValue->Type = REDFISH_VALUE_TYPE_UNKNOWN;
> + break;
> + case EFI_IFR_ORDERED_LIST_OP:
> + StringIdArray = HiiValueToOrderedListOptionStringId (HiiStatement,
> &Count);
> + if (StringIdArray == NULL) {
> + ASSERT (FALSE);
> + Status = EFI_DEVICE_ERROR;
> + break;
> + }
> +
> + RedfishValue->Value.StringArray = AllocatePool (sizeof (CHAR8 *) *
> Count);
> + if (RedfishValue->Value.StringArray == NULL) {
> + ASSERT (FALSE);
> + Status = EFI_OUT_OF_RESOURCES;
> + break;
> + }
> +
> + for (Index = 0; Index < Count; Index++) {
> + ASSERT (StringIdArray[Index] != 0);
> + RedfishValue->Value.StringArray[Index] = HiiGetRedfishAsciiString
> (HiiHandle, FullSchema, StringIdArray[Index]);
> + ASSERT (RedfishValue->Value.StringArray[Index] != NULL);
> + }
> +
> + RedfishValue->ArrayCount = Count;
> + RedfishValue->Type = REDFISH_VALUE_TYPE_STRING_ARRAY;
> +
> + FreePool (StringIdArray);
> + break;
> + default:
> + DEBUG ((DEBUG_ERROR, "%a, catch unsupported type: 0x%x! Please
> contact with author if we need to support this type.\n", __FUNCTION__,
> HiiStatement->Operand));
> + ASSERT (FALSE);
> + Status = EFI_UNSUPPORTED;
> + break;
> + }
> +
> + return Status;
> +}
> +
> /**
> Convert input ascii string to unicode string. It's caller's
> responsibility to free returned buffer using FreePool().
> @@ -825,12 +1128,7 @@ RedfishPlatformConfigProtocolGetValue (
> EFI_STATUS Status;
> REDFISH_PLATFORM_CONFIG_PRIVATE
> *RedfishPlatformConfigPrivate;
> REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE *TargetStatement;
> - EFI_STRING_ID StringId;
> - EFI_STRING_ID *StringIdArray;
> CHAR8 *FullSchema;
> - EFI_STRING HiiString;
> - UINTN Count;
> - UINTN Index;
>
> if (This == NULL || IS_EMPTY_STRING (Schema) || IS_EMPTY_STRING
> (Version) || IS_EMPTY_STRING (ConfigureLang) || Value == NULL) {
> return EFI_INVALID_PARAMETER;
> @@ -839,10 +1137,7 @@ RedfishPlatformConfigProtocolGetValue (
> RedfishPlatformConfigPrivate =
> REDFISH_PLATFORM_CONFIG_PRIVATE_FROM_THIS (This);
> Value->Type = REDFISH_VALUE_TYPE_UNKNOWN;
> Value->ArrayCount = 0;
> - Count = 0;
> FullSchema = NULL;
> - HiiString = NULL;
> - StringIdArray = NULL;
>
> FullSchema = GetFullSchemaString (Schema, Version);
> if (FullSchema == NULL) {
> @@ -854,82 +1149,15 @@ RedfishPlatformConfigProtocolGetValue (
> goto RELEASE_RESOURCE;
> }
>
> - switch (TargetStatement->HiiStatement->Operand) {
> - case EFI_IFR_ONE_OF_OP:
> - StringId = HiiValueToOneOfOptionStringId (TargetStatement);
> - if (StringId == 0) {
> - ASSERT (FALSE);
> - Status = EFI_DEVICE_ERROR;
> - goto RELEASE_RESOURCE;
> - }
> -
> - Value->Value.Buffer = HiiGetRedfishAsciiString (TargetStatement-
> >ParentForm->ParentFormset->HiiHandle, FullSchema, StringId);
> - if (Value->Value.Buffer == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto RELEASE_RESOURCE;
> - }
> -
> - Value->Type = REDFISH_VALUE_TYPE_STRING;
> - break;
> - case EFI_IFR_STRING_OP:
> - if (TargetStatement->HiiStatement->Value.Type !=
> EFI_IFR_TYPE_STRING) {
> - ASSERT (FALSE);
> - Status = EFI_DEVICE_ERROR;
> - goto RELEASE_RESOURCE;
> - }
> -
> - Value->Type = REDFISH_VALUE_TYPE_STRING;
> - Value->Value.Buffer = AllocatePool (StrLen ((CHAR16
> *)TargetStatement->HiiStatement->Value.Buffer) + 1);
> - UnicodeStrToAsciiStrS ((CHAR16 *)TargetStatement->HiiStatement-
> >Value.Buffer, Value->Value.Buffer, StrLen ((CHAR16 *)TargetStatement-
> >HiiStatement->Value.Buffer) + 1);
> - break;
> - case EFI_IFR_CHECKBOX_OP:
> - case EFI_IFR_NUMERIC_OP:
> - Status = HiiValueToRedfishNumeric (&TargetStatement->HiiStatement-
> >Value, Value);
> - if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to convert HII value to Redfish
> value: %r\n", __FUNCTION__, Status));
> - goto RELEASE_RESOURCE;
> - }
> - break;
> - case EFI_IFR_ACTION_OP:
> - if (TargetStatement->HiiStatement->Value.Type !=
> EFI_IFR_TYPE_ACTION) {
> - ASSERT (FALSE);
> - Status = EFI_DEVICE_ERROR;
> - goto RELEASE_RESOURCE;
> - }
> -
> - //
> - // Action has no value. Just return unknown type.
> - //
> - Value->Type = REDFISH_VALUE_TYPE_UNKNOWN;
> - break;
> - case EFI_IFR_ORDERED_LIST_OP:
> - StringIdArray = HiiValueToOrderedListOptionStringId (TargetStatement,
> &Count);
> - if (StringIdArray == NULL) {
> - ASSERT (FALSE);
> - Status = EFI_DEVICE_ERROR;
> - goto RELEASE_RESOURCE;
> - }
> -
> - Value->Value.StringArray = AllocatePool (sizeof (CHAR8 *) * Count);
> - if (Value->Value.StringArray == NULL) {
> - ASSERT (FALSE);
> - Status = EFI_OUT_OF_RESOURCES;
> - goto RELEASE_RESOURCE;
> - }
> -
> - for (Index = 0; Index < Count; Index++) {
> - ASSERT (StringIdArray[Index] != 0);
> - Value->Value.StringArray[Index] = HiiGetRedfishAsciiString
> (TargetStatement->ParentForm->ParentFormset->HiiHandle, FullSchema,
> StringIdArray[Index]);
> - }
> -
> - Value->ArrayCount = Count;
> - Value->Type = REDFISH_VALUE_TYPE_STRING_ARRAY;
> - break;
> - default:
> - DEBUG ((DEBUG_ERROR, "%a, catch unsupported type: 0x%x! Please
> contact with author if we need to support this type.\n", __FUNCTION__,
> TargetStatement->HiiStatement->Operand));
> - ASSERT (FALSE);
> - Status = EFI_UNSUPPORTED;
> - goto RELEASE_RESOURCE;
> + Status = HiiValueToRedfishValue (
> + TargetStatement->ParentForm->ParentFormset->HiiHandle,
> + FullSchema,
> + TargetStatement->HiiStatement,
> + &TargetStatement->HiiStatement->Value,
> + Value
> + );
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "%a, HiiValueToRedfishValue failed: %r\n",
> + __FUNCTION__, Status));
> }
>
> RELEASE_RESOURCE:
> @@ -938,14 +1166,6 @@ RELEASE_RESOURCE:
> FreePool (FullSchema);
> }
>
> - if (HiiString != NULL) {
> - FreePool (HiiString);
> - }
> -
> - if (StringIdArray != NULL) {
> - FreePool (StringIdArray);
> - }
> -
> return Status;
> }
>
> @@ -1433,6 +1653,176 @@
> RedfishPlatformConfigProtocolGetSupportedSchema (
> return EFI_SUCCESS;
> }
>
> +/**
> + Get Redfish default value with the given Schema and Configure Language.
> +
> + @param[in] This Pointer to
> EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.
> + @param[in] Schema The Redfish schema to query.
> + @param[in] Version The Redfish version to query.
> + @param[in] ConfigureLang The target value which match this configure
> Language.
> + @param[in] DefaultClass The UEFI defined default class.
> + Please refer to UEFI spec. 33.2.5.8 "defaults" for details.
> + @param[out] Value The returned value.
> +
> + @retval EFI_SUCCESS Value is returned successfully.
> + @retval Others Some error happened.
> +
> +**/
> +EFI_STATUS
> +RedfishPlatformConfigProtocolGetDefaultValue (
> + IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,
> + IN CHAR8 *Schema,
> + IN CHAR8 *Version,
> + IN EFI_STRING ConfigureLang,
> + IN UINT16 DefaultClass,
> + OUT EDKII_REDFISH_VALUE *Value
> + )
> +{
> + EFI_STATUS Status;
> + REDFISH_PLATFORM_CONFIG_PRIVATE
> *RedfishPlatformConfigPrivate;
> + REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE *TargetStatement;
> + CHAR8 *FullSchema;
> + HII_STATEMENT_VALUE DefaultValue;
> +
> + if ((This == NULL) || IS_EMPTY_STRING (Schema) || IS_EMPTY_STRING
> (Version) || IS_EMPTY_STRING (ConfigureLang) || (Value == NULL)) {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + RedfishPlatformConfigPrivate =
> REDFISH_PLATFORM_CONFIG_PRIVATE_FROM_THIS (This);
> + Value->Type = REDFISH_VALUE_TYPE_UNKNOWN;
> + Value->ArrayCount = 0;
> +
> + FullSchema = NULL;
> + FullSchema = GetFullSchemaString (Schema, Version); if (FullSchema
> + == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + Status = RedfishPlatformConfigGetStatementCommon
> + (RedfishPlatformConfigPrivate, FullSchema, ConfigureLang,
> &TargetStatement); if (EFI_ERROR (Status)) {
> + goto RELEASE_RESOURCE;
> + }
> +
> + Status = GetQuestionDefault
> + (TargetStatement->ParentForm->ParentFormset->HiiFormSet,
> TargetStatement->ParentForm->HiiForm, TargetStatement->HiiStatement,
> DefaultClass, &DefaultValue); if (EFI_ERROR (Status)) {
> + goto RELEASE_RESOURCE;
> + }
> +
> + Status = HiiValueToRedfishValue (
> + TargetStatement->ParentForm->ParentFormset->HiiHandle,
> + FullSchema,
> + TargetStatement->HiiStatement,
> + &DefaultValue,
> + Value
> + );
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "%a, HiiValueToRedfishValue failed: %r\n",
> + __FUNCTION__, Status)); }
> +
> +RELEASE_RESOURCE:
> +
> + if (FullSchema != NULL) {
> + FreePool (FullSchema);
> + }
> +
> + return Status;
> +}
> +
> +/**
> + Get Redfish attribute value with the given Schema and Configure Language.
> +
> + @param[in] This Pointer to
> EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.
> + @param[in] Schema The Redfish schema to query.
> + @param[in] Version The Redfish version to query.
> + @param[in] ConfigureLang The target value which match this configure
> Language.
> + @param[out] AttributeValue The attribute value.
> +
> + @retval EFI_SUCCESS Value is returned successfully.
> + @retval Others Some error happened.
> +
> +**/
> +EFI_STATUS
> +RedfishPlatformConfigProtocolGetAttribute (
> + IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,
> + IN CHAR8 *Schema,
> + IN CHAR8 *Version,
> + IN EFI_STRING ConfigureLang,
> + OUT EDKII_REDFISH_ATTRIBUTE *AttributeValue
> + )
> +{
> + EFI_STATUS Status;
> + REDFISH_PLATFORM_CONFIG_PRIVATE
> *RedfishPlatformConfigPrivate;
> + REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE *TargetStatement;
> + CHAR8 *FullSchema;
> + CHAR8 *Buffer;
> +
> + if ((This == NULL) || IS_EMPTY_STRING (Schema) || IS_EMPTY_STRING
> (Version) || IS_EMPTY_STRING (ConfigureLang) || (AttributeValue == NULL))
> {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + RedfishPlatformConfigPrivate =
> + REDFISH_PLATFORM_CONFIG_PRIVATE_FROM_THIS (This); ZeroMem
> + (AttributeValue, sizeof (EDKII_REDFISH_ATTRIBUTE)); FullSchema =
> + NULL; FullSchema = GetFullSchemaString (Schema, Version); if
> + (FullSchema == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + Status = RedfishPlatformConfigGetStatementCommon
> + (RedfishPlatformConfigPrivate, FullSchema, ConfigureLang,
> &TargetStatement); if (EFI_ERROR (Status)) {
> + goto RELEASE_RESOURCE;
> + }
> +
> + if (TargetStatement->Description != 0) {
> + AttributeValue->AttributeName = HiiGetRedfishAsciiString
> (TargetStatement->ParentForm->ParentFormset->HiiHandle, FullSchema,
> TargetStatement->Description);
> + Buffer = GetAttributeNameFromConfigLanguage
> (AttributeValue->AttributeName);
> + if (Buffer != NULL) {
> + FreePool (AttributeValue->AttributeName);
> + AttributeValue->AttributeName = Buffer;
> + }
> +
> + AttributeValue->DisplayName = HiiGetEnglishAsciiString
> + (TargetStatement->ParentForm->ParentFormset->HiiHandle,
> + TargetStatement->Description); }
> +
> + if (TargetStatement->Help != 0) {
> + AttributeValue->HelpText = HiiGetEnglishAsciiString
> + (TargetStatement->ParentForm->ParentFormset->HiiHandle,
> + TargetStatement->Help); }
> +
> + AttributeValue->ReadOnly = ((TargetStatement->Flags &
> EFI_IFR_FLAG_READ_ONLY) == 0 ? FALSE : TRUE);
> + AttributeValue->ResetRequired = ((TargetStatement->Flags &
> EFI_IFR_FLAG_RESET_REQUIRED) == 0 ? FALSE : TRUE);
> + AttributeValue->Type = HiiStatementToAttributeType
> (TargetStatement->HiiStatement);
> +
> + //
> + // Deal with maximum and minimum
> + //
> + if (AttributeValue->Type == REDFISH_ATTRIBUTE_TYPE_STRING) {
> + AttributeValue->StrMaxSize = TargetStatement-
> >StatementData.StrMaxSize;
> + AttributeValue->StrMinSize =
> + TargetStatement->StatementData.StrMinSize;
> + } else if (AttributeValue->Type == REDFISH_ATTRIBUTE_TYPE_INTEGER) {
> + AttributeValue->NumMaximum = TargetStatement-
> >StatementData.NumMaximum;
> + AttributeValue->NumMinimum = TargetStatement-
> >StatementData.NumMinimum;
> + AttributeValue->NumStep = TargetStatement-
> >StatementData.NumStep;
> + }
> +
> + //
> + // Provide value array if this is enumeration type.
> + //
> + if (TargetStatement->HiiStatement->Operand == EFI_IFR_ONE_OF_OP) {
> + Status = OneOfStatementToAttributeValues (TargetStatement-
> >ParentForm->ParentFormset->HiiHandle, FullSchema, TargetStatement-
> >HiiStatement, &AttributeValue->Values);
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "%a, failed to convert one-of options to
> attribute values: %r\n", __FUNCTION__, Status));
> + }
> + }
> +
> +RELEASE_RESOURCE:
> +
> + if (FullSchema != NULL) {
> + FreePool (FullSchema);
> + }
> +
> + return Status;
> +}
> +
> /**
> Functions which are registered to receive notification of
> database events have this prototype. The actual event is encoded @@ -
> 1715,10 +2105,13 @@ RedfishPlatformConfigDxeEntryPoint (
> // Protocol initialization
> //
> mRedfishPlatformConfigPrivate->ImageHandle = ImageHandle;
> - mRedfishPlatformConfigPrivate->Protocol.GetValue =
> RedfishPlatformConfigProtocolGetValue;
> - mRedfishPlatformConfigPrivate->Protocol.SetValue =
> RedfishPlatformConfigProtocolSetValue;
> - mRedfishPlatformConfigPrivate->Protocol.GetConfigureLang =
> RedfishPlatformConfigProtocolGetConfigureLang;
> + mRedfishPlatformConfigPrivate->Protocol.Revision =
> REDFISH_PLATFORM_CONFIG_VERSION;
> + mRedfishPlatformConfigPrivate->Protocol.GetValue =
> RedfishPlatformConfigProtocolGetValue;
> + mRedfishPlatformConfigPrivate->Protocol.SetValue =
> RedfishPlatformConfigProtocolSetValue;
> + mRedfishPlatformConfigPrivate->Protocol.GetConfigureLang =
> RedfishPlatformConfigProtocolGetConfigureLang;
> mRedfishPlatformConfigPrivate->Protocol.GetSupportedSchema =
> RedfishPlatformConfigProtocolGetSupportedSchema;
> + mRedfishPlatformConfigPrivate->Protocol.GetAttribute =
> RedfishPlatformConfigProtocolGetAttribute;
> + mRedfishPlatformConfigPrivate->Protocol.GetDefaultValue =
> RedfishPlatformConfigProtocolGetDefaultValue;
>
> InitializeListHead (&mRedfishPlatformConfigPrivate->FormsetList);
> InitializeListHead (&mRedfishPlatformConfigPrivate->PendingList);
> diff --git
> a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h
> b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h
> index d3f7af55ad..8155484702 100644
> --- a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h
> +++ b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h
> @@ -2,6 +2,7 @@
> This file defines the EDKII Redfish Platform Config Protocol interface.
>
> (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> + Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -60,5 +61,6 @@ typedef struct {
> #define REDFISH_PLATFORM_CONFIG_PRIVATE_FROM_THIS(a) BASE_CR
> (a, REDFISH_PLATFORM_CONFIG_PRIVATE, Protocol)
> #define REGULAR_EXPRESSION_INCLUDE_ALL L".*"
> #define CONFIGURE_LANGUAGE_PREFIX "x-uefi-redfish-"
> +#define REDFISH_PLATFORM_CONFIG_VERSION 0x00010000
>
> #endif
> diff --git
> a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c
> b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c
> index b2bb5f64e4..65a0e5766a 100644
> --- a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c
> +++ b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c
> @@ -3,6 +3,7 @@
> The implementation of EDKII Redfish Platform Config Protocol.
>
> (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
> + Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -300,6 +301,45 @@ HiiGetEnglishString (
> return HiiGetRedfishString (HiiHandle, ENGLISH_LANGUAGE_CODE,
> StringId); }
>
> +/**
> + Get ASCII string from HII database in English language.
> +
> + @param[in] HiiHandle A handle that was previously registered in the
> HII Database.
> + @param[in] StringId The identifier of the string to retrieved from the
> string
> + package associated with HiiHandle.
> +
> + @retval NULL The string specified by StringId is not present in the string
> package.
> + @retval Other The string was returned.
> +
> +**/
> +CHAR8 *
> +HiiGetEnglishAsciiString (
> + IN EFI_HII_HANDLE HiiHandle,
> + IN EFI_STRING_ID StringId
> + )
> +{
> + EFI_STRING HiiString;
> + UINTN StringSize;
> + CHAR8 *AsciiString;
> +
> + HiiString = HiiGetRedfishString (HiiHandle, ENGLISH_LANGUAGE_CODE,
> + StringId); if (HiiString == NULL) {
> + DEBUG ((DEBUG_ERROR, "%a, Can not find string ID: 0x%x with %a\n",
> __FUNCTION__, StringId, ENGLISH_LANGUAGE_CODE));
> + return NULL;
> + }
> +
> + StringSize = (StrLen (HiiString) + 1) * sizeof (CHAR8); AsciiString
> + = AllocatePool (StringSize); if (AsciiString == NULL) {
> + return NULL;
> + }
> +
> + UnicodeStrToAsciiStrS (HiiString, AsciiString, StringSize);
> +
> + FreePool (HiiString);
> + return AsciiString;
> +}
> +
> /**
> Check and see if this is supported schema or not.
>
> @@ -885,10 +925,17 @@ LoadFormset (
> //
> // Initialize statement private data.
> //
> - HiiStatementPrivate->HiiStatement = HiiStatement;
> - HiiStatementPrivate->QuestionId = HiiStatement->QuestionId;
> - HiiStatementPrivate->Description = HiiStatement->Prompt;
> - HiiStatementPrivate->ParentForm = HiiFormPrivate;
> + HiiStatementPrivate->HiiStatement = HiiStatement;
> + HiiStatementPrivate->QuestionId = HiiStatement->QuestionId;
> + HiiStatementPrivate->Description = HiiStatement->Prompt;
> + HiiStatementPrivate->Help = HiiStatement->Help;
> + HiiStatementPrivate->ParentForm = HiiFormPrivate;
> + HiiStatementPrivate->Flags = HiiStatement->QuestionFlags;
> + HiiStatementPrivate->StatementData.NumMaximum = HiiStatement-
> >ExtraData.NumData.Maximum;
> + HiiStatementPrivate->StatementData.NumMinimum = HiiStatement-
> >ExtraData.NumData.Minimum;
> + HiiStatementPrivate->StatementData.NumStep = HiiStatement-
> >ExtraData.NumData.Step;
> + HiiStatementPrivate->StatementData.StrMaxSize = HiiStatement-
> >ExtraData.StrData.MaxSize;
> + HiiStatementPrivate->StatementData.StrMinSize =
> + HiiStatement->ExtraData.StrData.MinSize;
>
> //
> // Attach to statement list.
> diff --git
> a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.h
> b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.h
> index cd7a52aef3..f66f5a8799 100644
> --- a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.h
> +++ b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.h
> @@ -2,6 +2,7 @@
> This file defines the EDKII Redfish Platform Config Protocol interface.
>
> (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
> + Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -74,16 +75,30 @@ typedef struct {
>
> #define REDFISH_PLATFORM_CONFIG_FORM_FROM_LINK(a) BASE_CR (a,
> REDFISH_PLATFORM_CONFIG_FORM_PRIVATE, Link)
>
> +//
> +// Definition of REDFISH_PLATFORM_CONFIG_STATEMENT_DATA
> +//
> +typedef struct {
> + UINT64 NumMinimum;
> + UINT64 NumMaximum;
> + UINT64 NumStep;
> + UINT8 StrMinSize;
> + UINT8 StrMaxSize;
> +} REDFISH_PLATFORM_CONFIG_STATEMENT_DATA;
> +
> //
> // Definition of REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE
> //
> typedef struct {
> - LIST_ENTRY Link;
> - REDFISH_PLATFORM_CONFIG_FORM_PRIVATE *ParentForm;
> - HII_STATEMENT *HiiStatement; // Pointer to HII statement
> data.
> - EFI_QUESTION_ID QuestionId; // Question ID of this
> statement.
> - EFI_STRING_ID Description; // String token of this question.
> - EFI_STRING DesStringCache; // The string cache for search
> function.
> + LIST_ENTRY Link;
> + REDFISH_PLATFORM_CONFIG_FORM_PRIVATE *ParentForm;
> + HII_STATEMENT *HiiStatement; // Pointer to HII statement
> data.
> + EFI_QUESTION_ID QuestionId; // Question ID of this
> statement.
> + EFI_STRING_ID Description; // String token of this question.
> + EFI_STRING_ID Help; // String token of help message.
> + EFI_STRING DesStringCache; // The string cache for search
> function.
> + UINT8 Flags; // The statement flag.
> + REDFISH_PLATFORM_CONFIG_STATEMENT_DATA StatementData; //
> The max/min for statement value.
> } REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE;
>
> #define REDFISH_PLATFORM_CONFIG_STATEMENT_FROM_LINK(a)
> BASE_CR (a, REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE, Link) @@
> -280,6 +295,23 @@ HiiGetRedfishAsciiString (
> IN EFI_STRING_ID StringId
> );
>
> +/**
> + Get ASCII string from HII database in English language.
> +
> + @param[in] HiiHandle A handle that was previously registered in the
> HII Database.
> + @param[in] StringId The identifier of the string to retrieved from the
> string
> + package associated with HiiHandle.
> +
> + @retval NULL The string specified by StringId is not present in the string
> package.
> + @retval Other The string was returned.
> +
> +**/
> +CHAR8 *
> +HiiGetEnglishAsciiString (
> + IN EFI_HII_HANDLE HiiHandle,
> + IN EFI_STRING_ID StringId
> + );
> +
> /**
> Release all resource in statement list.
>
> --
> 2.38.1.windows.1
prev parent reply other threads:[~2022-12-12 2:44 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-07 14:10 [edk2-staging][PATCH 2/3] edk2-staging/RedfishPkg: Introduce new interfaces to Redfish protocol Nickle Wang
2022-12-12 2:44 ` Chang, Abner [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=MN2PR12MB396662C221F1E6C940A12304EAE29@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