/** @file This file defines the manageability transport interface library and functions. Copyright (C) 2023-2026 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #pragma once #include #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 * EFIAPI 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 EFIAPI 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 EFIAPI 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 EFIAPI 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 EFIAPI 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 EFIAPI 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 EFIAPI 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 EFIAPI IpmiHelperCheckCompletionCode ( IN UINT8 CompletionCode, OUT CHAR16 **CompletionCodeStr, OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus );