[AMD Official Use Only - General]

It could be removed by accident, V2 is sent.

Thanks
Abner
> -----Original Message-----
> From: Nickle Wang <nick...@nvidia.com>
> Sent: Monday, December 19, 2022 10:39 PM
> To: Chang, Abner <abner.ch...@amd.com>; devel@edk2.groups.io
> Cc: Igor Kulchytskyy <ig...@ami.com>
> Subject: RE: [PATCH 1/2] RedfishPkg/RedfishHostInterface: Platform Redfish HI
> notification
> 
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
> 
> 
> Hi Abner,
> 
> @@ -119,7 +123,7 @@ RedfishCreateSmbiosTable42 (
>      } else {
>        NewProtocolRecords = ReallocatePool (CurrentProtocolsDataLength,
> NewProtocolsDataLength, (VOID *)ProtocolRecords);
>        if (NewProtocolRecords == NULL) {
> -        DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for Redfish host
> interface protocol data.", __FUNCTION__));
> +        DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for Redfish
> + host interface protocol data."));
> 
> I think we need "__FUNCTION__" above. Not sure why you remove it but "%a"
> relies on it.
> 
> Thanks,
> Nickle
> 
> -----Original Message-----
> From: abner.ch...@amd.com <abner.ch...@amd.com>
> Sent: Monday, December 19, 2022 10:17 PM
> To: devel@edk2.groups.io
> Cc: Nickle Wang <nick...@nvidia.com>; Igor Kulchytskyy <ig...@ami.com>
> Subject: [PATCH 1/2] RedfishPkg/RedfishHostInterface: Platform Redfish HI
> notification
> 
> External email: Use caution opening links or attachments
> 
> 
> From: Abner Chang <abner.ch...@amd.com>
> 
> 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.ch...@amd.com>
> Cc: Nickle Wang <nick...@nvidia.com>
> Cc: Igor Kulchytskyy <ig...@ami.com>
> ---
>  .../Include/Library/RedfishHostInterfaceLib.h | 27 ++++++-
>  .../PlatformHostInterfaceLibNull.c            | 26 ++++++-
>  .../RedfishHostInterfaceDxe.c                 | 73 ++++++++++++++++++-
>  3 files changed, 119 insertions(+), 7 deletions(-)
> 
> diff --git a/RedfishPkg/Include/Library/RedfishHostInterfaceLib.h
> b/RedfishPkg/Include/Library/RedfishHostInterfaceLib.h
> index 8d8389b9647..fa9f2d64eea 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,24 @@ 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/PlatformHostInterfaceLibN
> ull.c
> b/RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterfaceLibN
> ull.c
> index b30f9e37a4d..f83f5418d47 100644
> ---
> a/RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterfaceLibN
> ull.c
> +++ b/RedfishPkg/Library/PlatformHostInterfaceLibNull/PlatformHostInterf
> +++ aceLibNull.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 623350bc261..e5b2bb225f9 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.
> 
> @@ -119,7 +123,7 @@ RedfishCreateSmbiosTable42 (
>      } else {
>        NewProtocolRecords = ReallocatePool (CurrentProtocolsDataLength,
> NewProtocolsDataLength, (VOID *)ProtocolRecords);
>        if (NewProtocolRecords == NULL) {
> -        DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for Redfish host
> interface protocol data.", __FUNCTION__));
> +        DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for Redfish
> + host interface protocol data."));
>          FreePool (ProtocolRecords);
>          FreePool (ProtocolRecord);
>          return EFI_OUT_OF_RESOURCES;
> @@ -238,6 +242,27 @@ ON_EXIT:
>    return Status;
>  }
> 
> +/**
> +  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.
> 
> @@ -254,8 +279,50 @@ 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 || EFI_ALREADY_STARTED) {
> +    Status = RedfishCreateSmbiosTable42 ();  }
> +
> +  // Return other erros.
> +  return Status;
>  }
> --
> 2.37.1.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#97565): https://edk2.groups.io/g/devel/message/97565
Mute This Topic: https://groups.io/mt/95765392/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to