[AMD Official Use Only - General]


> -----Original Message-----
> From: Tinh Nguyen <tinhngu...@amperemail.onmicrosoft.com>
> Sent: Friday, March 24, 2023 2:31 AM
> To: devel@edk2.groups.io; Chang, Abner <abner.ch...@amd.com>
> Cc: Liming Gao <gaolim...@byosoft.com.cn>; Isaac Oram
> <isaac.w.o...@intel.com>; Nate DeSimone
> <nathaniel.l.desim...@intel.com>; Nickle Wang <nick...@nvidia.com>;
> Igor Kulchytskyy <ig...@ami.com>; Attar, AbdulLateef (Abdul Lateef)
> <abdullateef.at...@amd.com>
> Subject: Re: [edk2-devel] [PATCH v4 5/9] ManageabilityPkg: Add
> ManageabilityTransportHelperLib
> 
> Caution: This message originated from an External Source. Use proper
> caution when opening attachments, clicking links, or responding.
> 
> 
> Hi Abner,
> 
> On 3/22/2023 9:48 AM, Chang, Abner via groups.io wrote:
> > From: Abner Chang <abner.ch...@amd.com>
> >
> > The helper functions library facilitates reducing duplicated code in
> > the manageability transport library instances.
> >
> > Signed-off-by: Abner Chang <abner.ch...@amd.com>
> > Cc: Liming Gao <gaolim...@byosoft.com.cn>
> > Cc: Isaac Oram <isaac.w.o...@intel.com>
> > Cc: Nate DeSimone <nathaniel.l.desim...@intel.com>
> > Cc: Nickle Wang <nick...@nvidia.com>
> > Cc: Igor Kulchytskyy <ig...@ami.com>
> > Cc: Abdul Lateef Attar <abdat...@amd.com>
> > ---
> >   .../ManageabilityPkg/ManageabilityPkg.dec     |  24 +-
> >   .../Include/Dsc/Manageability.dsc             |   2 +
> >   .../BaseManageabilityTransportHelper.inf      |  41 +++
> >   .../Library/ManageabilityTransportHelperLib.h |  93 +++++++
> >   .../BaseManageabilityTransportHelper.c        | 261 ++++++++++++++++++
> >   .../BaseManageabilityTransportHelper.uni      |  13 +
> >   6 files changed, 433 insertions(+), 1 deletion(-)
> >   create mode 100644
> Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/B
> aseManageabilityTransportHelper.inf
> >   create mode 100644
> Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelperLi
> b.h
> >   create mode 100644
> Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/B
> aseManageabilityTransportHelper.c
> >   create mode 100644
> > Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/
> > BaseManageabilityTransportHelper.uni
> >
> > diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec
> > b/Features/ManageabilityPkg/ManageabilityPkg.dec
> > index 92ba4538c0..ebbb04dc0e 100644
> > --- a/Features/ManageabilityPkg/ManageabilityPkg.dec
> > +++ b/Features/ManageabilityPkg/ManageabilityPkg.dec
> > @@ -22,5 +22,27 @@
> >     #   Manageability Transport Library definitions
> >
> > ManageabilityTransportLib|Include/Library/ManageabilityTransportLib.h
> >
> > +  ##  @libraryclass Manageability Transport Helper Library
> > +  #   Provide the help functions to use ManageabilityTransportLib
> > +
> > + ManageabilityTransportHelperLib|Include/Library/ManageabilityTranspo
> > + rtHelperLib.h
> > +
> >   [Guids]
> > -  gManageabilityPkgTokenSpaceGuid = { 0xBDEFFF48, 0x1C31, 0x49CD, {
> > 0xA7, 0x6D, 0x92, 0x9E, 0x60, 0xDB, 0xB9, 0xF8 } }
> > +  gManageabilityPkgTokenSpaceGuid   = { 0xBDEFFF48, 0x1C31, 0x49CD,
> { 0xA7, 0x6D, 0x92, 0x9E, 0x60, 0xDB, 0xB9, 0xF8 } }
> > +
> > +  # Manageability Transport Interface type  #  # Manageability
> > + Transport KCS
> > +  gManageabilityTransportKcsGuid    = { 0x5A6E64E9, 0xFD47, 0x4086,
> { 0xAA, 0xB0, 0x7A, 0x5F, 0xD7, 0x6B, 0x02, 0x2E } }
> > +  # Manageability Transport I2C
> > +  gManageabilityTransportI2CGuid    = { 0x5B174658, 0x8263, 0x4CB8,
> { 0xA0, 0x0F, 0xD6, 0x82, 0xE6, 0xBC, 0x74, 0x93 } }
> > +  # Manageability Transport PCI VDM
> > +  gManageabilityTransportPciVdmGuid = { 0x388021A7, 0xFB59, 0x4811, {
> > + 0x9D, 0xA7, 0xD5, 0x63, 0x7D, 0x04, 0xA7, 0x2F } }
> > +
> > +  # Manageability Protocol Specification  #  # Manageability Protocol
> > + IPMI
> > +  gManageabilityProtocolIpmiGuid    = { 0x36ACA47C, 0xCC80, 0x473B,
> { 0xAB, 0xEC, 0xF3, 0x98, 0xFF, 0x87, 0x74, 0x5B } }
> > +  # Manageability Protocol MCTP
> > +  gManageabilityProtocolMctpGuid    = { 0x76FED8F1, 0x0BE5, 0x4269,
> { 0xA3, 0x1A, 0x38, 0x0F, 0x54, 0xF1, 0xA1, 0x8A } }
> > +  # Manageability Protocol PLDM
> > +  gManageabilityProtocolPldmGuid    = { 0x3958090D, 0x69DD, 0x4868,
> { 0x9C, 0x41, 0xC9, 0xAC, 0x31, 0xB5, 0x25, 0xC5 } }
> > diff --git a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc
> > b/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc
> > index 2cb63c1ca6..994c93f17c 100644
> > --- a/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc
> > +++ b/Features/ManageabilityPkg/Include/Dsc/Manageability.dsc
> > @@ -5,6 +5,8 @@
> >   # SPDX-License-Identifier: BSD-2-Clause-Patent
> >   #
> >   ##
> > +[LibraryClasses]
> > +
> >
> +ManageabilityTransportHelperLib|ManageabilityPkg/Library/BaseManagea
> b
> > +ilityTransportHelperLib/BaseManageabilityTransportHelper.inf
> >
> >   [LibraryClasses.ARM, LibraryClasses.AARCH64]
> >     #
> > diff --git
> > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLi
> > b/BaseManageabilityTransportHelper.inf
> > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLi
> > b/BaseManageabilityTransportHelper.inf
> > new file mode 100644
> > index 0000000000..95c3362ddb
> > --- /dev/null
> > +++
> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelp
> > +++ erLib/BaseManageabilityTransportHelper.inf
> > @@ -0,0 +1,41 @@
> > +## @file
> > +# Null instance of Manageability Transport Helper Library # #
> > +Copyright (C) 2023 Advanced Micro Devices, Inc. All rights
> > +reserved.<BR> # SPDX-License-Identifier: BSD-2-Clause-Patent # ##
> > +
> > +[Defines]
> > +  INF_VERSION                    = 0x0001001B
> > +  BASE_NAME                      = BaseManageabilityTransportHelper
> > +  MODULE_UNI_FILE                = BaseManageabilityTransportHelper.uni
> > +  FILE_GUID                      = 52F2DE11-A8FC-4A06-B8C6-10DCF4A7397C
> > +  MODULE_TYPE                    = BASE
> > +  VERSION_STRING                 = 1.0
> > +  LIBRARY_CLASS                  = ManageabilityTransportHelperLib
> > +
> > +#
> > +#  VALID_ARCHITECTURES           = IA32 X64 ARM AARCH64
> > +#
> > +
> > +[Sources]
> > +  BaseManageabilityTransportHelper.c
> > +
> > +[LibraryClasses]
> > +  BaseMemoryLib
> > +  DebugLib
> > +
> > +[Packages]
> > +  ManageabilityPkg/ManageabilityPkg.dec
> > +  MdePkg/MdePkg.dec
> > +
> > +[Guids]
> > +  gManageabilityTransportKcsGuid
> > +  gManageabilityTransportI2CGuid
> > +  gManageabilityTransportPciVdmGuid
> > +  gManageabilityTransportMctpGuid
> 
> Please check here since I am unable to find the definition of
> gManageabilityTransportMctpGuid.
This is defined in the dec file

> 
> 
> > +  gManageabilityProtocolIpmiGuid
> > +  gManageabilityProtocolMctpGuid
> > +  gManageabilityProtocolPldmGuid
> > +
> > diff --git
> > a/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelp
> > erLib.h
> > b/Features/ManageabilityPkg/Include/Library/ManageabilityTransportHelp
> > erLib.h
> > new file mode 100644
> > index 0000000000..718ac34a1f
> > --- /dev/null
> > +++ b/Features/ManageabilityPkg/Include/Library/ManageabilityTransport
> > +++ HelperLib.h
> > @@ -0,0 +1,93 @@
> > +/** @file
> > +
> > +  This file defines the manageability transport interface library and
> functions.
> > +
> > +  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights
> > +reserved.<BR>
> > +  SPDX-License-Identifier: BSD-2-Clause-Patent **/
> > +
> > +#ifndef MANAGEABILITY_TRANSPORT_HELPER_LIB_H_
> > +#define MANAGEABILITY_TRANSPORT_HELPER_LIB_H_
> > +
> > +#include <Library/ManageabilityTransportLib.h>
> > +
> > +typedef struct _MANAGEABILITY_PROTOCOL_NAME
> > +MANAGEABILITY_PROTOCOL_NAME;
> > +
> > +/**
> > +  Helper function returns the human readable name of Manageability
> specification.
> > +
> > +  @param[out]  SpecificationGuid         The Manageability specification
> GUID
> > +
> > +  @retval      !NULL  Human readable name is returned;
> > +  @retval       NULL  No string found, the given Manageability 
> > specification
> is
> > +                      not supported.
> > +**/
> > +CHAR16 *
> > +HelperManageabilitySpecName (
> > +  IN EFI_GUID  *SpecificationGuid
> > +  );
> > +
> > +/**
> > +  Helper function to check if the Manageability specification is
> > +supported
> > +  by transport interface or not.
> > +
> > +  @param[in]  TransportGuid                         GUID of the transport 
> > interface.
> > +  @param[in]  SupportedManageabilityProtocolArray   The Manageability
> protocols supported
> > +                                                    by the transport 
> > interface.
> > +  @param[in]  NumberOfSupportedProtocolInArray      Number of
> protocols in the array.
> > +  @param[in]  ManageabilityProtocolToCheck          The Manageability
> specification to check.
> > +
> > +  @retval      EFI_SUCCESS            Token is created successfully.
> > +  @retval      EFI_INVALID_PARAMETER  Either
> NumberOfSupportedProtocolInArray = 0 or
> > +                                      SupportedManageabilityProtocolArray 
> > = NULL.
> > +  @retval      EFI_UNSUPPORTED        Out of resource to create a new
> transport session.
> > +               Otherwise              Other errors.
> > +**/
> > +EFI_STATUS
> > +HelperManageabilityCheckSupportedSpec (
> > +  IN  EFI_GUID  *TransportGuid,
> > +  IN  EFI_GUID  **SupportedManageabilityProtocolArray,
> > +  IN  UINT8     NumberOfSupportedProtocolInArray,
> > +  IN  EFI_GUID  *ManageabilityProtocolToCheck
> > +  );
> > +
> > +/**
> > +  Helper function to acquire the Manageability transport token.
> > +
> > +  @param[in]  ManageabilityProtocolSpec   The Manageability protocol
> specification.
> > +  @param[out] TransportToken              Pointer to receive Manageability
> transport
> > +                                          token.
> > +
> > +  @retval      EFI_SUCCESS            Token is created successfully.
> > +  @retval      EFI_OUT_OF_RESOURCES   Out of resource to create a new
> transport session.
> > +  @retval      EFI_UNSUPPORTED        Token is created successfully.
> > +  @retval      EFI_DEVICE_ERROR       The transport interface has problems
> > +  @retval      EFI_INVALID_PARAMETER  INput parameter is not valid.
> > +               Otherwise              Other errors.
> > +**/
> > +EFI_STATUS
> > +HelperAcquireManageabilityTransport (
> > +  IN  EFI_GUID                       *ManageabilityProtocolSpec,
> > +  OUT MANAGEABILITY_TRANSPORT_TOKEN  **TransportToken
> > +  );
> > +
> > +/**
> > +  Helper function to initial the transport interface.
> > +
> > +  @param[in]  TransportToken              Transport token.
> > +  @param[in]  HardwareInfo                Optional hardware information of
> transport interface.
> > +  @param[out] TransportAdditionalStatus   Transport additional status.
> > +
> > +  @retval      EFI_SUCCESS            Transport interface is initiated 
> > successfully.
> > +  @retval      EFI_DEVICE_ERROR       The transport interface has problems
> > +  @retval      EFI_INVALID_PARAMETER  INput parameter is not valid.
> > +               Otherwise              Other errors.
> > +**/
> > +EFI_STATUS
> > +HelperInitManageabilityTransport (
> > +  IN  MANAGEABILITY_TRANSPORT_TOKEN                 *TransportToken,
> > +  IN  MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION
> HardwareInfo OPTIONAL,
> > +  OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS
> *TransportAdditionalStatus OPTIONAL
> > +  );
> > +
> > +#endif
> > diff --git
> > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLi
> > b/BaseManageabilityTransportHelper.c
> > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLi
> > b/BaseManageabilityTransportHelper.c
> > new file mode 100644
> > index 0000000000..81da209764
> > --- /dev/null
> > +++
> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelp
> > +++ erLib/BaseManageabilityTransportHelper.c
> > @@ -0,0 +1,261 @@
> > +/** @file
> > +  Null instance of Manageability Transport Helper Library
> > +
> > +  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights
> > +reserved.<BR>
> > +  SPDX-License-Identifier: BSD-2-Clause-Patent **/
> > +
> > +#include <Uefi.h>
> > +#include <Library/BaseMemoryLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/ManageabilityTransportHelperLib.h>
> > +
> > +//
> > +// BaseManageabilityTransportHelper is used by PEI, DXE and SMM.
> > +// Make sure the global variables added here should be unchangable.
> > +//
> > +MANAGEABILITY_SPECIFICATION_NAME  ManageabilitySpecNameTable[]
> = {
> > +  { &gManageabilityTransportKcsGuid,    L"KCS"     },
> > +  { &gManageabilityTransportI2CGuid,    L"I2C"     },
> 
> Should we use SMBUS_I2C instead of I2C? When we use
> SmbusLib/SmbusHcProtocol for IPMI SSIF and name it I2C, it causes a lot of
> confusion.
> 
> The term SMBus is used in the IPMI specification, and the term SMBus/I2c is
> used in the MCTP specification.
Yes, SMBUS_I2C looks to me good. I will send the patch to update this. 
Currently there is no implementation for I2C yet.
Thanks

Abner
> 
> - Tinh
> 
> > +  { &gManageabilityTransportPciVdmGuid, L"PCI VDM" },
> > +  { &gManageabilityTransportMctpGuid,   L"MCTP"    },
> > +  { &gManageabilityProtocolIpmiGuid,    L"IPMI"    },
> > +  { &gManageabilityProtocolMctpGuid,    L"MCTP"    },
> > +  { &gManageabilityProtocolPldmGuid,    L"PLDM"    }
> > +};
> > +
> > +UINT16  mManageabilitySpecNum = sizeof
> (ManageabilitySpecNameTable)/
> > +sizeof (MANAGEABILITY_SPECIFICATION_NAME);
> > +
> > +/**
> > +  Helper function returns the human readable name of Manageability
> specification.
> > +
> > +  @param[in]  SpecificationGuid         The Manageability specification 
> > GUID
> > +
> > +  @retval      !NULL  Human readable name is returned;
> > +  @retval       NULL  No string found, the given Manageability 
> > specification
> is
> > +                      not supported.
> > +**/
> > +CHAR16 *
> > +HelperManageabilitySpecName (
> > +  IN EFI_GUID  *SpecificationGuid
> > +  )
> > +{
> > +  UINT16                            Index;
> > +  MANAGEABILITY_SPECIFICATION_NAME  *ThisSpec;
> > +
> > +  if (mManageabilitySpecNum == 0) {
> > +    return NULL;
> > +  }
> > +
> > +  if (SpecificationGuid == NULL || IsZeroGuid (SpecificationGuid)) {
> > +    DEBUG((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or
> zero GUID.\n", __FUNCTION__));
> > +    return NULL;
> > +  }
> > +
> > +  ThisSpec = ManageabilitySpecNameTable;  for (Index = 0; Index <
> > + mManageabilitySpecNum; Index++) {
> > +    if (CompareGuid (
> > +          SpecificationGuid,
> > +          ThisSpec->SpecificationGuid
> > +          ))
> > +    {
> > +      return ThisSpec->SpecificationName;
> > +    }
> > +
> > +    ThisSpec++;
> > +  }
> > +
> > +  return NULL;
> > +}
> > +
> > +/**
> > +  Helper function to check if the Manageability specification is
> > +supported
> > +  by transport interface or not.
> > +
> > +  @param[in]  TransportGuid                         GUID of the transport 
> > interface.
> > +  @param[in]  SupportedManageabilityProtocolArray   The Manageability
> protocols supported
> > +                                                    by the transport 
> > interface.
> > +  @param[in]  NumberOfSupportedProtocolInArray      Number of
> protocols in the array.
> > +  @param[in]  ManageabilityProtocolToCheck          The Manageability
> specification to check.
> > +
> > +  @retval      EFI_SUCCESS            Token is created successfully.
> > +  @retval      EFI_INVALID_PARAMETER  Either
> NumberOfSupportedProtocolInArray = 0 or
> > +                                      SupportedManageabilityProtocolArray 
> > = NULL.
> > +  @retval      EFI_UNSUPPORTED        Out of resource to create a new
> transport session.
> > +               Otherwise              Other errors.
> > +**/
> > +EFI_STATUS
> > +HelperManageabilityCheckSupportedSpec (
> > +  IN  EFI_GUID  *TransportGuid,
> > +  IN  EFI_GUID  **SupportedManageabilityProtocolArray,
> > +  IN  UINT8     NumberOfSupportedProtocolInArray,
> > +  IN  EFI_GUID  *ManageabilityProtocolToCheck
> > +  )
> > +{
> > +  UINT16    Index;
> > +  EFI_GUID  **ThisSpecGuid;
> > +
> > +  if ((NumberOfSupportedProtocolInArray == 0) ||
> (SupportedManageabilityProtocolArray == NULL)) {
> > +    return EFI_INVALID_PARAMETER;
> > +  }
> > +
> > +  if (TransportGuid == NULL ||
> > +      IsZeroGuid (TransportGuid) ||
> > +      ManageabilityProtocolToCheck == NULL ||
> > +      IsZeroGuid (ManageabilityProtocolToCheck)
> > +      ) {
> > +      DEBUG((DEBUG_ERROR, "%a: Improper input GUIDs, could be NULL or
> zero GUID.\n", __FUNCTION__));
> > +    return EFI_INVALID_PARAMETER;
> > +  }
> > +
> > +  ThisSpecGuid = SupportedManageabilityProtocolArray;
> > +  for (Index = 0; Index < NumberOfSupportedProtocolInArray; Index++) {
> > +    if (CompareGuid (
> > +          *ThisSpecGuid,
> > +          ManageabilityProtocolToCheck
> > +          ))
> > +    {
> > +      DEBUG ((
> > +        DEBUG_VERBOSE,
> > +        "%a: Transport interface %s supports %s manageability
> specification.\n",
> > +        __FUNCTION__,
> > +        HelperManageabilitySpecName (TransportGuid),
> > +        HelperManageabilitySpecName (ManageabilityProtocolToCheck)
> > +        ));
> > +      return EFI_SUCCESS;
> > +    }
> > +
> > +    ThisSpecGuid++;
> > +  }
> > +
> > +  DEBUG ((
> > +    DEBUG_ERROR,
> > +    "%a: Transport interface %s doesn't support %s manageability
> specification.\n",
> > +    __FUNCTION__,
> > +    HelperManageabilitySpecName (TransportGuid),
> > +    HelperManageabilitySpecName (ManageabilityProtocolToCheck)
> > +    ));
> > +  return EFI_UNSUPPORTED;
> > +}
> > +
> > +/**
> > +  Helper function to acquire the Manageability transport token.
> > +
> > +  @param[in]  ManageabilityProtocolSpec   The Manageability protocol
> specification.
> > +  @param[out] TransportToken              Pointer to receive Manageability
> transport
> > +                                          token.
> > +
> > +  @retval      EFI_SUCCESS            Token is created successfully.
> > +  @retval      EFI_OUT_OF_RESOURCES   Out of resource to create a new
> transport session.
> > +  @retval      EFI_UNSUPPORTED        Token is created successfully.
> > +  @retval      EFI_INVALID_PARAMETER  Input parameter is not valid.
> > +               Otherwise              Other errors.
> > +**/
> > +EFI_STATUS
> > +HelperAcquireManageabilityTransport (
> > +  IN  EFI_GUID                       *ManageabilityProtocolSpec,
> > +  OUT MANAGEABILITY_TRANSPORT_TOKEN  **TransportToken
> > +  )
> > +{
> > +  EFI_STATUS  Status;
> > +  CHAR16      *ManageabilityProtocolName;
> > +  CHAR16      *ManageabilityTransportName;
> > +
> > +  DEBUG ((DEBUG_INFO, "%a: Entry\n", __FUNCTION__));  if
> > + ((TransportToken == NULL) || (ManageabilityProtocolSpec == NULL)) {
> > +    DEBUG ((DEBUG_ERROR, "%a: One of the required input parameters is
> NULL.\n", __FUNCTION__));
> > +    return EFI_INVALID_PARAMETER;
> > +  }
> > +
> > +  *TransportToken           = NULL;
> > +  ManageabilityProtocolName = HelperManageabilitySpecName
> > + (ManageabilityProtocolSpec);  if (ManageabilityProtocolName == NULL) {
> > +    DEBUG ((DEBUG_ERROR, "%a: Unsupported Manageability Protocol
> Specification.\n", __FUNCTION__));
> > +    return EFI_UNSUPPORTED;
> > +  }
> > +
> > +  DEBUG ((DEBUG_INFO, "  Manageability protocol %s is going to
> > + acquire transport interface token...\n",
> > + ManageabilityProtocolName));
> > +
> > +  Status = AcquireTransportSession (ManageabilityProtocolSpec,
> > + TransportToken);  if (Status == EFI_UNSUPPORTED) {
> > +    DEBUG ((DEBUG_ERROR, "%a: No supported transport interface for %s
> packet.\n", __FUNCTION__, ManageabilityProtocolName));
> > +    return Status;
> > +  }
> > +
> > +  if (EFI_ERROR (Status)) {
> > +    DEBUG ((
> > +      DEBUG_ERROR,
> > +      "%a: Fail to acquire Manageability transport token for %s (%r).\n",
> > +      __FUNCTION__,
> > +      ManageabilityProtocolName,
> > +      Status
> > +      ));
> > +    return Status;
> > +  }
> > +
> > +  ManageabilityTransportName = HelperManageabilitySpecName
> > + ((*TransportToken)->Transport->ManageabilityTransportSpecification);
> > +  if (ManageabilityTransportName == NULL) {
> > +    DEBUG ((DEBUG_ERROR, "%a: Unsupported Manageability Transport
> Interface Specification\n", __FUNCTION__));
> > +    return EFI_UNSUPPORTED;
> > +  }
> > +
> > +  DEBUG ((DEBUG_INFO, "%a: This is the transfer session for %s over
> > +%s\n", __FUNCTION__, ManageabilityProtocolName,
> > +ManageabilityTransportName));
> > +  return Status;
> > +}
> > +
> > +/**
> > +  Helper function to initial the transport interface.
> > +
> > +  @param[in]  TransportToken              Transport token.
> > +  @param[in]  HardwareInfo                Optional hardware information of
> transport interface.
> > +  @param[out] TransportAdditionalStatus   Transport additional status.
> > +
> > +  @retval      EFI_SUCCESS            Transport interface is initiated 
> > successfully.
> > +  @retval      EFI_DEVICE_ERROR       The transport interface has problems
> > +  @retval      EFI_INVALID_PARAMETER  INput parameter is not valid.
> > +               Otherwise              Other errors.
> > +**/
> > +EFI_STATUS
> > +HelperInitManageabilityTransport (
> > +  IN  MANAGEABILITY_TRANSPORT_TOKEN                 *TransportToken,
> > +  IN  MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION
> HardwareInfo OPTIONAL,
> > +  OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS
> *TransportAdditionalStatus OPTIONAL
> > +  )
> > +{
> > +  EFI_STATUS  Status;
> > +
> > +  if (TransportToken == NULL) {
> > +    DEBUG ((DEBUG_ERROR, "%a: TransportToken is invalid.\n",
> __FUNCTION__));
> > +    return EFI_INVALID_PARAMETER;
> > +  }
> > +
> > +  // Initial transport interface.
> > +  Status =
> > + TransportToken->Transport->Function.Version1_0->TransportInit
> (TransportToken, HardwareInfo);  if ((Status != EFI_SUCCESS) && (Status !=
> EFI_ALREADY_STARTED)) {
> > +    if (Status == EFI_DEVICE_ERROR) {
> > +      // Try to reset the transport and initialize it again.
> > +      Status = TransportToken->Transport->Function.Version1_0-
> >TransportReset (
> > +                                                                 
> > TransportToken,
> > +                                                                 
> > TransportAdditionalStatus
> > +                                                                 );
> > +      if (EFI_ERROR (Status)) {
> > +        if (Status == EFI_UNSUPPORTED) {
> > +          DEBUG ((DEBUG_ERROR, "%a: Transport interface doesn't have
> reset capability.\n", __FUNCTION__));
> > +        } else {
> > +          DEBUG ((DEBUG_ERROR, "%a: Fail to reset transport interface
> (%r).\n", __FUNCTION__, Status));
> > +        }
> > +
> > +        Status = EFI_DEVICE_ERROR;
> > +      } else {
> > +        Status = TransportToken->Transport->Function.Version1_0-
> >TransportInit (TransportToken, HardwareInfo);
> > +        if (EFI_ERROR (Status)) {
> > +          DEBUG ((DEBUG_ERROR, "%a: Transport interface is not able to use
> after the reset (%r).\n", __FUNCTION__, Status));
> > +        }
> > +      }
> > +    } else {
> > +      DEBUG ((DEBUG_ERROR, "%a: Transport interface is not able to use
> (%r).\n", __FUNCTION__, Status));
> > +    }
> > +  }
> > +
> > +  return Status;
> > +}
> > diff --git
> > a/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLi
> > b/BaseManageabilityTransportHelper.uni
> > b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelperLi
> > b/BaseManageabilityTransportHelper.uni
> > new file mode 100644
> > index 0000000000..dfb6051aeb
> > --- /dev/null
> > +++
> b/Features/ManageabilityPkg/Library/BaseManageabilityTransportHelp
> > +++ erLib/BaseManageabilityTransportHelper.uni
> > @@ -0,0 +1,13 @@
> > +// /** @file
> > +// Null instance of Manageability Transport Helper Library // //
> > +Copyright (C) 2023 Advanced Micro Devices, Inc. All rights
> > +reserved.<BR> // // SPDX-License-Identifier: BSD-2-Clause-Patent //
> > +// **/
> > +
> > +#string STR_MODULE_ABSTRACT             #language en-US "Manageability
> Transport Helper Library"
> > +
> > +#string STR_MODULE_DESCRIPTION          #language en-US "Manageability
> Transport Helper Functions."
> > +


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


Reply via email to