blob: 6c07452d1ed367319bdcfd3c83f14f1eb63352e0 [file]
/** @file
This file defines the manageability transport interface library and functions.
Copyright (C) 2023-2026 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>
#define DEBUG_MANAGEABILITY_INFO DEBUG_MANAGEABILITY
typedef struct _MANAGEABILITY_PROTOCOL_NAME MANAGEABILITY_PROTOCOL_NAME;
typedef struct {
UINT8 *PayloadPointer;
UINT32 PayloadSize;
} MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR;
//
// The information of multi portions of payload it is
// splitted according to transport interface Maximum
// Transfer Unit.
typedef struct {
UINT16 NumberOfPackages; ///< Number of packages in MultiPackages.
MANAGEABILITY_TRANSMISSION_PACKAGE_ATTR MultiPackages[];
} MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES;
/**
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
);
/**
This function splits payload into multiple packages according to
the given transport interface Maximum Transfer Unit (MTU).
@param[in] PreambleSize The additional data size precedes
each package.
@param[in] PostambleSize The additional data size succeeds
each package.
@param[in] Payload Pointer to payload.
@param[in] PayloadSize Payload size in byte.
@param[in] MaximumTransferUnit MTU of transport interface.
@param[out] MultiplePackages Pointer to receive
MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES
structure. Caller has to free the memory
allocated for MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES.
@retval EFI_SUCCESS MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES structure
is returned successfully.
@retval EFI_OUT_OF_RESOURCE Not enough resource to create
MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES structure.
**/
EFI_STATUS
HelperManageabilitySplitPayload (
IN UINT16 PreambleSize,
IN UINT16 PostambleSize,
IN UINT8 *Payload,
IN UINT32 PayloadSize,
IN UINT32 MaximumTransferUnit,
OUT MANAGEABILITY_TRANSMISSION_MULTI_PACKAGES **MultiplePackages
);
/**
This function generates CRC8 with given polynomial.
@param[in] Polynomial Polynomial in 8-bit.
@param[in] CrcInitialValue CRC initial value.
@param[in] BufferStart Pointer to buffer starts the CRC calculation.
@param[in] BufferSize Size of buffer.
@retval UINT8 CRC value.
**/
UINT8
HelperManageabilityGenerateCrc8 (
IN UINT8 Polynomial,
IN UINT8 CrcInitialValue,
IN UINT8 *BufferStart,
IN UINT32 BufferSize
);
/**
Print out manageability transmit payload to the debug output device.
@param[in] Payload Payload to print.
@param[in] PayloadSize Payload size.
**/
VOID
EFIAPI
HelperManageabilityPayLoadDebugPrint (
IN VOID *Payload,
IN UINT32 PayloadSize
);
/**
Prints a debug message and manageability payload to the debug output device.
@param[in] Payload Payload to print.
@param[in] PayloadSize Payload size.
@param[in] Format The format string for the debug message to print.
@param[in] ... The variable argument list whose contents are accessed
based on the format string specified by Format.
**/
VOID
HelperManageabilityDebugPrint (
IN VOID *Payload,
IN UINT32 PayloadSize,
IN CONST CHAR8 *Format,
...
);
///
/// IPMI Helper Functions.
///
/**
This function returns a human readable string of IPMI KCS Completion Code
and returns the corresponding additional status of transport interface.
@param [in] CompletionCode The Completion Code returned from KCS.
@param [out] CompletionCodeStr Human readable string of IPMI Completion Code.
@param [out] AdditionalStatus Return the additional status.
@retval EFI_SUCCESS The information of Completion Code is returned.
@retval EFI_NOT_FOUND No information of Completion Code is returned.
@retval EFI_INVALID_PARAMETER The given parameter is incorrect.
**/
EFI_STATUS
IpmiHelperCheckCompletionCode (
IN UINT8 CompletionCode,
OUT CHAR16 **CompletionCodeStr,
OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus
);
#endif