接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(21)
如果n大于等于某个PCI桥的Secondary Bus Number寄存器、并且小于等于Subordinate Bus number寄存器,那么此PCI桥将接收在当前PCI总线上的Type 01配置请求,并采用以下规则进行递归处理:
1)开始;
2)遍历当前PCI总线的所有PCI桥;
3)如果n等于某个PCI桥的Secondary Bus Number寄存器,说明这个Type 01h配置请求的目标设备直接连接在该PCI桥的Secondary bus上。此时PCI桥将Type 01h配置请求转换为Type 00h配置请求,并将这个配置请求发送到PCI桥的Secondary Bus上。Secondary Bus上的某个设备将响应这个Type 00h配置请求,并与HOST主桥进行配置信息的交换,转5)。
4)如果n大于PCI桥的Secondary Bus Number寄存器,而且小于等于PCI桥的Subordinate Bus number寄存器,说明这个Type 01配置请求的目标设备不与该PCI桥的Secondary Bus直接相连,但是由这个PCI桥下游总线上的某个PCI桥管理。此时PCI桥将首先认领这个Type 01配置请求,并将其转发到Secondary Bus,转j=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。
(1)PCI设备01
这种情况较易处理。当HOST处理器访问PCI设备01的配置空间时,发现PCI设备01与HOST主桥直接相连,所以将直接使用Type 00h配置请求访问该设备的配置空间,具体步骤如下:
1)首先,HOST处理器将CONFIG_ADDRESS寄存器的Enable位置1,Bus Number号置为0,并对该寄存器的Device、Function和Register Number字段赋值;
2)之后,当处理器对CONFIG_DATA寄存器访问时,HOST主桥将存放在CONFIG_ADDRESS寄存器中的数值,转换为Type 00h配置请求,并发送到PCI总线0上(Bus Number号为0);
3)PCI设备01将接收这个Type 00h配置请求,并与处理器进行配置信息交换。
(2)PCI设备31
这种情况就要更复杂一些了。当HOST处理器对PCI设备31进行配置读写时,需要通过HOST主桥、PCI桥1、PCI桥2和PCI桥3,最终到达PCI设备31。具体步骤如下:
1)首先,HOST处理器将CONFIG_ADDRESS寄存器的Enable位置1,Bus Number字段置为3,并对Device、Function和Register Number字段赋值;
2)之后,当处理器对CONFIG_DATA寄存器进行读写访问时,HOST主桥、PCI桥1、2和3将按照以下步骤进行处理:
2.1)HOST主桥发现Bus Number字段的值为3,该总线号并不是与HOST主桥直接相连的PCI总线的Bus Number,所以HOST主桥将处理器对CONFIG_DATA寄存器的读写访问直接转换为Type 01h配置请求,并将这个配置请求发送到PCI总线0上。PCI总线规定Type 01h配置请求只能由PCI桥负责处理;
2.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;
2.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;
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 Number相同时,该PCI桥将接收的Type 01h配置请求转换为Type 00h配置请求,然后再发向其Secondary Bus。;
2.5)在PCI总线3上,有两个设备PCI设备31和PCI设备32。在这两个设备中,必然有一个设备将要响应这个Type 00h配置请求,从而完成整个配置请求周期(本篇在后续会讨论究竟是PCI设备31还是PCI设备32接收这个配置请求,这个问题涉及PCI总线如何分配PCI设备使用的设备号)。
3)最后,PCI设备31将接收这个配置请求,并与处理器进行配置信息交换。
更多内容请看下回。