summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNickle Wang <nicklew@nvidia.com>2023-04-10 21:18:42 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-04-28 12:21:38 +0000
commit83d77fa311435bafd68076ba2f960ce607643971 (patch)
treea10792faa582bf4c71dced171dd84c73b48c90f6
parent01b31b585ed366a92a542d281c7e1db610848de2 (diff)
downloadedk2-83d77fa311435bafd68076ba2f960ce607643971.tar.gz
edk2-83d77fa311435bafd68076ba2f960ce607643971.tar.bz2
edk2-83d77fa311435bafd68076ba2f960ce607643971.zip
RedfishPkg: Helper library of EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL
This is the helper library for using EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL. 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> Reviewed-by: Abner Chang <abner.chang@amd.com> Reviewed-by: Igor Kulchytskyy <igork @ami.com>
-rw-r--r--RedfishPkg/Include/Library/RedfishPlatformConfigLib.h143
-rw-r--r--RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigInternal.h35
-rw-r--r--RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c310
-rw-r--r--RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.inf41
-rw-r--r--RedfishPkg/RedfishPkg.dec5
5 files changed, 534 insertions, 0 deletions
diff --git a/RedfishPkg/Include/Library/RedfishPlatformConfigLib.h b/RedfishPkg/Include/Library/RedfishPlatformConfigLib.h
new file mode 100644
index 0000000000..51a1861639
--- /dev/null
+++ b/RedfishPkg/Include/Library/RedfishPlatformConfigLib.h
@@ -0,0 +1,143 @@
+/** @file
+ Definitions of RedfishPlatformConfigLib
+
+ (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
+
+**/
+
+#ifndef REDFISH_PLATFORM_CONFIG_LIB_H_
+#define REDFISH_PLATFORM_CONFIG_LIB_H_
+
+#include <Protocol/EdkIIRedfishPlatformConfig.h>
+
+/**
+ 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
+ );
+
+/**
+ 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
+ );
+
+/**
+ 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
+ );
+
+/**
+ 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
+ );
+
+/**
+ 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
+ );
+
+/**
+ 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
+ );
+
+#endif
diff --git a/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigInternal.h b/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigInternal.h
new file mode 100644
index 0000000000..061e7f4a45
--- /dev/null
+++ b/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigInternal.h
@@ -0,0 +1,35 @@
+/** @file
+ Internal function header for Redfish Platform Config Library.
+
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+ Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef REDFISH_PLATFORM_CONFIG_H_
+#define REDFISH_PLATFORM_CONFIG_H_
+
+#include <Uefi.h>
+
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/RedfishPlatformConfigLib.h>
+#include <Library/UefiLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+#include <Protocol/EdkIIRedfishPlatformConfig.h>
+
+///
+/// Definition of REDFISH_PLATFORM_CONFIG_LIB_PRIVATE
+///
+typedef struct {
+ EFI_EVENT ProtocolEvent; ///< Protocol notification event.
+ VOID *Registration; ///< Protocol notification registration.
+ EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL *Protocol;
+} REDFISH_PLATFORM_CONFIG_LIB_PRIVATE;
+
+#endif
diff --git a/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c b/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.c
new file mode 100644
index 0000000000..3500b6aa8f
--- /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;
+}
diff --git a/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.inf b/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.inf
new file mode 100644
index 0000000000..2258609a1c
--- /dev/null
+++ b/RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.inf
@@ -0,0 +1,41 @@
+## @file
+# Library for Redfish Platform Config Protocol
+#
+# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010006
+ BASE_NAME = RedfishPlatformConfigLib
+ FILE_GUID = C920FD62-21AC-4638-B9F5-9612942290F6
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = RedfishPlatformConfigLib| DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER
+ CONSTRUCTOR = RedfishPlatformConfigLibConstructor
+ DESTRUCTOR = RedfishPlatformConfigLibDestructor
+
+#
+# VALID_ARCHITECTURES = IA32 X64 EBC RISCV64
+#
+
+[Sources]
+ RedfishPlatformConfigLib.c
+ RedfishPlatformConfigInternal.h
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ RedfishPkg/RedfishPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ DebugLib
+ MemoryAllocationLib
+ UefiBootServicesTableLib
+ UefiLib
+
+[Protocols]
+ gEdkIIRedfishPlatformConfigProtocolGuid
diff --git a/RedfishPkg/RedfishPkg.dec b/RedfishPkg/RedfishPkg.dec
index e2892ce9ce..cdb1528ced 100644
--- a/RedfishPkg/RedfishPkg.dec
+++ b/RedfishPkg/RedfishPkg.dec
@@ -64,6 +64,11 @@
#
HiiUtilityLib|Include/Library/HiiUtilityLib.h
+ ## @libraryclass Provides the library functions to access Redfish Platform
+ # Config protocol.
+ #
+ RedfishPlatformConfigLib|Include/Library/RedfishPlatformConfigLib.h
+
[LibraryClasses.Common.Private]
## @libraryclass Provides the private C runtime library functions.
# CRT library is currently used by edk2 JsonLib (open source