diff options
author | Abner Chang <abner.chang@amd.com> | 2022-12-19 21:18:00 +0800 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2022-12-20 06:54:06 +0000 |
commit | 2846c19da98ce1dca410e39e5b30e06a1166220d (patch) | |
tree | 24987acbbe3a758375fa2b5bf340e45ce7174c5d /RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c | |
parent | ceb52713b00a4bec1a4ab551636b8d297139ea6f (diff) | |
download | edk2-2846c19da98ce1dca410e39e5b30e06a1166220d.zip edk2-2846c19da98ce1dca410e39e5b30e06a1166220d.tar.gz edk2-2846c19da98ce1dca410e39e5b30e06a1166220d.tar.bz2 |
RedfishPkg/RedfishHostInterface: Platform Redfish HI notification
For some use cases, Redfish host interface table relies on
the certain EFI protocols installation at the driver connection.
Redfish host interface DXE driver is not able to build the
SMBIOS type 42h record at driver entry point. This patch adds
the mechanism in Redfish host interface DXE driver to listen
to EFI protocol installed by platform library that indicates
the necessary information is ready for building SMBIOS 42h
record.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Igor Kulchytskyy <igork@ami.com>
Reviewed-by: Nickle Wang <nicklew@nvidia.com>
Diffstat (limited to 'RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c')
-rw-r--r-- | RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c | 73 |
1 files changed, 71 insertions, 2 deletions
diff --git a/RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c b/RedfishPkg/RedfishHostInterfaceDxe/RedfishHostInterfaceDxe.c index 623350b..3e12e0c 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;
}
|