diff options
3 files changed, 121 insertions, 6 deletions
diff --git a/RedfishPkg/Include/Library/RedfishHostInterfaceLib.h b/RedfishPkg/Include/Library/RedfishHostInterfaceLib.h index 8d8389b964..22a8f9283c 100644 --- a/RedfishPkg/Include/Library/RedfishHostInterfaceLib.h +++ b/RedfishPkg/Include/Library/RedfishHostInterfaceLib.h @@ -2,6 +2,7 @@ Definitinos of RedfishHostInterfaceDxe driver.
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ Copyright (C) 2022 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -19,7 +20,7 @@ /**
Get platform Redfish host interface device descriptor.
- @param[in] DeviceType Pointer to retrieve device type.
+ @param[out] DeviceType Pointer to retrieve device type.
@param[out] DeviceDescriptor Pointer to retrieve REDFISH_INTERFACE_DATA, caller has to free
this memory using FreePool().
@retval EFI_SUCCESS Device descriptor is returned successfully in DeviceDescriptor.
@@ -28,7 +29,7 @@ **/
EFI_STATUS
RedfishPlatformHostInterfaceDeviceDescriptor (
- IN UINT8 *DeviceType,
+ OUT UINT8 *DeviceType,
OUT REDFISH_INTERFACE_DATA **DeviceDescriptor
);
@@ -40,7 +41,7 @@ RedfishPlatformHostInterfaceDeviceDescriptor ( @param[in, out] ProtocolRecord Pointer to retrieve the first or the next protocol record.
caller has to free the new protocol record returned from
this function using FreePool().
- param[in] IndexOfProtocolData The index of protocol data.
+ @param[in] IndexOfProtocolData The index of protocol data.
@retval EFI_SUCCESS Protocol records are all returned.
@retval EFI_NOT_FOUND No more protocol records.
@@ -52,4 +53,25 @@ RedfishPlatformHostInterfaceProtocolData ( IN UINT8 IndexOfProtocolData
);
+/**
+ Get the EFI protocol GUID installed by platform library which
+ indicates the necessary information is ready for building
+ SMBIOS 42h record.
+
+ @param[out] InformationReadinessGuid Pointer to retrive the protocol
+ GUID.
+
+ @retval EFI_SUCCESS Notification is required for building up
+ SMBIOS type 42h record.
+ @retval EFI_UNSUPPORTED Notification is not required for building up
+ SMBIOS type 42h record.
+ @retval EFI_ALREADY_STARTED Platform host information is already ready.
+ @retval Others Other errors.
+**/
+
+EFI_STATUS
+RedfishPlatformHostInterfaceNotification (
+ OUT EFI_GUID **InformationReadinessGuid
+ );
+
#endif
diff --git a/RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterfaceLibNull.c b/RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterfaceLibNull.c index b30f9e37a4..40642469c9 100644 --- a/RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterfaceLibNull.c +++ b/RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterfaceLibNull.c @@ -2,6 +2,7 @@ NULL instace of RedfishPlatformHostInterfaceLib
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ Copyright (C) 2022 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -23,7 +24,7 @@ **/
EFI_STATUS
RedfishPlatformHostInterfaceDeviceDescriptor (
- IN UINT8 *DeviceType,
+ OUT UINT8 *DeviceType,
OUT REDFISH_INTERFACE_DATA **DeviceDescriptor
)
{
@@ -51,3 +52,26 @@ RedfishPlatformHostInterfaceProtocolData ( {
return EFI_NOT_FOUND;
}
+
+/**
+ Get the EFI protocol GUID installed by platform library which
+ indicates the necessary information is ready for building
+ SMBIOS 42h record.
+
+ @param[out] InformationReadinessGuid Pointer to retrive the protocol
+ GUID.
+
+ @retval EFI_SUCCESS Notification is required for building up
+ SMBIOS type 42h record.
+ @retval EFI_UNSUPPORTED Notification is not required for building up
+ SMBIOS type 42h record.
+ @retval EFI_ALREADY_STARTED Platform host information is already ready.
+ @retval Others Other errors.
+**/
+EFI_STATUS
+RedfishPlatformHostInterfaceNotification (
+ OUT EFI_GUID **InformationReadinessGuid
+ )
+{
+ return EFI_UNSUPPORTED;
+}
diff --git a/RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c b/RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c index 623350bc26..3e12e0c8b9 100644 --- a/RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c +++ b/RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c @@ -6,6 +6,7 @@ Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
+ Copyright (C) 2022 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -21,6 +22,9 @@ #include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
+static EFI_EVENT mPlatformHostInterfaceReadylEvent = NULL;
+static VOID *mPlatformHostInterfaceReadyRegistration = NULL;
+
/**
Create SMBIOS type 42 record for Redfish host interface.
@@ -239,6 +243,27 @@ ON_EXIT: }
/**
+ Notification event of platform Redfish Host Interface readiness.
+
+ @param[in] Event Event whose notification function is being invoked.
+ @param[in] Context The pointer to the notification function's context,
+ which is implementation-dependent.
+
+**/
+VOID
+EFIAPI
+PlatformHostInterfaceInformationReady (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ DEBUG ((DEBUG_INFO, "%a: Platform Redfish Host Interface informtion is ready\n", __FUNCTION__));
+
+ RedfishCreateSmbiosTable42 ();
+ return;
+}
+
+/**
Main entry for this driver.
@param ImageHandle Image handle this driver.
@@ -254,8 +279,52 @@ RedfishHostInterfaceDxeEntryPoint ( IN EFI_SYSTEM_TABLE *SystemTable
)
{
+ EFI_STATUS Status;
+ EFI_GUID *ReadyGuid;
+
+ DEBUG ((DEBUG_INFO, "%a: Entry\n.", __FUNCTION__));
+
//
- // Create SMBIOS type 42 record.
+ // Check if the Redfish Host Interface depends on
+ // the specific protocol installation.
//
- return RedfishCreateSmbiosTable42 ();
+ Status = RedfishPlatformHostInterfaceNotification (&ReadyGuid);
+ if (Status == EFI_SUCCESS) {
+ DEBUG ((DEBUG_INFO, " Create protocol install notification to know the installation of platform Redfish host interface readiness\n"));
+ DEBUG ((DEBUG_INFO, " Protocol GUID: %g\n", ReadyGuid));
+ //
+ // Register event for ReadyGuid protocol installed by
+ // platform Redfish host interface library.
+ //
+ Status = gBS->CreateEvent (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ PlatformHostInterfaceInformationReady,
+ NULL,
+ &mPlatformHostInterfaceReadylEvent
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, " Fail to create event for the installation of platform Redfish host interface readiness.\n"));
+ return Status;
+ }
+
+ Status = gBS->RegisterProtocolNotify (
+ ReadyGuid,
+ mPlatformHostInterfaceReadylEvent,
+ &mPlatformHostInterfaceReadyRegistration
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, " Fail to register event for the installation of platform Redfish host interface readiness.\n"));
+ return Status;
+ }
+
+ return EFI_SUCCESS;
+ }
+
+ if ((Status == EFI_UNSUPPORTED) || (Status == EFI_ALREADY_STARTED)) {
+ Status = RedfishCreateSmbiosTable42 ();
+ }
+
+ // Return other erros.
+ return Status;
}
|