summaryrefslogtreecommitdiffstats
path: root/MdePkg/Include/IndustryStandard/Mctp.h
blob: 1c86cc627e457497526b9f3146d87ff703c13e78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/** @file

  The definitions of DMTF Management Component Transport Protocol (MCTP)
  Base Specification.

  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Revision Reference:
  DMTF Management Component Transport Protocol (MCTP) Base Specification
  Version 1.3.1
  https://www.dmtf.org/sites/default/files/standards/documents/DSP0236_1.3.1.pdf
**/

#ifndef MCTP_H_
#define MCTP_H_

///
/// Definitions of endpoint ID
///
#define MCTP_NULL_DESTINATION_ENDPOINT_ID  0
#define MCTP_NULL_SOURCE_ENDPOINT_ID       0
#define MCTP_RESERVED_ENDPOINT_START_ID    1
#define MCTP_RESERVED_ENDPOINT_END_ID      7
#define MCTP_BROADCAST_ENDPOINT_ID         0xFF

///
/// MCTP Control Commands
///
#define   MCTP_CONTROL_RESERVED                            0x00
#define   MCTP_CONTROL_SET_ENDPOINT_ID                     0x01
#define   MCTP_CONTROL_GET_ENDPOINT_ID                     0x02
#define   MCTP_CONTROL_GET_ENDPOINT_UUID                   0x03
#define   MCTP_CONTROL_GET_MCTP_VERSION_SUPPORT            0x04
#define   MCTP_CONTROL_GET_MESSAGE_TYPE_SUPPORT            0x05
#define   MCTP_CONTROL_GET_VENDOR_DEFINED_MESSAGE_SUPPORT  0x06
#define   MCTP_CONTROL_RESOLVE_ENDPOINT_ID                 0x07
#define   MCTP_CONTROL_ALLOCATE_ENDPOINT_IDS               0x08
#define   MCTP_CONTROL_ROUTING_INFORMATION_UPDATE          0x09
#define   MCTP_CONTROL_GET_ROUTINE_TABLE_ENTRIES           0x0A
#define   MCTP_CONTROL_PREPARE_FOR_ENDPOINT_DISCOVERY      0x0B
#define   MCTP_CONTROL_ENDPOINT_DISCOVERY                  0x0C
#define   MCTP_CONTROL_DISCOVERY_NOTIFY                    0x0D
#define   MCTP_CONTROL_GET_NETWORK_ID                      0x0E
#define   MCTP_CONTROL_QUERY_HOP                           0x0F
#define   MCTP_CONTROL_RESOLVE_UUID                        0x10
#define   MCTP_CONTROL_QUERY_RATE_LIMIT                    0x11
#define   MCTP_CONTROL_REQUEST_TX_RATE_LIMIT               0x12
#define   MCTP_CONTROL_UPDATE_RATE_LIMIT                   0x13
#define   MCTP_CONTROL_QUERY_SUPPORTED_INTERFACES          0x14
#define   MCTP_CONTROL_TRANSPORT_SPECIFIC_START            0xF0
#define   MCTP_CONTROL_TRANSPORT_SPECIFIC_END              0xFF

///
/// MCTP Control Message Completion Codes
///
#define   MCTP_CONTROL_COMPLETION_CODES_SUCCESS                 0x00
#define   MCTP_CONTROL_COMPLETION_CODES_ERROR                   0x01
#define   MCTP_CONTROL_COMPLETION_CODES_ERROR_INVALID_DATA      0x02
#define   MCTP_CONTROL_COMPLETION_CODES_ERROR_INVALID_LENGTH    0x03
#define   MCTP_CONTROL_COMPLETION_CODES_ERROR_NOT_READY         0x04
#define   MCTP_CONTROL_COMPLETION_CODES_ERROR_UNSUPPORTED_CMD   0x05
#define   MCTP_CONTROL_COMPLETION_CODES_COMMAND_SPECIFIC_START  0x80
#define   MCTP_CONTROL_COMPLETION_CODES_COMMAND_SPECIFIC_END    0xFF

///
/// MCTP Control Message Types
///
#define   MCTP_MESSAGE_TYPE_CONTROL              0x00
#define   MCTP_MESSAGE_TYPE_PLDM                 0x01
#define   MCTP_MESSAGE_TYPE_NCSI                 0x02
#define   MCTP_MESSAGE_TYPE_ETHERNET             0x03
#define   MCTP_MESSAGE_TYPE_NVME                 0x04
#define   MCTP_MESSAGE_TYPE_SPDM                 0x05
#define   MCTP_MESSAGE_TYPE_SECURE_MESSAGE       0x06
#define   MCTP_MESSAGE_TYPE_CXL_FM_API           0x07
#define   MCTP_MESSAGE_TYPE_CXL_CCI              0x08
#define   MCTP_MESSAGE_TYPE_VENDOR_DEFINED_PCI   0x7E
#define   MCTP_MESSAGE_TYPE_VENDOR_DEFINED_IANA  0x7F

#define   MCTP_ENDPOINT_ID_NULL            0
#define   MCTP_ENDPOINT_ID_RESERVED_START  1
#define   MCTP_ENDPOINT_ID_RESERVED_END    7
#define   MCTP_ENDPOINT_ID_BROADCAST       0xff
///
/// MCTP Control Message Format
///
typedef union {
  struct {
    UINT32    MessageType    : 7; ///< Message type.
    UINT32    IntegrityCheck : 1; ///< Message integrity check.
    UINT32    InstanceId     : 5; ///< Instance ID.
    UINT32    Reserved       : 1; ///< Reserved bit.
    UINT32    DatagramBit    : 1; ///< Datagram bit.
    UINT32    RequestBit     : 1; ///< Request bit.
    UINT32    CommandCode    : 8; ///< Command code of request message.
    UINT32    CompletionCode : 8; ///< Completion code in response message.
  } Bits;
  UINT32    BodyHeader;
} MCTP_CONTROL_MESSAGE;

/// Minimum transmission size is 64 bytes.
/// The value of 64 is defined in MCTP Base Specification.
#define MCTP_BASELINE_MINIMUM_UNIT_TRANSMISSION_SIZE  0x40

///
/// The 32-bit Header of MCTP packet.
///
typedef union {
  struct {
    UINT32    HeaderVersion         : 4; ///< The version of header.
    UINT32    Reserved              : 4; ///< Reserved for future definitions.
    UINT32    DestinationEndpointId : 8; ///< Destination endpoint Id (EID).
    UINT32    SourceEndpointId      : 8; ///< Source endpoint Id (EID)
    UINT32    MessageTag            : 3; ///< Check the MCTP Base specification for the
                                         ///< usages.
    UINT32    TagOwner              : 1; ///< Tag owner identifies the message was
                                         ///< originated by the source EID or
                                         ///< destination EID.
    UINT32    PacketSequence        : 2; ///< Sequence number increments Modulo 4 on
                                         ///< each packet.
    UINT32    EndOfMessage          : 1; ///< Indicates the last packet of message.
    UINT32    StartOfMessage        : 1; ///< Indicates the first packet of message.
  } Bits;
  UINT32    Header;
} MCTP_TRANSPORT_HEADER;

///
/// The 8-bit Message Header of MCTP packet.
///
typedef union {
  struct {
    UINT8    MessageType    : 7;
    UINT8    IntegrityCheck : 1;
  } Bits;
  UINT8    MessageHeader;
} MCTP_MESSAGE_HEADER;

#endif