summaryrefslogtreecommitdiff
path: root/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c')
-rw-r--r--RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c310
1 files changed, 310 insertions, 0 deletions
diff --git a/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c b/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c
new file mode 100644
index 0000000..3500b6a
--- /dev/null
+++ b/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c
@@ -0,0 +1,310 @@
+/** @file
+ Wrapper function to support Redfish Platform Config protocol.
+
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+ Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "RedfishPlatformConfigInternal.h"
+
+REDFISH_PLATFORM_CONFIG_LIB_PRIVATE mRedfishPlatformConfigLibPrivate;
+
+/**
+ Get Redfish value with the given Schema and Configure Language.
+
+ @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] Value The returned value.
+
+ @retval EFI_SUCCESS Value is returned successfully.
+ @retval EFI_NOT_READY Redfish Platform Config protocol is not ready.
+ @retval Others Some error happened.
+
+**/
+EFI_STATUS
+RedfishPlatformConfigGetValue (
+ IN CHAR8 *Schema,
+ IN CHAR8 *Version,
+ IN EFI_STRING ConfigureLang,
+ OUT EDKII_REDFISH_VALUE *Value
+ )
+{
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {
+ return EFI_NOT_READY;
+ }
+
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetValue (
+ mRedfishPlatformConfigLibPrivate.Protocol,
+ Schema,
+ Version,
+ ConfigureLang,
+ Value
+ );
+}
+
+/**
+ Get Redfish attribute value with the given Schema and Configure Language.
+
+ @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
+RedfishPlatformConfigGetAttribute (
+ IN CHAR8 *Schema,
+ IN CHAR8 *Version,
+ IN EFI_STRING ConfigureLang,
+ OUT EDKII_REDFISH_ATTRIBUTE *AttributeValue
+ )
+{
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {
+ return EFI_NOT_READY;
+ }
+
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetAttribute (
+ mRedfishPlatformConfigLibPrivate.Protocol,
+ Schema,
+ Version,
+ ConfigureLang,
+ AttributeValue
+ );
+}
+
+/**
+ Get Redfish default value with the given Schema and Configure Language.
+
+ @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
+RedfishPlatformConfigGetDefaultValue (
+ IN CHAR8 *Schema,
+ IN CHAR8 *Version,
+ IN EFI_STRING ConfigureLang,
+ IN UINT16 DefaultClass,
+ OUT EDKII_REDFISH_VALUE *Value
+ )
+{
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {
+ return EFI_NOT_READY;
+ }
+
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetDefaultValue (
+ mRedfishPlatformConfigLibPrivate.Protocol,
+ Schema,
+ Version,
+ ConfigureLang,
+ DefaultClass,
+ Value
+ );
+}
+
+/**
+ Set Redfish value with the given Schema and Configure Language.
+
+ @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] Value The value to set.
+
+ @retval EFI_SUCCESS Value is returned successfully.
+ @retval EFI_NOT_READY Redfish Platform Config protocol is not ready.
+ @retval Others Some error happened.
+
+**/
+EFI_STATUS
+RedfishPlatformConfigSetValue (
+ IN CHAR8 *Schema,
+ IN CHAR8 *Version,
+ IN EFI_STRING ConfigureLang,
+ IN EDKII_REDFISH_VALUE Value
+ )
+{
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {
+ return EFI_NOT_READY;
+ }
+
+ return mRedfishPlatformConfigLibPrivate.Protocol->SetValue (
+ mRedfishPlatformConfigLibPrivate.Protocol,
+ Schema,
+ Version,
+ ConfigureLang,
+ Value
+ );
+}
+
+/**
+ Get the list of Configure Language from platform configuration by the given Schema and Pattern.
+
+ @param[in] Schema The Redfish schema to query.
+ @param[in] Version The Redfish version to query.
+ @param[in] Pattern The target Configure Language pattern.
+ @param[out] ConfigureLangList The list of Configure Language.
+ @param[out] Count The number of Configure Language in ConfigureLangList.
+
+ @retval EFI_SUCCESS ConfigureLangList is returned successfully.
+ @retval EFI_NOT_READY Redfish Platform Config protocol is not ready.
+ @retval Others Some error happened.
+
+**/
+EFI_STATUS
+RedfishPlatformConfigGetConfigureLang (
+ IN CHAR8 *Schema,
+ IN CHAR8 *Version,
+ IN EFI_STRING Pattern,
+ OUT EFI_STRING **ConfigureLangList,
+ OUT UINTN *Count
+ )
+{
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {
+ return EFI_NOT_READY;
+ }
+
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetConfigureLang (
+ mRedfishPlatformConfigLibPrivate.Protocol,
+ Schema,
+ Version,
+ Pattern,
+ ConfigureLangList,
+ Count
+ );
+}
+
+/**
+ Get the list of supported Redfish schema from platform configuration.
+
+ @param[out] SupportedSchema The supported schema list which is separated by ';'.
+ For example: "x-uefi-redfish-Memory.v1_7_1;x-uefi-redfish-Boot.v1_0_1"
+ The SupportedSchema is allocated by the callee. It's caller's
+ responsibility to free this buffer using FreePool().
+
+ @retval EFI_SUCCESS Schema is returned successfully.
+ @retval EFI_NOT_READY Redfish Platform Config protocol is not ready.
+ @retval Others Some error happened.
+
+**/
+EFI_STATUS
+EFIAPI
+RedfishPlatformConfigGetSupportedSchema (
+ OUT CHAR8 **SupportedSchema
+ )
+{
+ if (mRedfishPlatformConfigLibPrivate.Protocol == NULL) {
+ return EFI_NOT_READY;
+ }
+
+ return mRedfishPlatformConfigLibPrivate.Protocol->GetSupportedSchema (
+ mRedfishPlatformConfigLibPrivate.Protocol,
+ SupportedSchema
+ );
+}
+
+/**
+ This is a EFI_REDFISH_PLATFORM_CONFIG_PROTOCOL notification event handler.
+
+ Install HII package notification.
+
+ @param[in] Event Event whose notification function is being invoked.
+ @param[in] Context Pointer to the notification function's context.
+
+**/
+VOID
+EFIAPI
+RedfishPlatformConfigProtocolInstalled (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+
+ //
+ // Locate EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL.
+ //
+ Status = gBS->LocateProtocol (
+ &gEdkIIRedfishPlatformConfigProtocolGuid,
+ NULL,
+ (VOID **)&mRedfishPlatformConfigLibPrivate.Protocol
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "%a: locate EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL failure: %r\n", __func__, Status));
+ return;
+ }
+
+ gBS->CloseEvent (Event);
+ mRedfishPlatformConfigLibPrivate.ProtocolEvent = NULL;
+}
+
+/**
+
+ Create protocol listener and wait for Redfish Platform Config protocol.
+
+ @param ImageHandle The image handle.
+ @param SystemTable The system table.
+
+ @retval EFI_SUCCESS Protocol listener is registered successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+RedfishPlatformConfigLibConstructor (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ ZeroMem (&mRedfishPlatformConfigLibPrivate, sizeof (REDFISH_PLATFORM_CONFIG_LIB_PRIVATE));
+ mRedfishPlatformConfigLibPrivate.ProtocolEvent = EfiCreateProtocolNotifyEvent (
+ &gEdkIIRedfishPlatformConfigProtocolGuid,
+ TPL_CALLBACK,
+ RedfishPlatformConfigProtocolInstalled,
+ NULL,
+ &mRedfishPlatformConfigLibPrivate.Registration
+ );
+ if (mRedfishPlatformConfigLibPrivate.ProtocolEvent == NULL) {
+ DEBUG ((DEBUG_ERROR, "%a: failed to create protocol notify event\n", __func__));
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Unloads the application and its installed protocol.
+
+ @param ImageHandle Handle that identifies the image to be unloaded.
+ @param SystemTable The system table.
+
+ @retval EFI_SUCCESS The image has been unloaded.
+
+**/
+EFI_STATUS
+EFIAPI
+RedfishPlatformConfigLibDestructor (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ if (mRedfishPlatformConfigLibPrivate.ProtocolEvent != NULL) {
+ gBS->CloseEvent (mRedfishPlatformConfigLibPrivate.ProtocolEvent);
+ mRedfishPlatformConfigLibPrivate.ProtocolEvent = NULL;
+ }
+
+ mRedfishPlatformConfigLibPrivate.Protocol = NULL;
+
+ return EFI_SUCCESS;
+}