--- /dev/null
+/** @file\r
+ Definitions of RedfishPlatformConfigLib\r
+\r
+ (C) Copyright 2021 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 REDFISH_PLATFORM_CONFIG_LIB_H_\r
+#define REDFISH_PLATFORM_CONFIG_LIB_H_\r
+\r
+#include <Protocol/EdkIIRedfishPlatformConfig.h>\r
+\r
+/**\r
+ Get Redfish value with the given Schema and Configure Language.\r
+\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 EFI_NOT_READY Redfish Platform Config protocol is not ready.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+RedfishPlatformConfigGetValue (\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ OUT EDKII_REDFISH_VALUE *Value\r
+ );\r
+\r
+/**\r
+ Set Redfish value with the given Schema and Configure Language.\r
+\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 EFI_NOT_READY Redfish Platform Config protocol is not ready.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+RedfishPlatformConfigSetValue (\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ IN EDKII_REDFISH_VALUE Value\r
+ );\r
+\r
+/**\r
+ Get the list of Configure Language from platform configuration by the given Schema and Pattern.\r
+\r
+ @param[in] Schema The Redfish schema to query.\r
+ @param[in] Version The Redfish version to query.\r
+ @param[in] Pattern The target Configure Language pattern.\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 EFI_NOT_READY Redfish Platform Config protocol is not ready.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+RedfishPlatformConfigGetConfigureLang (\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING Pattern,\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[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 EFI_NOT_READY Redfish Platform Config protocol is not ready.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+RedfishPlatformConfigGetSupportedSchema (\r
+ OUT CHAR8 **SupportedSchema\r
+ );\r
+\r
+/**\r
+ Get Redfish attribute value with the given Schema and Configure Language.\r
+\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
+EFI_STATUS\r
+RedfishPlatformConfigGetAttribute (\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ OUT EDKII_REDFISH_ATTRIBUTE *AttributeValue\r
+ );\r
+\r
+/**\r
+ Get Redfish default value with the given Schema and Configure Language.\r
+\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
+EFI_STATUS\r
+RedfishPlatformConfigGetDefaultValue (\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
+#endif\r
--- /dev/null
+/** @file\r
+ Wrapper function to support Redfish Platform Config protocol.\r
+\r
+ (C) Copyright 2021 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
+#include "RedfishPlatformConfigInternal.h"\r
+\r
+REDFISH_PLATFORM_CONFIG_LIB_PRIVATE mRedfishPlatformConfigLibPrivate;\r
+\r
+/**\r
+ Get Redfish value with the given Schema and Configure Language.\r
+\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 EFI_NOT_READY Redfish Platform Config protocol is not ready.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+RedfishPlatformConfigGetValue (\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ OUT EDKII_REDFISH_VALUE *Value\r
+ )\r
+{\r
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetValue (\r
+ mRedfishPlatformConfigLibPrivate.Protocol,\r
+ Schema,\r
+ Version,\r
+ ConfigureLang,\r
+ Value\r
+ );\r
+}\r
+\r
+/**\r
+ Get Redfish attribute value with the given Schema and Configure Language.\r
+\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
+EFI_STATUS\r
+RedfishPlatformConfigGetAttribute (\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ OUT EDKII_REDFISH_ATTRIBUTE *AttributeValue\r
+ )\r
+{\r
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetAttribute (\r
+ mRedfishPlatformConfigLibPrivate.Protocol,\r
+ Schema,\r
+ Version,\r
+ ConfigureLang,\r
+ AttributeValue\r
+ );\r
+}\r
+\r
+/**\r
+ Get Redfish default value with the given Schema and Configure Language.\r
+\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
+EFI_STATUS\r
+RedfishPlatformConfigGetDefaultValue (\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
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetDefaultValue (\r
+ mRedfishPlatformConfigLibPrivate.Protocol,\r
+ Schema,\r
+ Version,\r
+ ConfigureLang,\r
+ DefaultClass,\r
+ Value\r
+ );\r
+}\r
+\r
+/**\r
+ Set Redfish value with the given Schema and Configure Language.\r
+\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 EFI_NOT_READY Redfish Platform Config protocol is not ready.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+RedfishPlatformConfigSetValue (\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING ConfigureLang,\r
+ IN EDKII_REDFISH_VALUE Value\r
+ )\r
+{\r
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ return mRedfishPlatformConfigLibPrivate.Protocol->SetValue (\r
+ mRedfishPlatformConfigLibPrivate.Protocol,\r
+ Schema,\r
+ Version,\r
+ ConfigureLang,\r
+ Value\r
+ );\r
+}\r
+\r
+/**\r
+ Get the list of Configure Language from platform configuration by the given Schema and Pattern.\r
+\r
+ @param[in] Schema The Redfish schema to query.\r
+ @param[in] Version The Redfish version to query.\r
+ @param[in] Pattern The target Configure Language pattern.\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 EFI_NOT_READY Redfish Platform Config protocol is not ready.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+RedfishPlatformConfigGetConfigureLang (\r
+ IN CHAR8 *Schema,\r
+ IN CHAR8 *Version,\r
+ IN EFI_STRING Pattern,\r
+ OUT EFI_STRING **ConfigureLangList,\r
+ OUT UINTN *Count\r
+ )\r
+{\r
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetConfigureLang (\r
+ mRedfishPlatformConfigLibPrivate.Protocol,\r
+ Schema,\r
+ Version,\r
+ Pattern,\r
+ ConfigureLangList,\r
+ Count\r
+ );\r
+}\r
+\r
+/**\r
+ Get the list of supported Redfish schema from platform configuration.\r
+\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 EFI_NOT_READY Redfish Platform Config protocol is not ready.\r
+ @retval Others Some error happened.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+RedfishPlatformConfigGetSupportedSchema (\r
+ OUT CHAR8 **SupportedSchema\r
+ )\r
+{\r
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetSupportedSchema (\r
+ mRedfishPlatformConfigLibPrivate.Protocol,\r
+ SupportedSchema\r
+ );\r
+}\r
+\r
+/**\r
+ This is a EFI_REDFISH_PLATFORM_CONFIG_PROTOCOL notification event handler.\r
+\r
+ Install HII package notification.\r
+\r
+ @param[in] Event Event whose notification function is being invoked.\r
+ @param[in] Context Pointer to the notification function's context.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+RedfishPlatformConfigProtocolInstalled (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ //\r
+ // Locate EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL.\r
+ //\r
+ Status = gBS->LocateProtocol (\r
+ &gEdkIIRedfishPlatformConfigProtocolGuid,\r
+ NULL,\r
+ (VOID **)&mRedfishPlatformConfigLibPrivate.Protocol\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "%a: locate EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL failure: %r\n", __func__, Status));\r
+ return;\r
+ }\r
+\r
+ gBS->CloseEvent (Event);\r
+ mRedfishPlatformConfigLibPrivate.ProtocolEvent = NULL;\r
+}\r
+\r
+/**\r
+\r
+ Create protocol listener and wait for Redfish Platform Config protocol.\r
+\r
+ @param ImageHandle The image handle.\r
+ @param SystemTable The system table.\r
+\r
+ @retval EFI_SUCCESS Protocol listener is registered successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+RedfishPlatformConfigLibConstructor (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+{\r
+ ZeroMem (&mRedfishPlatformConfigLibPrivate, sizeof (REDFISH_PLATFORM_CONFIG_LIB_PRIVATE));\r
+ mRedfishPlatformConfigLibPrivate.ProtocolEvent = EfiCreateProtocolNotifyEvent (\r
+ &gEdkIIRedfishPlatformConfigProtocolGuid,\r
+ TPL_CALLBACK,\r
+ RedfishPlatformConfigProtocolInstalled,\r
+ NULL,\r
+ &mRedfishPlatformConfigLibPrivate.Registration\r
+ );\r
+ if (mRedfishPlatformConfigLibPrivate.ProtocolEvent == NULL) {\r
+ DEBUG ((DEBUG_ERROR, "%a: failed to create protocol notify event\n", __func__));\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Unloads the application and its installed protocol.\r
+\r
+ @param ImageHandle Handle that identifies the image to be unloaded.\r
+ @param SystemTable The system table.\r
+\r
+ @retval EFI_SUCCESS The image has been unloaded.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+RedfishPlatformConfigLibDestructor (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+{\r
+ if (mRedfishPlatformConfigLibPrivate.ProtocolEvent != NULL) {\r
+ gBS->CloseEvent (mRedfishPlatformConfigLibPrivate.ProtocolEvent);\r
+ mRedfishPlatformConfigLibPrivate.ProtocolEvent = NULL;\r
+ }\r
+\r
+ mRedfishPlatformConfigLibPrivate.Protocol = NULL;\r
+\r
+ return EFI_SUCCESS;\r
+}\r