/** @file Protocol of EDKII MCTP Protocol. Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #pragma once #include typedef struct _EDKII_MCTP_PROTOCOL EDKII_MCTP_PROTOCOL; #define EDKII_MCTP_PROTOCOL_GUID \ { \ 0xE93465C1, 0x9A31, 0x4C96, 0x92, 0x56, 0x22, 0x0A, 0xE1, 0x80, 0xB4, 0x1B \ } #define EDKII_MCTP_PROTOCOL_VERSION_MAJOR 1 #define EDKII_MCTP_PROTOCOL_VERSION_MINOR 0 #define EDKII_MCTP_PROTOCOL_VERSION ((EDKII_MCTP_PROTOCOL_VERSION_MAJOR << 8) |\ EDKII_MCTP_PROTOCOL_VERSION_MINOR) /** This service enables submitting message via EDKII MCTP protocol. @param[in] This EDKII_MCTP_PROTOCOL instance. @param[in] MctpType MCTP message type. @param[in] MctpSourceEndpointId Pointer of MCTP source endpoint ID. Set to NULL means use platform PCD value (PcdMctpSourceEndpointId). @param[in] MctpDestinationEndpointId Pointer of MCTP destination endpoint ID. Set to NULL means use platform PCD value (PcdMctpDestinationEndpointId). @param[in] RequestDataIntegrityCheck Indicates whether MCTP message has integrity check byte. @param[in] RequestData Message Data. @param[in] RequestDataSize Size of message Data. @param[in] RequestTimeout Timeout value in milliseconds. MANAGEABILITY_TRANSPORT_NO_TIMEOUT means no timeout value. @param[out] ResponseData Message Response Data. The completion code is the first byte of response data. @param[in, out] ResponseDataSize Size of Message Response Data. @param[in] ResponseTimeout Timeout value in milliseconds. MANAGEABILITY_TRANSPORT_NO_TIMEOUT means no timeout value. @param[out] AdditionalTransferError MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS. @retval EFI_SUCCESS The message was successfully send to transport interface and a response was successfully received. @retval EFI_NOT_FOUND The message was not successfully sent to transport interface or a response was not successfully received from transport interface. @retval EFI_NOT_READY MCTP transport interface is not ready for MCTP message. @retval EFI_DEVICE_ERROR MCTP transport interface Device hardware error. @retval EFI_TIMEOUT The message time out. @retval EFI_UNSUPPORTED The message was not successfully sent to the transport interface. @retval EFI_OUT_OF_RESOURCES The resource allocation is out of resource or data size error. @retval EFI_INVALID_PARAMETER Both RequestData and ResponseData are NULL **/ typedef EFI_STATUS (EFIAPI *MCTP_SUBMIT_COMMAND)( IN EDKII_MCTP_PROTOCOL *This, IN UINT8 MctpType, IN UINT8 *MctpSourceEndpointId, IN UINT8 *MctpDestinationEndpointId, IN BOOLEAN RequestDataIntegrityCheck, IN UINT8 *RequestData, IN UINT32 RequestDataSize, IN UINT32 RequestTimeout, OUT UINT8 *ResponseData, IN OUT UINT32 *ResponseDataSize, IN UINT32 ResponseTimeout, OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalTransferError ); // // EDKII_MCTP_PROTOCOL Version 1.0 // typedef struct { MCTP_SUBMIT_COMMAND MctpSubmitCommand; } EDKII_MCTP_PROTOCOL_V1_0; /// /// Definitions of EDKII_MCTP_PROTOCOL. /// This is a union that can accommodate the new functionalities defined /// in MCTP Base specification in the future. /// The new added function must has its own EDKII_MCTP_PROTOCOL /// structure with the incremental version number. /// e.g., EDKII_MCTP_PROTOCOL_V1_1. /// /// The new function must be added base on the last version of /// EDKII_MCTP_PROTOCOL to keep the backward compatibility. /// typedef union { EDKII_MCTP_PROTOCOL_V1_0 *Version1_0; } EDKII_MCTP_PROTOCOL_FUNCTION; struct _EDKII_MCTP_PROTOCOL { UINT16 ProtocolVersion; EDKII_MCTP_PROTOCOL_FUNCTION Functions; }; extern EFI_GUID gEdkiiMctpProtocolGuid;