mirror of https://github.com/acidanthera/audk.git
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>
This commit is contained in:
parent
01b31b585e
commit
83d77fa311
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue