2.2.8 消息请求规则
本文档定义了以下几组消息:
- INTx 中断信号
- 电源管理
- 错误信号
- 锁定事务支持
- 插槽电源限制支持
- 厂商定义消息
- 延迟容忍度报告(LTR)消息
- 优化缓冲区冲洗/填充(OBFF)消息
- 设备就绪状态(DRS)消息
- 功能就绪状态(FRS)消息
- 精确时间测量(PTM)消息
- requester ID[15:0] 和Tag[9:0],形成事务ID。
- message code[7:0] - 指定请求中体现的特定消息。
- 所有消息请求使用 Msg 或 MsgD 类型字段编码。
- message code字段必须完全解码(不允许消息别名)。
- Attr[2] 字段不是保留的,除非特别标明为保留。
- Attr[1:0] 字段是保留的, 除非另有注明。
- LN 不适用于消息请求,该位是保留的。
- TH 不适用于消息请求,该位是保留的,除非另有注明。
- AT[1:0] 必须是 00b,接收方不要求或鼓励检查这一点。
- byte8 到 15 是保留的,除非另有注明。
- 消息请求是转发的,不需要完成返回。
- 消息请求遵循与内存写请求相同的排序规则。
包括厂商定义消息在内的许多类型的消息,可能在非 D0状态下使用,强烈建议当端口的桥接功能处于 D1、D2 和 D3Hot 状态时,端口处理消息的方式与处于 D0 状态时相同。强烈建议 type0功能支持在非 D0状态下生成和接收消息。
除了地址和ID路由之外,消息还支持几种其他的路由机制。这些机制被称为“隐式”的,因为不需要指定地址或ID来确定目的地,而是通过路由类型隐含目的地。以下规则涵盖了消息路由机制:
- 消息路由使用类型字段的 r[2:0] 子字段来确定
- 消息路由的 r[2:0] 值在表 2-17 中定义
- 每个消息的允许值在以下各节中定义
2.2.8.1 INTx 中断信号规则
消息信号中断(MSI 或 MSI-X)是 PCI Express 中首选的中断信号机制(见第 6.1 节)。然而,在某些系统中,可能存在无法支持 MSI 或 MSI-X 机制的功能。INTx 虚拟线中断信号机制用于支持传统终端和 PCI Express/PCI(-X)桥接,在不能使用 MSI 或 MSI-X 机制的情况下使用。Switch必须支持此机制。以下规则适用于 INTx 中断信号机制:
- INTx 机制使用八个不同的消息(见表 2-18)。
- Assert_INTx/Deassert_INTx 消息不包括数据有效载荷(TLP 类型为 Msg)。
- 长度字段是保留的。
- 使用 Assert_INTx/Deassert_INTx 消息时,requester ID 中的function number字段必须是 0。请注意,对于非 ARI 和 ARI 请求者 ID,function number字段的大小是不同的。
- Assert_INTx/Deassert_INTx 消息只能由上游端口发出。接收方可以选择性检查此规则的违规情况,如果接收方实施此检查并确定 Assert_INTx/Deassert_INTx 违反此规则,它必须将 TLP 作为畸形 TLP 处理。这是一个与接收端口相关联的报告错误(见第 6.2 节)。
- Assert_INTx 和 Deassert_INTx 中断消息必须使用默认的流量类别指定符(TC0)。接收方必须检查此规则的违规情况,如果接收方确定 TLP 违反此规则,它必须将 TLP 作为畸形 TLP 处理。这是一个与接收端口相关联的报告错误(见第 6.2 节)。
Assert_INTx/Deassert_INTx 消息对构成了每个传统 PCI 中断(指定为 A、B、C 和 D)的四个“虚拟线”。 以下规则描述了这些虚拟线的操作:
- 每个链路两端的组件必须使用 Assert/Deassert 消息来跟踪四个虚拟线的状态,以代表每个对应虚拟线的激活和非激活转换(分别)。
- Assert_INTx 表示 INTx(x = A、B、C 或 D)虚拟线的激活转换。
- Deassert_INTx 表示 INTx(x = A、B、C 或 D)虚拟线的非激活转换。
- 当上游端口的 INTx 虚拟线的状态的本地逻辑发生变化时,该端口必须使用适当的 Assert_INTx 或 Deassert_INTx 消息,将这种状态变化通知给同一链路另一端的下游端口。 注意:重复的 Assert_INTx/Deassert_INTx 消息没有效果,但不是错误。
- 当命令寄存器的中断禁用位(见第 7.5.1.1.3 节)被设置时,INTx 中断信号被禁用。
- 如果在设置中断禁用位时任何 INTx 虚拟线处于激活状态,则必须通过传输适当的 Deassert_INTx 消息来取消断言。
- 虚拟和实际的 PCI-PCI 桥必须根据桥的次级侧的设备号,映射在桥的次级侧跟踪的虚拟线,如表 2-19 所示。
- Switch必须独立跟踪每个下游端口的四个虚拟线的状态,并在其上游端口呈现一组“合并”的虚拟线。
- 如果Switch的下游端口变为 DL_Down 状态,则与该端口相关联的 INTx 虚拟线必须被取消断言,并且相应更新Switch上游端口的虚拟线状态。
- 如果这导致任何上游 INTx 虚拟线被取消断言,则上游端口必须发送适当的 Deassert_INTx 消息。
- 根复合体必须独立跟踪其每个下游端口的四个 INTx 虚拟线的状态,并将这些虚拟信号映射到系统的中断资源。 映射的详细信息是特定于系统实现的。
- 如果根复合体的下游端口变为 DL_Down 状态,则与该端口相关联的 INTx 虚拟线必须被取消断言,并且必须丢弃任何相关的系统中断资源请求。
2.2.8.2 电源管理消息
这些消息用于支持 PCI Express 电源管理。以下规则定义了电源管理消息:
- 表 2-20 定义了电源管理消息。
- 电源管理消息不包括数据有效载荷(TLP 类型为 Msg)。
- 长度字段是保留的。
- 对于 PM_Active_State_Nak 消息,requester ID 中的function number字段必须包含发送该消息的下游端口的function number,或者为了与本规范的早期版本兼容,使用 00b。
- 对于 PME_TO_Ack 消息,请求者 ID 中的function number字段必须保留,或者为了与本规范的早期版本兼容,必须包含上游端口关联的某个function的fnction number。请注意,对于非 ARI 和 ARI 请求者 ID,function number字段的大小是不同的。
- 电源管理消息必须使用默认的流量类别指定符(TC0),接收方必须检查此规则的违规情况。如果接收方确定 TLP 违反此规则,它必须将 TLP 作为畸形 TLP 处理。这是一个与接收端口相关联的报告错误(见第 6.2 节)。
2.2.8.3 错误信号消息
错误信号消息用于在特定事务上发生的错误以及不一定与特定事务相关联的错误进行信号传递。这些消息由检测到错误的agen发起。
- 表2-21定义了错误信号消息。
- 错误信号消息不包含数据有效载荷(TLP类型是消息)。
- 长度字段是保留的。
- 使用错误信号消息时,requester ID中的function number字段必须指明哪个功能正在发出错误信号。请注意,对于非ARI和ARI requester ID,function number字段的大小是不同的。
- 错误信号消息必须使用默认的流量类别设计符(TC0)。接收器必须检查违反此规则的情况,如果接收器确定TLP违反了此规则,它必须将TLP作为畸形TLP处理。 这是一个与接收端口相关联的报告错误(见第6.2节)。
消息的发起者通过消息头标的requester ID进行识别。根复用体将这些错误消息转换成平台级事件。有关这些消息用途的详细信息,请参考第6.2节。
ERR_COR消息在消息头标中有一个ERR_COR Subclass(ECS)字段,该字段允许不同的子类相互区分。见图2-27,ERR_NONFATAL和ERR_FATAL消息没有ECS字段。
ERR_COR Subclass(ECS)字段按照表2-22所示进行编码,以指示ERR_COR消息的子类。
2.2.8.4 锁定事务支持
解锁消息用于支持锁定事务序列。有关锁定事务序列的详细信息,请参考第6.5节。以下是形成解锁消息的规则:
- 表2-23定义了解锁消息。
- 解锁消息不包含数据有效载荷(TLP类型是消息)。
- 长度字段是保留的。
- 使用解锁消息时,requester ID中function number字段是保留的。
- 解锁消息必须使用默认的流量类别设计符(TC0)。接收器必须检查违反此规则的情况。如果接收器确定TLP违反了此规则,它必须将TLP作为畸形TLP处理。这是一个与接收端口相关联的报告错误(见第6.2节)。
2.2.8.5 插槽电源限制支持
此消息用于从下游端口(RC或Switch的端口)向同一链路上的组件(具有EP、SW或PCI Express-PCI桥接功能)的上游端口传递插槽电源限制值。
- 表2-24定义了Set_Slot_Power_Limit消息。
- Set_Slot_Power_Limit消息包含1DW 的有效载荷(TLP类型是MsgD)
- Set_Slot_Power_Limit消息必须使用默认的流量类别设计符(TC0)。接收器必须检查违反此规则的情况。如果接收器确定TLP违反了此规则,它必须将TLP作为畸形TLP处理。这是一个与接收端口相关联的报告错误(见第6.2节)。
Set_Slot_Power_Limit消息包含一DW的有效载荷。该数据有效载荷从下游端口的插槽能力寄存器复制,并写入链路另一端的上游端口的设备能力寄存器中。数据有效载荷的byte1的bit[1:0]映射到插槽电源限制范围字段,byte0的bit[7:0]映射到插槽电源限制值字段。数据有效载荷的byte3的bit[7:0]、byte2的bit[7:0]以及byte1的bit[7:2]必须由发送器设置为零,并由接收器忽略。当以下事件发生时,下游端口(RC或SW的端口)必须自动发送此消息:
- 在对插槽能力寄存器进行配置写入时,数据链路层报告DL_Up状态。
- 在链路从非DL_Up状态转换为DL_Up状态的任何时刻,并且插槽控制寄存器中的自动插槽电源限制禁用位为清除状态。如果插槽能力寄存器尚未初始化,则此传输是可选的。
链路另一端的组件(具有端点、交换机或桥接功能),接收到Set_Slot_Power_Limit消息后,必须将数据有效载荷中的值复制到与组件的上游端口相关联的设备能力寄存器中。专门针对系统层(例如,系统主板)集成的PCI Express组件,以及针对集成在适配器上的组件,如果整个适配器的功耗低于适配器外形规格中指定的最低电源限制(如相应外形规格中定义的),则允许将设备能力寄存器中的所有插槽电源限制范围和插槽电源限制值字段的值硬连线为全零,并且不需要将Set_Slot_Power_Limit消息的有效载荷复制到该寄存器中。