首页 理论教育PCIExpress总线配置原则

PCIExpress总线配置原则

【摘要】:本节重点讲述PCI桥如何将Type 01h配置请求转换为Type 00h配置请求。下面将举例说明PCI总线配置请求的转换原则,并以图2-8为例说明处理器如何访问PCI设备01和PCI设备31的配置空间。PCI总线规定Type01h配置请求只能由PCI桥负责处理。而1<Bus Number≤3,所以PCI桥1将接收来自PCI总线0的Type 01h配置请求,并将这个配置请求直接下推到PCI总线1。

当CONFIG_ADDRESS寄存器的Enable位为1,系统软件访问CONFIG_DATA寄存器时,HOST主桥可以产生两类PCI总线配置读写总线事务,分别为Type 00h和Ty pe 01h配置读写总线事务。在配置读写总线事务的地址周期和数据周期中,CONFIG_ADDRESS和CONFIG_DATA寄存器中的数据将被放置到PCI总线的AD总线上。其中Type 00h和Ty pe 01h配置读写总线事务映射到AD总线的数据并不相同。

其中Type 00h配置请求可以直接读取PCI Agent设备的配置空间,而Type 01h配置请求在通过PCI桥时,最终将被转换为Type 00h配置请求,并读取PCI Agent设备的配置寄存器。本节重点讲述PCI桥如何将Type 01h配置请求转换为Type 00h配置请求。

首先Type 00h配置请求不会被转换成Type 01h配置请求,因为Type 00h配置请求是发向最终PCI Agent设备,这些PCI Agent设备不会转发这些配置请求。

当CONFIG_ADDRESS寄存器的Bus Number字段为0时,处理器对CONFIG_DATA寄存器操作时,HOST主桥将直接产生Type 00h配置请求,挂接在PCI总线0上的某个设备将通过ID译码接收这个Type 00h配置请求,并对配置寄存器进行读写操作。如果PCI总线上没有设备接收这个Type 00h配置请求,将引发Master Abort,详情见PCI总线规范,本节对此不做进一步说明。

如果CONFIG_ADDRESS寄存器的Bus Number字段为n(n≠0),即访问的PCI设备不是直接挂接在PCI总线0上的,此时HOST主桥对CONFIG_DATA寄存器操作时,将产生Type 01h配置请求,PCI总线0将遍历所有在这条总线上的PCI桥,确定由哪个PCI桥接收这个Type 01h配置请求。

如果n大于或等于某个PCI桥的Secondary Bus Number寄存器,而且小于或等于Subor-dinate Bus number寄存器,那么这个PCI桥将接收在当前PCI总线上的Type 01配置请求,并采用以下规则进行递归处理。

(1)开始。

(2)遍历当前PCI总线的所有PCI桥。

(3)如果n等于某个PCI桥的Secondary Bus Number寄存器,说明这个Type 01配置请求的目标设备直接连接在该PCI桥的Secondary bus上。此时PCI桥将Type 01配置请求转换为Type 00h配置请求,并将这个配置请求发送到PCI桥的Secondary Bus上,Secondary Bus上的某个设备将响应这个Type 00h配置请求,并与HOST主桥进行配置信息的交换,转(5)。

(4)如果n大于PCI桥的Secondary Bus Number寄存器,而且小于或等于PCI桥的Sub-ordinate Bus number寄存器,说明这个Type 01配置请求的目标设备不与该PCI桥的Seconda-ry Bus直接相连,但是由这个PCI桥下游总线上的某个PCI桥管理。此时PCI桥将首先认领这个Type 01配置请求,并将其转发到Secondary Bus,转(2)。

(5)结束。

下面将举例说明PCI总线配置请求的转换原则,并以图2-8为例说明处理器如何访问PCI设备01和PCI设备31的配置空间。PCI设备01直接与HOST主桥相连,因此HOST主桥可以使用Type 00h配置请求访问该设备。

而HOST主桥需要经过多级PCI桥才能访问PCI设备31,因此HOST主桥需要首先使用Type 01h配置请求,之后通过PCI桥1、2和3将Type 01h配置请求转换为Type 00h配置请求,最终访问PCI设备31。(www.chuimin.cn)

1.PCI设备01

这种情况较易处理,当HOST处理器访问PCI设备01的配置空间时,发现PCI设备01与HOST主桥直接相连,所以将直接使用Type 00h配置请求访问该设备的配置空间,具体步骤如下。

首先HOST处理器将CONFIG_ADDRESS寄存器的Enabled位置1,Bus Number号置为0,并对该寄存器的Device、Function和Register Number字段赋值。当处理器对CONFIG_DA-TA寄存器访问时,HOST主桥将存放在CONFIG_ADDRESS寄存器中的数值,转换为Type00h配置请求,并发送到PCI总线0上,PCI设备01将接收这个Type 00h配置请求,并与处理器进行配置信息交换。

2.PCI设备31

HOST处理器对PCI设备31进行配置读写时,需要通过HOST主桥、PCI桥1、2和3,最终到达PCI设备31。

当处理器访问PCI设备31时,首先将CONFIG_ADDRESS寄存器的Enabled位置1,Bus Number字段置为3,并对Device、Function和Register Number字段赋值。之后当处理器对CONFIG_DATA寄存器进行读写访问时,HOST主桥、PCI桥1、2和3将按照以下步骤进行处理,最后PCI设备31将接收这个配置请求。

(1)HOST主桥发现Bus Number字段的值为3,该总线号并不是与HOST主桥直接相连的PCI总线的Bus Number,所以HOST主桥将处理器对CONFIG_DATA寄存器的读写访问直接转换为Type 01h配置请求,并将这个配置请求发送到PCI总线0上。PCI总线规定Type01h配置请求只能由PCI桥负责处理。

(2)在PCI总线0上,PCI桥1的Secondary Bus Number为1而Subordinate Bus Number为3。而1<Bus Number≤3,所以PCI桥1将接收来自PCI总线0的Type 01h配置请求,并将这个配置请求直接下推到PCI总线1。

(3)在PCI总线1上,PCI桥2的Secondary Bus Number为2而Subordinate Bus Number为3。而1<Bus Number≤3,所以PCI桥2将接收来自PCI总线0的Type 01h配置请求,并将这个配置请求直接下推到PCI总线2。

(4)在PCI总线2上,PCI桥3的Secondary Bus Number为3,因此PCI桥3将“来自PCI总线2的Type 01h配置请求”转换为Type 00h配置请求,并将其下推到PCI总线3。PCI总线规定,如果PCI桥的Secondary Bus Number与Type 01h配置请求中包含的Bus Num-ber相同时,该PCI桥将接收的Type 01h配置请求转换为Type 00h配置请求,然后再发向其Secondary Bus。

(5)在PCI总线3上,有两个设备:PCI设备31和PCI设备32。在这两个设备中,必然有一个设备将要响应这个Type 00h配置请求,从而完成整个配置请求周期。在第2.4.1节中,讨论了究竟是PCI设备31还是PCI设备32接收这个配置请求,这个问题涉及PCI总线如何分配PCI设备使用的设备号。