--- /dev/null
+/** @file\r
+\r
+ The definitions of DMTF Management Component Transport Protocol (MCTP)\r
+ Base Specification.\r
+\r
+ Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+ @par Revision Reference:\r
+ DMTF Management Component Transport Protocol (MCTP) Base Specification\r
+ Version 1.3.1\r
+ https://www.dmtf.org/sites/default/files/standards/documents/DSP0236_1.3.1.pdf\r
+**/\r
+\r
+#ifndef MCTP_H_\r
+#define MCTP_H_\r
+\r
+///\r
+/// Definitions of endpoint ID\r
+///\r
+#define MCTP_NULL_DESTINATION_ENDPOINT_ID 0\r
+#define MCTP_NULL_SOURCE_ENDPOINT_ID 0\r
+#define MCTP_RESERVED_ENDPOINT_START_ID 1\r
+#define MCTP_RESERVED_ENDPOINT_END_ID 7\r
+#define MCTP_BROADCAST_ENDPOINT_ID 0xFF\r
+\r
+///\r
+/// MCTP Control Commands\r
+///\r
+#define MCTP_CONTROL_RESERVED 0x00\r
+#define MCTP_CONTROL_SET_ENDPOINT_ID 0x01\r
+#define MCTP_CONTROL_GET_ENDPOINT_ID 0x02\r
+#define MCTP_CONTROL_GET_ENDPOINT_UUID 0x03\r
+#define MCTP_CONTROL_GET_MCTP_VERSION_SUPPORT 0x04\r
+#define MCTP_CONTROL_GET_MESSAGE_TYPE_SUPPORT 0x05\r
+#define MCTP_CONTROL_GET_VENDOR_DEFINED_MESSAGE_SUPPORT 0x06\r
+#define MCTP_CONTROL_RESOLVE_ENDPOINT_ID 0x07\r
+#define MCTP_CONTROL_ALLOCATE_ENDPOINT_IDS 0x08\r
+#define MCTP_CONTROL_ROUTING_INFORMATION_UPDATE 0x09\r
+#define MCTP_CONTROL_GET_ROUTINE_TABLE_ENTRIES 0x0A\r
+#define MCTP_CONTROL_PREPARE_FOR_ENDPOINT_DISCOVERY 0x0B\r
+#define MCTP_CONTROL_ENDPOINT_DISCOVERY 0x0C\r
+#define MCTP_CONTROL_DISCOVERY_NOTIFY 0x0D\r
+#define MCTP_CONTROL_GET_NETWORK_ID 0x0E\r
+#define MCTP_CONTROL_QUERY_HOP 0x0F\r
+#define MCTP_CONTROL_RESOLVE_UUID 0x10\r
+#define MCTP_CONTROL_QUERY_RATE_LIMIT 0x11\r
+#define MCTP_CONTROL_REQUEST_TX_RATE_LIMIT 0x12\r
+#define MCTP_CONTROL_UPDATE_RATE_LIMIT 0x13\r
+#define MCTP_CONTROL_QUERY_SUPPORTED_INTERFACES 0x14\r
+#define MCTP_CONTROL_TRANSPORT_SPECIFIC_START 0xF0\r
+#define MCTP_CONTROL_TRANSPORT_SPECIFIC_END 0xFF\r
+\r
+///\r
+/// MCTP Control Message Completion Codes\r
+///\r
+#define MCTP_CONTROL_COMPLETION_CODES_SUCCESS 0x00\r
+#define MCTP_CONTROL_COMPLETION_CODES_ERROR 0x01\r
+#define MCTP_CONTROL_COMPLETION_CODES_ERROR_INVALID_DATA 0x02\r
+#define MCTP_CONTROL_COMPLETION_CODES_ERROR_INVALID_LENGTH 0x03\r
+#define MCTP_CONTROL_COMPLETION_CODES_ERROR_NOT_READY 0x04\r
+#define MCTP_CONTROL_COMPLETION_CODES_ERROR_UNSUPPORTED_CMD 0x05\r
+#define MCTP_CONTROL_COMPLETION_CODES_COMMAND_SPECIFIC_START 0x80\r
+#define MCTP_CONTROL_COMPLETION_CODES_COMMAND_SPECIFIC_END 0xFF\r
+\r
+///\r
+/// MCTP Control Message Types\r
+///\r
+#define MCTP_MESSAGE_TYPE_CONTROL 0x00\r
+#define MCTP_MESSAGE_TYPE_PLDM 0x01\r
+#define MCTP_MESSAGE_TYPE_NCSI 0x02\r
+#define MCTP_MESSAGE_TYPE_ETHERNET 0x03\r
+#define MCTP_MESSAGE_TYPE_NVME 0x04\r
+#define MCTP_MESSAGE_TYPE_SPDM 0x05\r
+#define MCTP_MESSAGE_TYPE_SECURE_MESSAGE 0x06\r
+#define MCTP_MESSAGE_TYPE_CXL_FM_API 0x07\r
+#define MCTP_MESSAGE_TYPE_CXL_CCI 0x08\r
+#define MCTP_MESSAGE_TYPE_VENDOR_DEFINED_PCI 0x7E\r
+#define MCTP_MESSAGE_TYPE_VENDOR_DEFINED_IANA 0x7F\r
+\r
+#define MCTP_ENDPOINT_ID_NULL 0\r
+#define MCTP_ENDPOINT_ID_RESERVED_START 1\r
+#define MCTP_ENDPOINT_ID_RESERVED_END 7\r
+#define MCTP_ENDPOINT_ID_BROADCAST 0xff\r
+///\r
+/// MCTP Control Message Format\r
+///\r
+typedef union {\r
+ struct {\r
+ UINT32 MessageType : 7; ///< Message type.\r
+ UINT32 IntegrityCheck : 1; ///< Message integrity check.\r
+ UINT32 InstanceId : 5; ///< Instance ID.\r
+ UINT32 Reserved : 1; ///< Reserved bit.\r
+ UINT32 DatagramBit : 1; ///< Datagram bit.\r
+ UINT32 RequestBit : 1; ///< Request bit.\r
+ UINT32 CommandCode : 8; ///< Command code of request message.\r
+ UINT32 CompletionCode : 8; ///< Completion code in response message.\r
+ } Bits;\r
+ UINT32 BodyHeader;\r
+} MCTP_CONTROL_MESSAGE;\r
+\r
+/// Minimum transmission size is 64 bytes.\r
+/// The value of 64 is defined in MCTP Base Specification.\r
+#define MCTP_BASELINE_MINIMUM_UNIT_TRANSMISSION_SIZE 0x40\r
+\r
+///\r
+/// The 32-bit Header of MCTP packet.\r
+///\r
+typedef union {\r
+ struct {\r
+ UINT32 HeaderVersion : 4; ///< The version of header.\r
+ UINT32 Reserved : 4; ///< Reserved for future definitions.\r
+ UINT32 DestinationEndpointId : 8; ///< Destination endpoint Id (EID).\r
+ UINT32 SourceEndpointIdId : 8; ///< Source endpoint Id (EID)\r
+ UINT32 MessageTag : 3; ///< Check the MCTP Base specification for the\r
+ ///< usages.\r
+ UINT32 TagOwner : 1; ///< Tag owner identifies the message was\r
+ ///< originated by the source EID or\r
+ ///< destination EID.\r
+ UINT32 PacketSequence : 2; ///< Sequence number increments Modulo 4 on\r
+ ///< each packet.\r
+ UINT32 EndOfMessage : 1; ///< Indicates the last packet of message.\r
+ UINT32 StartOfMessage : 1; ///< Indicates the first packet of message.\r
+ } Bits;\r
+ UINT32 Header;\r
+} MCTP_TRANSPORT_HEADER;\r
+\r
+///\r
+/// The 8-bit Message Header of MCTP packet.\r
+///\r
+typedef union {\r
+ struct {\r
+ UINT8 MessageType : 7;\r
+ UINT8 IntegrityCheck : 1;\r
+ } Bits;\r
+ UINT8 MessageHeader;\r
+} MCTP_MESSAGE_HEADER;\r
+\r
+#endif\r