From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web10.2559.1652755209054821238 for ; Mon, 16 May 2022 19:40:09 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=VxIChTia; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=0136f5c930=nickle.wang@hpe.com) Received: from pps.filterd (m0134424.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 24GLiqw3018478 for ; Tue, 17 May 2022 02:40:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding; s=pps0720; bh=2CwzUcIAElGN3vr5xA9ZqJgrtIY6fC8NYbpIvJ2Te+o=; b=VxIChTiabMzWLlP4RrLPfIKGiJJamg0G/BKlfx64VQ+31HN4UwRnUJNIEu5cOOruYOJc wf7+BUHOrf092FVG82llKTYvKLjLARl3To17oqU5V/tFLOv5mPwTpxjwOP3IQmAkXrYk nNzXx/G1jXwWDu+5Bb+3QkVbEbAbdUnpNna8XACU2QsHFXJgPrP7rjJjaFVslbxxRSTs bJuuWXl/6N8szVhTgCV3iAAKWLApyHzmSLEFrErO/LQYs/p5qmp2kiBv2p9U3KH8ft73 qpc+Y7zouAfcLO7eu+qQc1whCOuvdejNtmeI4G/vyJj16c0NlHVP1WmGaFH/9uCs1JA9 9Q== Received: from g2t2353.austin.hpe.com (g2t2353.austin.hpe.com [15.233.44.26]) by mx0b-002e3701.pphosted.com (PPS) with ESMTPS id 3g3rwuysdc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 17 May 2022 02:40:08 +0000 Received: from g2t2360.austin.hpecorp.net (g2t2360.austin.hpecorp.net [16.196.225.135]) by g2t2353.austin.hpe.com (Postfix) with ESMTP id 78D3665 for ; Tue, 17 May 2022 02:40:07 +0000 (UTC) Received: from WAFM3XJD5N.asiapacific.hpqcorp.net (unknown [10.43.61.53]) by g2t2360.austin.hpecorp.net (Postfix) with ESMTP id 8A0A13F; Tue, 17 May 2022 02:40:06 +0000 (UTC) From: "Nickle Wang" To: devel@edk2.groups.io Cc: Nickle Wang , Abner Chang Subject: [edk2-staging][PATCH] edk2-staging/RedfishClientPkg: Introduce Redfish event library Date: Tue, 17 May 2022 10:40:03 +0800 Message-Id: <20220517024003.718-1-nickle.wang@hpe.com> X-Mailer: git-send-email 2.32.0.windows.2 MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: djBsxZPIyUv9zKPUcwuuNwXYFlRzA3q8 X-Proofpoint-GUID: djBsxZPIyUv9zKPUcwuuNwXYFlRzA3q8 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.858,Hydra:6.0.486,FMLib:17.11.64.514 definitions=2022-05-16_16,2022-05-16_02,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 bulkscore=0 spamscore=0 clxscore=1011 priorityscore=1501 mlxlogscore=754 impostorscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2205170013 Content-Transfer-Encoding: quoted-printable Add RedfishEventLib to Redfish client package. This library provides interface for Redfish feature drivers to listen to Redfish event such as the event before provisioning and the event after provisioning. Feature driver can perform additional operation before and after Redfish provisioning. Signed-off-by: Nickle Wang Cc: Abner Chang --- .../Include/Guid/RedfishClientEventGroup.h | 27 ++++ .../Include/Library/RedfishEventLib.h | 77 ++++++++++ .../Library/RedfishEventLib/RedfishEventLib.c | 139 ++++++++++++++++++ .../RedfishEventLib/RedfishEventLib.inf | 38 +++++ RedfishClientPkg/RedfishClientLibs.dsc.inc | 2 +- RedfishClientPkg/RedfishClientPkg.dec | 7 +- 6 files changed, 288 insertions(+), 2 deletions(-) create mode 100644 RedfishClientPkg/Include/Guid/RedfishClientEventGroup.h create mode 100644 RedfishClientPkg/Include/Library/RedfishEventLib.h create mode 100644 RedfishClientPkg/Library/RedfishEventLib/RedfishEventLi= b.c create mode 100644 RedfishClientPkg/Library/RedfishEventLib/RedfishEventLi= b.inf diff --git a/RedfishClientPkg/Include/Guid/RedfishClientEventGroup.h b/Redf= ishClientPkg/Include/Guid/RedfishClientEventGroup.h new file mode 100644 index 0000000000..0d88dd4726 --- /dev/null +++ b/RedfishClientPkg/Include/Guid/RedfishClientEventGroup.h @@ -0,0 +1,27 @@ +/** @file=0D + GUID for Redfish Client Event Group GUID=0D +=0D + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
=0D +=0D + SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#ifndef REDFISH_CLIENT_EVENT_GROUP_GUID_H_=0D +#define REDFISH_CLIENT_EVENT_GROUP_GUID_H_=0D +=0D +#define REDFISH_CLIENT_FEATURE_READY_TO_PROVISIONING_GUID \=0D + { \=0D + 0x77E4FC1C, 0x2428, 0x47EE, { 0x9E, 0xEC, 0x8B, 0x77, 0xEF, 0x9D, 0x4E= , 0xF0 } \=0D + }=0D +=0D +extern EFI_GUID gEfiRedfishClientFeatureReadyToProvisioningGuid;=0D +=0D +#define REDFISH_CLIENT_FEATURE_AFTER_PROVISIONING_GUID \=0D + { \=0D + 0xE547CB6F, 0x306F, 0x4226, { 0xAB, 0x70, 0xA0, 0x6E, 0x26, 0xF1, 0x2E= , 0xD0 } \=0D + }=0D +=0D +extern EFI_GUID gEfiRedfishClientFeatureAfterProvisioningGuid;=0D +=0D +#endif=0D diff --git a/RedfishClientPkg/Include/Library/RedfishEventLib.h b/RedfishCl= ientPkg/Include/Library/RedfishEventLib.h new file mode 100644 index 0000000000..1f3d0acf19 --- /dev/null +++ b/RedfishClientPkg/Include/Library/RedfishEventLib.h @@ -0,0 +1,77 @@ +/** @file=0D + This file defines the Redfish event library interface.=0D +=0D + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
=0D +=0D + SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#ifndef REDFISH_EVENT_LIB_H_=0D +#define REDFISH_EVENT_LIB_H_=0D +=0D +#include =0D +=0D +/**=0D + Create an EFI event before Redfish provisioning start.=0D +=0D + @param NotifyFunction The notification function to call when= the event is signaled.=0D + @param NotifyContext The content to pass to NotifyFunction = when the event is signaled.=0D + @param ReadyToProvisioningEvent Returns the EFI event returned from gB= S->CreateEvent(Ex).=0D +=0D + @retval EFI_SUCCESS Event was created.=0D + @retval Other Event was not created.=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +CreateReadyToProvisioningEvent (=0D + IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL=0D + IN VOID *NotifyContext, OPTIONAL=0D + OUT EFI_EVENT *ReadyToProvisioningEvent=0D + );=0D +=0D +/**=0D + Create an EFI event after Redfish provisioning finished.=0D +=0D + @param NotifyFunction The notification function to call when= the event is signaled.=0D + @param NotifyContext The content to pass to NotifyFunction = when the event is signaled.=0D + @param ReadyToProvisioningEvent Returns the EFI event returned from gB= S->CreateEvent(Ex).=0D +=0D + @retval EFI_SUCCESS Event was created.=0D + @retval Other Event was not created.=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +CreateAfterProvisioningEvent (=0D + IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL=0D + IN VOID *NotifyContext, OPTIONAL=0D + OUT EFI_EVENT *ReadyToProvisioningEvent=0D + );=0D +=0D +/**=0D + Signal ready to provisioning event.=0D +=0D + @retval EFI_SUCCESS Event was created.=0D + @retval Other Event was not created.=0D +=0D +**/=0D +EFI_STATUS=0D +SignalReadyToProvisioningEvent (=0D + IN VOID=0D + );=0D +=0D +/**=0D + Signal after provisioning event.=0D +=0D + @retval EFI_SUCCESS Event was created.=0D + @retval Other Event was not created.=0D +=0D +**/=0D +EFI_STATUS=0D +SignalAfterProvisioningEvent (=0D + IN VOID=0D + );=0D +=0D +#endif=0D diff --git a/RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib.c b/R= edfishClientPkg/Library/RedfishEventLib/RedfishEventLib.c new file mode 100644 index 0000000000..1c8cfe53c7 --- /dev/null +++ b/RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib.c @@ -0,0 +1,139 @@ +/** @file=0D + Redfish event library implementation.=0D +=0D + (C) Copyright 2022 Hewlett Packard Enterprise Development LP
=0D +=0D + SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#include =0D +=0D +#include =0D +=0D +#include =0D +#include =0D +#include =0D +#include =0D +#include =0D +=0D +/**=0D + Create an EFI event before Redfish provisioning start.=0D +=0D + @param NotifyFunction The notification function to call when= the event is signaled.=0D + @param NotifyContext The content to pass to NotifyFunction = when the event is signaled.=0D + @param ReadyToProvisioningEvent Returns the EFI event returned from gB= S->CreateEvent(Ex).=0D +=0D + @retval EFI_SUCCESS Event was created.=0D + @retval Other Event was not created.=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +CreateReadyToProvisioningEvent (=0D + IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL=0D + IN VOID *NotifyContext, OPTIONAL=0D + OUT EFI_EVENT *ReadyToProvisioningEvent=0D + )=0D +{=0D + EFI_STATUS Status;=0D +=0D + Status =3D gBS->CreateEventEx (=0D + EVT_NOTIFY_SIGNAL,=0D + TPL_CALLBACK,=0D + (NotifyFunction =3D=3D NULL ? EfiEventEmptyFunction : No= tifyFunction),=0D + NotifyContext,=0D + &gEfiRedfishClientFeatureReadyToProvisioningGuid,=0D + ReadyToProvisioningEvent=0D + );=0D +=0D + return Status;=0D +}=0D +=0D +/**=0D + Create an EFI event after Redfish provisioning finished.=0D +=0D + @param NotifyFunction The notification function to call when= the event is signaled.=0D + @param NotifyContext The content to pass to NotifyFunction = when the event is signaled.=0D + @param ReadyToProvisioningEvent Returns the EFI event returned from gB= S->CreateEvent(Ex).=0D +=0D + @retval EFI_SUCCESS Event was created.=0D + @retval Other Event was not created.=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +CreateAfterProvisioningEvent (=0D + IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL=0D + IN VOID *NotifyContext, OPTIONAL=0D + OUT EFI_EVENT *ReadyToProvisioningEvent=0D + )=0D +{=0D + EFI_STATUS Status;=0D +=0D + Status =3D gBS->CreateEventEx (=0D + EVT_NOTIFY_SIGNAL,=0D + TPL_CALLBACK,=0D + (NotifyFunction =3D=3D NULL ? EfiEventEmptyFunction : No= tifyFunction),=0D + NotifyContext,=0D + &gEfiRedfishClientFeatureAfterProvisioningGuid,=0D + ReadyToProvisioningEvent=0D + );=0D +=0D + return Status;=0D +}=0D +=0D +/**=0D + Signal ready to provisioning event.=0D +=0D + @retval EFI_SUCCESS Event was created.=0D + @retval Other Event was not created.=0D +=0D +**/=0D +EFI_STATUS=0D +SignalReadyToProvisioningEvent (=0D + IN VOID=0D + )=0D +{=0D + EFI_STATUS Status;=0D + EFI_EVENT Event;=0D +=0D + Status =3D CreateReadyToProvisioningEvent (NULL, NULL, &Event);=0D + if (EFI_ERROR (Status)) {=0D + DEBUG ((DEBUG_ERROR, "%a, failed to create after provisioning event\n"= , __FUNCTION__));=0D + return Status;=0D + }=0D +=0D + gBS->SignalEvent (Event);=0D + gBS->CloseEvent (Event);=0D +=0D + return EFI_SUCCESS;=0D +}=0D +=0D +/**=0D + Signal after provisioning event.=0D +=0D + @retval EFI_SUCCESS Event was created.=0D + @retval Other Event was not created.=0D +=0D +**/=0D +EFI_STATUS=0D +SignalAfterProvisioningEvent (=0D + IN VOID=0D + )=0D +{=0D + EFI_STATUS Status;=0D + EFI_EVENT Event;=0D +=0D + Status =3D CreateAfterProvisioningEvent (NULL, NULL, &Event);=0D + if (EFI_ERROR (Status)) {=0D + DEBUG ((DEBUG_ERROR, "%a, failed to create after provisioning event\n"= , __FUNCTION__));=0D + return Status;=0D + }=0D +=0D + gBS->SignalEvent (Event);=0D + gBS->CloseEvent (Event);=0D +=0D + return EFI_SUCCESS;=0D +}=0D +=0D diff --git a/RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib.inf b= /RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib.inf new file mode 100644 index 0000000000..edafca0c65 --- /dev/null +++ b/RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib.inf @@ -0,0 +1,38 @@ +## @file=0D +#=0D +# (C) Copyright 2022 Hewlett Packard Enterprise Development LP
=0D +#=0D +# SPDX-License-Identifier: BSD-2-Clause-Patent=0D +#=0D +##=0D +=0D +[Defines]=0D + INF_VERSION =3D 0x00010006=0D + BASE_NAME =3D RedfishEventLib=0D + FILE_GUID =3D C4F7E27D-2338-43EA-9D1F-D10960E36521= =0D + MODULE_TYPE =3D DXE_DRIVER=0D + VERSION_STRING =3D 1.0=0D + LIBRARY_CLASS =3D RedfishEventLib| DXE_DRIVER UEFI_DRIV= ER=0D +=0D +#=0D +# VALID_ARCHITECTURES =3D IA32 X64 EBC=0D +#=0D +=0D +[Sources]=0D + RedfishEventLib.c=0D +=0D +[Packages]=0D + MdePkg/MdePkg.dec=0D + MdeModulePkg/MdeModulePkg.dec=0D + RedfishPkg/RedfishPkg.dec=0D + RedfishClientPkg/RedfishClientPkg.dec=0D +=0D +[LibraryClasses]=0D + BaseLib=0D + DebugLib=0D + UefiBootServicesTableLib=0D + UefiLib=0D +=0D +[Guids]=0D + gEfiRedfishClientFeatureReadyToProvisioningGuid=0D + gEfiRedfishClientFeatureAfterProvisioningGuid=0D diff --git a/RedfishClientPkg/RedfishClientLibs.dsc.inc b/RedfishClientPkg/= RedfishClientLibs.dsc.inc index 5467acedd0..91e5de4296 100644 --- a/RedfishClientPkg/RedfishClientLibs.dsc.inc +++ b/RedfishClientPkg/RedfishClientLibs.dsc.inc @@ -27,4 +27,4 @@ RedfishPlatformConfigLib|RedfishPkg/Library/RedfishPlatformConfigLib/Red= fishPlatformConfigLib.inf=0D RedfishContentCodingLib|RedfishPkg/Library/RedfishContentCodingLibNull/R= edfishContentCodingLibNull.inf=0D ConverterCommonLib|RedfishClientPkg/ConverterLib/edk2library/ConverterCo= mmonLib/ConverterCommonLib.inf=0D -=0D + RedfishEventLib|RedfishClientPkg/Library/RedfishEventLib/RedfishEventLib= .inf=0D diff --git a/RedfishClientPkg/RedfishClientPkg.dec b/RedfishClientPkg/Redfi= shClientPkg.dec index 09df062dd3..56e542f03c 100644 --- a/RedfishClientPkg/RedfishClientPkg.dec +++ b/RedfishClientPkg/RedfishClientPkg.dec @@ -1,7 +1,7 @@ ## @file=0D # Redfish Client Package=0D #=0D -# (C) Copyright 2021 Hewlett Packard Enterprise Development LP
=0D +# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
=0D #=0D # SPDX-License-Identifier: BSD-2-Clause-Patent=0D ##=0D @@ -21,6 +21,7 @@ =0D [LibraryClasses]=0D RedfishFeatureUtilityLib|Include/Library/RedfishFeatureUtilityLib.h=0D + RedfishEventLib|Include/Library/RedfishEventLib.h=0D =0D [LibraryClasses.Common.Private]=0D ## @libraryclass Redfish Helper Library=0D @@ -39,6 +40,10 @@ ## Include/Guid/RedfishClientPkgTokenSpace.h=0D gEfiRedfishClientPkgTokenSpaceGuid =3D { 0x8c444dae, 0x728b, 0x48ee, = { 0x9e, 0x19, 0x8f, 0x0a, 0x3d, 0x4e, 0x9c, 0xc8 } }=0D =0D + ## Include/Guid/RedfishClientEventGroup.h=0D + gEfiRedfishClientFeatureReadyToProvisioningGuid =3D { 0x77E4FC1C, 0x2428= , 0x47EE, { 0x9E, 0xEC, 0x8B, 0x77, 0xEF, 0x9D, 0x4E, 0xF0 } }=0D + gEfiRedfishClientFeatureAfterProvisioningGuid =3D { 0xE547CB6F, 0x306F= , 0x4226, { 0xAB, 0x70, 0xA0, 0x6E, 0x26, 0xF1, 0x2E, 0xD0 } }=0D +=0D [PcdsFixedAtBuild]=0D gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaStringSize|32|UINT= 32|0x10000001=0D gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaVersionSize|8|UINT= 32|0x10000002=0D --=20 2.32.0.windows.2