| /** @file | |
| Protocol of EDKII MCTP Protocol. | |
| Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef EDKII_MCTP_PROTOCOL_H_ | |
| #define EDKII_MCTP_PROTOCOL_H_ | |
| #include <IndustryStandard/Mctp.h> | |
| 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; | |
| #endif // EDKII_MCTP_PROTOCOL_H_ |