【摘要】:TLP的AT字段与ATS机制直接相关。该报文由PCIe设备通过存储器读请求TLP发出,其目的地为TA。如果TLP中的Address字段没有经过ATC进行地址转换,而且处理器系统支持虚拟化技术,该地址为仍然对应GPA地址在PCI总线域中的映像,此时该TLP使用的AT字段为0b00。由以上描述可以发现,PCIe设备无论是否使用ATC机制,在TLP中存放的Address字段仍然保存的是PCI总线地址。
TLP的AT字段与ATS机制直接相关。根据AT字段的不同,PCIe设备可以发送三种类型的TLP。
1.AT字段为0b00
当AT字段为0b00时,当前TLP的Address字段没有通过ATC进行转换,存放的是PCI总线域的物理地址。如果PCIe设备不支持ATS机制,而且处理器系统也没有使能IOMMU时,当前TLP的Address字段为PCI总线域的物理地址。PCIe设备进行DMA操作时,该地址将被RC转换为存储器域的物理地址,然后对存储器进行读写操作。
如果PCIe设备不支持ATS机制,但是当前处理器支持IOMMU时,当前TLP的Address字段依然为PCI总线域的物理地址。PCIe设备进行DMA操作时,该地址将被TA根据I/O页表的设置,转换为合适的存储器域物理地址。
如果当前处理器系统支持虚拟化技术,当前PCIe设备将隶属于某一个Domain,此时该PCIe设备进行DMA操作时,数据将被传送到属于该Domain的存储器域中。
2.AT字段为0b01
当AT字段为0b01时,表示当前TLP报文为“Translation Request”报文。支持ATS机制的PCIe设备,必须支持这类报文。(www.chuimin.cn)
该报文由PCIe设备通过存储器读请求TLP发出,其目的地为TA。TA收到该报文后,将根据I/O页表的设置,将合适的地址转换关系,通过存储器读完成TLP,发送给PCIe设备。而PCIe设备收到这个地址转换关系后,将更新ATC。
3.AT字段为0x10
当AT字段为0x01时,表示当前TLP的Address字段已经通过ATC进行地址转换。当PCIe设备使用存储器读写报文进行DMA操作,而RC收到这些报文时,将不再通过TA和ATPT进行地址转换,而直接将数据发送给存储器。从而减轻了ATPT进行地址转换的压力。
值得注意的是,经过ATC进行地址转换后,在TLP的Address字段中存放的依然是PCI总线域的物理地址,该物理地址为HPA地址在PCI总线域中的映像。
如果TLP中的Address字段没有经过ATC进行地址转换,而且处理器系统支持虚拟化技术,该地址为仍然对应GPA地址在PCI总线域中的映像,此时该TLP使用的AT字段为0b00。这些地址在经过RC后,将被转换为存储器域的地址,然后进入TA和ATPT再次进行地址转换。由以上描述可以发现,PCIe设备无论是否使用ATC机制,在TLP中存放的Address字段仍然保存的是PCI总线地址。
相关推荐