]> xenbits.xensource.com Git - ovmf.git/commitdiff
MdePkg/Include: Add DMTF MCTP definitions
authorAbner Chang <abner.chang@amd.com>
Fri, 3 Mar 2023 03:22:54 +0000 (11:22 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Sun, 26 Mar 2023 17:10:36 +0000 (17:10 +0000)
BZ #4355
This change adds definitions for DMTF MCTP
base specification.

Spec ref:
https://www.dmtf.org/sites/default/files/standards/documents/DSP0236_1.3.1.pdf

Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Igor Kulchytskyy <igork@ami.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <AbdulLateef.Attar@amd.com>
Acked-by: Isaac Oram <isaac.w.oram@intel.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
MdePkg/Include/IndustryStandard/Mctp.h [new file with mode: 0644]

diff --git a/MdePkg/Include/IndustryStandard/Mctp.h b/MdePkg/Include/IndustryStandard/Mctp.h
new file mode 100644 (file)
index 0000000..5e603b9
--- /dev/null
@@ -0,0 +1,139 @@
+/** @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