MCTP Control Protocol

MCTP控制协议用于在MCTP通信中设置和初始化。本文基于SMBus/I2C实现,涵盖MCTP控制消息格式、字段、传输单元大小及命令代码等。常用命令包括设置和获取Endpoint ID、UUID、MCTP版本支持以及消息类型支持等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MCTP control message用于在MCTP通信的协议中,来设置和初始化MCTP通信。

本文基于 SMBus/I2C 来实现 MCTP Control Protocol,SMBus/I2C 包格式如下:

1. MCTP control protocol 术语

TermDescription
Requester指发起MCTP控制请求消息的端点。
Responder指发起MCTP控制响应消息的端点。
Originator or Source指发起任何MCTP控制消息的端点:请求、响应或者数据报
Target or Destination指作为任何MCTP控制消息的预期接收方的端点:请求、响应或者数据报
Asynchronous NotificationMCTP端点向另一个MCTP端点发出未请求的数据报
Broadcast使用广播EID将MCTP控制数据报发送到总线上时,使用术语“Broadcast

2. MCTP control message format

        MCTP control messages使用Message type code = 0x00,MCTP control messages不使用消息完整性检查字段。因此MCTP中的IC bit位应该始终为0b。

        MCTP Message Types定义如下:

3. MCTP control message fields

        介绍MCTP control message中各fields字段的含义。

Field NameDescription
ICMessage Integrity Check bit = 0b,MCTP控制消息不包括完整性检查字段。
Message TypeMCTP control = 0x00
Rq bitRequest bit,这个位用来区分MCTP控制请求消息和其它消息类。如果消息是Command或Request,则Rq = 1b,如果是响应消息,则Rq = 0b。对于数据报和广播消息,Rq位设置为1b。
D-bitDatagram bit, 这个位用于指示Instance ID字段是用于跟踪和匹配请求和响应,还是仅用于标识重传消息。
Instance IDInstance ID字段用于标识MCTP控件的新实例
Command Code对于Request messages,该字段指示command code
Completion Code该字段仅出现响应消息中,指示响应是否正常完成。如果命令没有正常完成,该值可以提供错误条件的附加信息。
Message Data请求或者响应的数字字段。

4. MCTP control message transmission unit size

        所有MCTP控制消息都要求packet payload不大于64byte,通常MCTP控制消息在单个MCTP包中携带。如果一个操作需要传输的数据多于单个消息所能承载的数据,则使用多个消息来传输。

5. MCTP control messages

5.1 MCTP control message command codes

        本章只介绍一些常用的Command,其他Command的介绍可自行参考协议:

https://www.dmtf.org/sites/default/files/standards/documents/DSP0236_1.3.0.pdf

https://www.dmtf.org/sites/default/files/standards/documents/DSP0237_1.2.0.pdf

5.1.1 Set Endpoint ID(0x01)

        Set Endponit ID命令用来为终端指定EID值。此命令只能由总线owner发出,以将EID分配给特定物理地址处的端点。如果端点尚未分配EID,或者由于EID未知,消息中的Destination Endpoint ID被设置为特殊的空EID值(EID = 0x00)。

        如果一个EID已经被分配,而Set Endpoint ID命令从另外一个总线发出,没有强制分配EID,则该命令将返回SUCCESSFUL completion code,但响应参数将返回一个EID分配状态“EID rejected”。

Set Endpoint ID message
ByteDescription
Request data1

Operation

[7:3] - reserved

[1:0] - Operation:

        00b Set EID :设置EID,对于单总线的情况,应该总是被执行。

        01b Force EID :强制设置EID

        10b Reset EID(option): 针对支持静态EID的情况

        11b Set Discovered Flag 

2

Endpoint ID.

0xFF(广播EID),0x00(空EID) = illegal非法的.

ByteDescription
Response data1Completion code
2

[7:6] - reserved

[5:4] - EID assignment status:

        00b = EID assignment accepted.

        01b = EID assignment rejected.

        10b = reserved.

        11b = reserved.

[3:2] - reserved.

[1:0] - Endpoint ID allocation status

        00b = Device does not use an EID pool.

        01b = Endpoint requies EID pool allocation.

        10b = Endpoint uses an EID pool and has already received an allocation for that pool.

        11b = reserved

3

EID Setting.

如果EID设置被接受,该值将与请求中传递的EID匹配。否则返回当前的EID设置值。

4

EID Pool Size.

这是bridge可以用来分配的动态EID pool的大小。

0x00 = no dynamic EID pool.

5.1.2 Get Endpoint ID(0x02)

        Get Endpoint ID命令返回端点的EID。该命令通常仅由总线Owner发出,用于查询指定物理地址的EID。因此 message 中的 destination EID 通常会被设置为特殊的物理寻址专用EID值。

ByteDescription
Request data--
Response data1Completion code
2

Endpoint ID.

0x00 = EID not yet assigned.

3

Endpoint Type.

[7:6] = reserved

[5:4] = Endpoint Type:

        00b = simple endpoint

        01b = bus owner/bridge

        10b = reserved

        11b = reserved

[2:0] = reserved

[1:0] = Endpoint ID Type:

        00b = dynamic EID,端点仅使用动态EID

        01b = static EID supported. 返回当前EID值,可能与静态EID一致也可能不一致。

        10b = static EID supported. 当前EID值与静态EID值一致

        11b = static EID supported. 当前EID值与静态EID值不一致

4

Medium-Specific Information.

保存端点可选配置的附加信息。

除非transport binding协议有指定,否则该字节将返回0x00.

5.1.3 Get Endpoint UUID(0x03)

        Get Endpoint UUID命令返回通用唯一标识符(UUID),也称为全局唯一ID(GUID)。该命令用于将一个设备与一个或多个EID关联。

Get Endpoint UUID message format
ByteDescription
Request data--
Response data1Completion Code
2:17UUID byte 1:16, 格式参考Table 17

5.1.4 Get MCTP Version Support(0x04)

        Get MCTP Version Support命令用于检索端点支持的MCTP基本规范版本,以及每种消息类型支持的消息类型规范版本,版本号从老到新依次排列。

        该命令返回一个Completion code,可用于查询端点是否支持请求的消息类型。

        版本号由4Byte组成:“major”、“minor”、“update”、“alpha”。其中“major”、“minor”、“update”字节是按照BCD编码,每个字节包含两个BCD数字。“alpha”字节包含一个可选的字母数字字符扩展【a-z, A-Z】,如果“alpha”字节值为0x00,表明没有被使用。“update”字节值为0xFF表示忽略该字段。

        BCD编码有效位中如果值为0xF,表示应该忽略该区域,应用程序不应该显示前导0。

Get MCTP version support message
ByteDescription
Request data1

Message Type Number

要检索版本信息的消息类型号:

0xFF = return MCTP base specification version information.

0x7E, 0x7F = vendor-defined message types

0x00 = return MCTP control protocol message version information

0x01 = return version of DSP0241

0x02,0x03 = return version of DSP0261

Other = 返回给定消息类型的版本信息。

Respinse data1

Completion Code

0x80 = message type number not supported

2

Version Number Entry count

返回One-based的 32-bit 版本号计数,首先返回数值较低的版本号。

3:6

Version Number entry

[31:24] = major version number.主要版本号

[23:16] = minor version number.次要版本号

[15:8] = update version number.更新版本号

[7:0] = "alpha"byte.预发布版本号

(7:X)

Version Number Entries 2 through N.

Additional 32-bit major/minor version numbers.if any

5.1.5 Get Message Type Support(0x05)

        Get Message Type Support命令使管理控制器能够发现其他MCTP端点支持的MCTP控制协议功能,并获得端点支持的MCTP消息类型列表。

Get Message Type Support message
ByteDescription
Request data--
Response data1Completion Code.
2

MCTP Message Type Count. One-based.

除了该端点支持的MCTP控制消息类型之外,消息类型的数量

(3:N)列出Message Type数量,每个类型一个字节。

5.1.6 Prepare for Endpoint Discovery (0x0B)

        Endpoint Discovery命令是用于确认总线上是否有MCTP通信的设备。目前该消息可能仅由特定的transport binding,例如PCI Express VDM。因为其它的binding例如SMBus/I2C可能使用其它机制来确认该信息,如果binding的是SMBus/I2C,是不支持Endpoint Discovery命令,端点将为这些命令返回 ERROR_UNSUPPORTED_CMD 完成状态。

        总线上每个端点(总线owner除外)都维护一个称为“Discovered” flag的内部标志。

        Prepare for Endpoint Discovery命令通过给总线上发送广播请求消息,可以使总线上每一个端点将各自的“Discovered” flag设置为“undiscovered”状态。当Endpoint接收到Set Endpoint ID命令时,该标志随后也被设置为“discovered”状态。

        只有将Discovered flag设置为“undiscovered”的Endpoint才会响应该消息,将Discovered flag设置为“discovered”的Endpoint不会响应。

        Endponit还可以在以下时刻将flag设置为“undiscovered”状态:

  • 当Endpoint关联的物理地址发生变化或配置时。
  • 当Endpoint首次出现在总线上,并需要分配EID时。
  • 在操作期间,如果Endpoint进入要重新分配EID的状态时。
  • 对于hot-plug Endpoint:在hot-plug endpoint无法响应MCTP Control Requests,并超过SMBus超时时间,处于任何临时状态时。
Prepare for Endpoint Discovery message
ByteDescription
Request data--
Response data1Completion Code

5.1.7 Endpoint Discovery (0x0C)

        Endpoint Discovery命令用于发现Discovered flag设置为“undiscovered”的端点。只有将Discovered flag设置为“undiscovered”的端点才会响应此消息。将表示设置为“discovered”的端点不会响应。

        该消息通常作为广播请求发送,由总线owner使用广播EID作为destination EID,出于测试目的,端点也应接收并处理非广播包的请求。

Endpoint Discovery message
ByteDescription
Request data--
Response data1Completion Code

5.2 MCTP control message completion codes

Command / Result code字段用于在Response Messages 中返回管理的结果。如果返回SUCCESS的completion code,则也应该返回指定的响应参数(如果有的话)。如果responder返回 errror completion code(not SUCCESS)。除非另有规定,否则responder不应该返回任何额外的参数数据。requester应该忽略reponder中提供的任何额外参数数据(如果有的话)。

ValueNameDescription
0x00SUCCESS请求被正常接收并完成。
0x01ERROR通用的错误信息,如果应用有更具体的结果代码时,不应该使用它。
0x02ERROR_INVALID_DATApacket payload中包含无效数据或参数值不合法。
0x03ERROR_INVALID_LENGTH消息长度无效。(消息体大于或小于特定请求的预期值)
0x04ERROR_NOT_READY接收方还没有准备好接收相应的消息
0x05ERROR_UNSUPPORTED_CMD接收到的消息的control type在此端点上不支持。
0x80 - 0xFFCOMMAND_SPECIFIC此completion code值范围保留给特定的MCTP control messages。
All otherReservedReserved

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值