根据PCIe规范,两个独立设备(端点)可以在没有Root Complex参与的情况下进行通信,但是具体如何实现呢?
在内存和IO事务中,一个端点如何知道另一个端点的地址?
交换机如何在两个下游端口之间路由数据包?
谢谢并致以问候。
根据PCIe规范,两个独立设备(端点)可以在没有Root Complex参与的情况下进行通信,但是具体如何实现呢?
在内存和IO事务中,一个端点如何知道另一个端点的地址?
交换机如何在两个下游端口之间路由数据包?
谢谢并致以问候。
是的,这是可能的。
正如您所说,内存写入事务需要收件人的“有效”地址和数据,而内存读取事务需要“有效”地址和数据“大小”,以创建写入或读取请求。
对于来自下游端口的请求,交换机通过与其“基址和限制”寄存器进行比较来负责路由到任何上游(根)或下游(点对点)。
交换机路由:
首先检查其自己的条上的地址,如果匹配,则会消耗。每个交换机都有两个条可用。
如果不匹配,则根据请求类型检查其IO/P-MMIO/NP-MMIO基址和限制寄存器对。
如果TLP前往上游端口并且与其基址和限制寄存器匹配,则在次要接口上处理为“不支持的请求”。(再次将其传递到下游端口,除了它接收到的那个端口之外,因为它可能是点对点通信)。
如果在任何接口上都没有匹配,则将其转发到其主要接口,因为它不符合桥梁和该桥梁以下的任何功能。