Non-posted Transaction
与Posted事务的关键差异是,Non-Posted 事务的发起者是需要收到从目标设备返回的完成报文后,事务才算结束。如果目标设备由于某种原因并未返回完成,那将会导致发起者接收完成超时CO(Completion Timeout)。Configuration read and write, IO read and write, and Memory read都属于Non-Posted事务。读很好理解,需要返回数据。而Config write和IO write这两种对设备的访问,都是必须要求得到设备的响应的,所以它们也是Non-Posted事务。
Completer返回的完成报文(Cpl)可能是成功(SC: Success Comletion),也可能是CA(Completer Abort)或者UR(Unsupported Request)。当然,Non-Posted的发起者是知道这个报文是不是到达了目的地。
我们看几个例子:
1、首先是IO Write的例子,RC向EP发起IO写请求,EP收到后,返回给RC的完成报文是不带数据的Cpl。
2、EP发起内存读请求,通常是EP上的DMA发起,RC把数据返回给EP,完成报文是带数据的。
3、EP向另一个EP发起读请求,注意RC中的黄色虚线,前面我们提过,这种称之为Peer-to-peer传输。另一个EP返回带数据的完成报文。
附:文中几个缩写的含义。
缩写 | 含义 |
MRd | Memory Read |
IORd | IO REad |
CfgRd0, CfgRd1 | Configuration Read(Type 0 and Type 1) |
CfgWr0,CfgWr1 | Configuration Write(Type 0 and Type 1) |
CplD | Completion with Data |
Cpl | Completion without Data |
Config 有type0和type1两种,分别对应EP和Switch。