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
|