--- /dev/null
+/** @file\r
+ This file defines the EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL interface.\r
+\r
+ (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>\r
+ Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef EDKII_REDFISH_PLATFORM_CONFIG_H_\r
+#define EDKII_REDFISH_PLATFORM_CONFIG_H_\r
+\r
+typedef struct _EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL;\r
+\r
+///\r
+/// Definition of EDKII_REDFISH_TYPE_VALUE\r
+///\r
+typedef union {\r
+ INT64 Integer;\r
+ BOOLEAN Boolean;\r
+ CHAR8 *Buffer;\r
+ CHAR8 **StringArray;\r
+ INT64 *IntegerArray;\r
+ BOOLEAN *BooleanArray;\r
+} EDKII_REDFISH_TYPE_VALUE;\r
+\r
+///\r
+/// Definition of EDKII_REDFISH_VALUE_TYPES\r
+///\r
+typedef enum {\r
+ RedfishValueTypeUnknown = 0,\r
+ RedfishValueTypeInteger,\r
+ RedfishValueTypeBoolean,\r
+ RedfishValueTypeString,\r
+ RedfishValueTypeStringArray,\r
+ RedfishValueTypeIntegerArray,\r
+ RedfishValueTypeBooleanArray,\r
+ RedfishValueTypeMax\r
+} EDKII_REDFISH_VALUE_TYPES;\r
+\r
+///\r
+/// Definition of EDKII_REDFISH_ATTRIBUTE_TYPES\r
+///\r
+typedef enum {\r
+ RedfishAttributeTypeUnknown = 0,\r
+ RedfishAttributeTypeEnumeration,\r
+ RedfishAttributeTypeString,\r
+ RedfishAttributeTypeInteger,\r
+ RedfishAttributeTypeBoolean,\r
+ RedfishAttributeTypePassword\r
+} EDKII_REDFISH_ATTRIBUTE_TYPES;\r
+\r
+///\r
+/// Definition of EDKII_REDFISH_VALUE\r
+///\r
+typedef struct {\r
+ EDKII_REDFISH_VALUE_TYPES Type;\r
+ EDKII_REDFISH_TYPE_VALUE Value;\r
+ UINTN ArrayCount;\r
+} EDKII_REDFISH_VALUE;\r
+\r
+///\r
+/// Definition of EDKII_REDFISH_ATTRIBUTE_VALUE\r
+///\r
+typedef struct {\r
+ CHAR8 *ValueName;\r
+ CHAR8 *ValueDisplayName;\r
+} EDKII_REDFISH_ATTRIBUTE_VALUE;\r
+\r
+///\r
+/// Definition of EDKII_REDFISH_POSSIBLE_VALUES\r
+///\r
+typedef struct {\r
+ UINTN ValueCount;\r
+ EDKII_REDFISH_ATTRIBUTE_VALUE *ValueArray;\r
+} EDKII_REDFISH_POSSIBLE_VALUES;\r
+\r
+///\r
+/// Definition of EDKII_REDFISH_ATTRIBUTE\r
+///\r
+typedef struct {\r
+ CHAR8 *AttributeName;\r
+ CHAR8 *DisplayName;\r
+ CHAR8 *HelpText;\r
+ CHAR8 *MenuPath;\r
+ EDKII_REDFISH_ATTRIBUTE_TYPES Type;\r
+ BOOLEAN ResetRequired;\r
+ BOOLEAN ReadOnly;\r
+ BOOLEAN GrayedOut;\r
+ BOOLEAN Suppress;\r
+ UINT64 NumMaximum;\r
+ UINT64 NumMinimum;\r
+ UINT64 NumStep;\r
+ UINT8 StrMaxSize;\r
+ UINT8 StrMinSize;\r
+ EDKII_REDFISH_POSSIBLE_VALUES Values;\r
+} EDKII_REDFISH_ATTRIBUTE;\r
+\r
+/**\r
+ Get Redfish value with the given Schema and Configure Language.\r
+\r
+ @param[in] This Pointer to EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.\r
+ @param[in] Schema The Redfish schema to query.\r
+ @param[in] Version The Redfish version to query.\r
+ @param[in] ConfigureLang The target value which match this configure Language.\r
+ @param[out] Value The returned value.\r
+\r
+ @retval EFI_SUCCESS Value is returned successfully.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE)(\r
+ IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ OUT EDKII_REDFISH_VALUE *Value\r
+ );\r
+\r
+//\r
+// Default class standard\r
+//\r
+#define EDKII_REDFISH_DEFAULT_CLASS_STANDARD EFI_HII_DEFAULT_CLASS_STANDARD\r
+\r
+/**\r
+ Get Redfish default value with the given Schema and Configure Language.\r
+\r
+ @param[in] This Pointer to EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.\r
+ @param[in] Schema The Redfish schema to query.\r
+ @param[in] Version The Redfish version to query.\r
+ @param[in] ConfigureLang The target value which match this configure Language.\r
+ @param[in] DefaultClass The UEFI defined default class.\r
+ Please refer to UEFI spec. 33.2.5.8 "defaults" for details.\r
+ @param[out] Value The returned value.\r
+\r
+ @retval EFI_SUCCESS Value is returned successfully.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_REDFISH_PLATFORM_CONFIG_GET_DEFAULT_VALUE)(\r
+ IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ IN UINT16 DefaultClass,\r
+ OUT EDKII_REDFISH_VALUE *Value\r
+ );\r
+\r
+/**\r
+ Set Redfish value with the given Schema and Configure Language.\r
+\r
+ @param[in] This Pointer to EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.\r
+ @param[in] Schema The Redfish schema to query.\r
+ @param[in] Version The Redfish version to query.\r
+ @param[in] ConfigureLang The target value which match this configure Language.\r
+ @param[in] Value The value to set.\r
+\r
+ @retval EFI_SUCCESS Value is returned successfully.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE)(\r
+ IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ IN EDKII_REDFISH_VALUE Value\r
+ );\r
+\r
+/**\r
+ Get Redfish attribute value with the given Schema and Configure Language.\r
+\r
+ @param[in] This Pointer to EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.\r
+ @param[in] Schema The Redfish schema to query.\r
+ @param[in] Version The Redfish version to query.\r
+ @param[in] ConfigureLang The target value which match this configure Language.\r
+ @param[out] AttributeValue The attribute value.\r
+\r
+ @retval EFI_SUCCESS Value is returned successfully.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_REDFISH_PLATFORM_CONFIG_GET_ATTRIBUTE)(\r
+ IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ OUT EDKII_REDFISH_ATTRIBUTE *AttributeValue\r
+ );\r
+\r
+/**\r
+ Get the list of Configure Language from platform configuration by the given Schema and RegexPattern.\r
+\r
+ @param[in] This Pointer to EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.\r
+ @param[in] Schema The Redfish schema to query.\r
+ @param[in] Version The Redfish version to query.\r
+ @param[in] RegexPattern The target Configure Language pattern. This is used for regular expression matching.\r
+ @param[out] ConfigureLangList The list of Configure Language.\r
+ @param[out] Count The number of Configure Language in ConfigureLangList.\r
+\r
+ @retval EFI_SUCCESS ConfigureLangList is returned successfully.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG)(\r
+ IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING RegexPattern,\r
+ OUT EFI_STRING **ConfigureLangList,\r
+ OUT UINTN *Count\r
+ );\r
+\r
+/**\r
+ Get the list of supported Redfish schema from platform configuration.\r
+\r
+ @param[in] This Pointer to EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instance.\r
+ @param[out] SupportedSchema The supported schema list which is separated by ';'.\r
+ For example: "x-uefi-redfish-Memory.v1_7_1;x-uefi-redfish-Boot.v1_0_1"\r
+ The SupportedSchema is allocated by the callee. It's caller's\r
+ responsibility to free this buffer using FreePool().\r
+\r
+ @retval EFI_SUCCESS Schema is returned successfully.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA)(\r
+ IN EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *This,\r
+ OUT CHAR8 **SupportedSchema\r
+ );\r
+\r
+struct _EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL {\r
+ UINT64 Revision;\r
+ EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE GetValue;\r
+ EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE SetValue;\r
+ EDKII_REDFISH_PLATFORM_CONFIG_GET_DEFAULT_VALUE GetDefaultValue;\r
+ EDKII_REDFISH_PLATFORM_CONFIG_GET_ATTRIBUTE GetAttribute;\r
+ EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG GetConfigureLang;\r
+ EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA GetSupportedSchema;\r
+};\r
+\r
+extern EFI_GUID gEdkIIRedfishPlatformConfigProtocolGuid;\r
+\r
+#endif\r