本章讲的是 INTx 中断机制,它是 PCI Express 中用于兼容旧设备的一种中断信号机制。它主要用于那些不能支持 MSI(Message Signaled Interrupt)或 MSI-X 中断机制的设备。以下是本章的重点:
1. INTx 中断机制概述
• INTx 是一种旧的中断信号机制,在 PCI Express 系统中,为了兼容旧设备,仍然使用这种信号机制。INTx 中断机制支持四个中断线(INTA、INTB、INTC、INTD),每条线代表一个独立的中断信号。
• 这种机制通过特定的 Assert_INTx 和 Deassert_INTx 消息来表示这些中断信号的激活和取消激活。
2. INTx 消息
• Assert_INTx 消息:表示激活某个中断信号(INTA、INTB、INTC 或 INTD)。
• Deassert_INTx 消息:表示取消激活某个中断信号。
• 这些消息不带数据负载(即消息类型是 Msg),只有标识和信号状态。消息的 长度字段 是保留的。
3. 使用规则
• 只有 Upstream Ports(上游端口)可以发出 Assert_INTx 和 Deassert_INTx 消息。也就是说,只有连接到根复合体或上游交换机的端口才能发送这些中断消息。
• 接收端如果检测到这些消息违反了规则(例如下游端口错误地发送了消息),应将该消息视为“格式错误的 TLP”(Malformed TLP),并报告为错误。
• 这些消息必须使用 默认的流量类(Traffic Class 0,TC0)。如果消息违反这一规则,也应视为错误。
4. INTx 虚拟线
• INTx 中断机制使用四条“虚拟线”来表示四个中断信号(INTA、INTB、INTC、INTD)。这些虚拟线在系统中通过 Assert_INTx 和 Deassert_INTx 消息来进行状态转换(激活或取消激活)。
• 每条虚拟线的状态在链路两端的设备中需要同步。每当上游端口的虚拟线状态发生变化时,它需要通过适当的 Assert_INTx 或 Deassert_INTx 消息通知下游端口。
• INTx 中断机制在 Interrupt Disable 位被设置时会被禁用。也就是说,如果在命令寄存器中禁用中断,所有活跃的 INTx 虚拟线都会被取消激活。
5. 桥接和交换机的处理
• 在 PCI 到 PCI 桥接 或 交换机 中,虚拟线的状态需要根据目标设备进行映射。不同的设备可能会触发不同的 INTx 信号。
• 桥接设备 必须根据设备号将虚拟线从次级侧映射到主侧。具体的映射规则见表格 2-19。
• 交换机必须为每个下游端口独立跟踪四条虚拟线的状态,并根据上游端口的虚拟线状态来更新。
6. 系统级中断映射
• 系统软件(包括 BIOS 和操作系统)需要理解如何映射 INTx 中断,这包括系统中所有层次的设备(如交换机、桥接器等)如何处理这些中断信号。
• 每个交换机和桥接器都会根据自身的设备映射规则处理 INTx 中断。表格 2-19 描述了在桥接设备中,虚拟中断信号如何在主次设备之间进行映射。
7. 总结
• INTx 中断机制 是为了兼容旧设备而设计的中断信号机制,它使用四条虚拟线(INTA、INTB、INTC、INTD)来表示中断信号。
• 这种机制通过 Assert_INTx 和 Deassert_INTx 消息来表示虚拟线的激活和取消激活。
• Upstream Ports 负责发送这些消息,Downstream Ports 需要接收并处理这些消息。
• 交换机和桥接设备需要根据设备号进行虚拟线的映射,系统软件也需要了解这些映射关系,以便正确处理中断请求。
总结
INTx 中断机制是为了解决老旧设备与新设备之间的兼容问题,确保即使在不支持 MSI/MSI-X 的情况下,系统依然能够通过传统的中断信号进行通信。