PCIE协议-2-事务层规范-Message Request Rules

2024-05-12 13:28

本文主要是介绍PCIE协议-2-事务层规范-Message Request Rules,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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] 子字段来确定
  1. 消息路由的 r[2:0] 值在表 2-17 中定义
  2. 每个消息的允许值在以下各节中定义

 

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消息的有效载荷复制到该寄存器中。 

 

 

 

 

这篇关于PCIE协议-2-事务层规范-Message Request Rules的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982754

相关文章

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

JavaEE7 Servlet 3.1(JSR 340)规范中文版

http://www.iteye.com/news/27727-jinnianshilongnian     Jave EE 7中的部分规范已正式获得批准通过,其中包括JSR340 Java Servlet 3.1规范,去年翻译了该规范,在此分享出来,希望对某些朋友有所帮助,不足之处请指正。   点击直接下载    在线版目录   Servlet3.1规范翻译