接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(19)
2.4 PCI总线的配置
PCI总线定义了两类配置请求,一个是Type 00h配置请求,另一个是Type 01h配置请求。PCI总线使用这些配置请求访问PCI总线树上的设备配置空间,包括PCI桥和PCI Agent设备的配置空间。
其中,HOST主桥或者PCI桥使用Type 00h配置请求,来访问与HOST主桥或者PCI桥直接相连的PCI Agent设备或者PCI桥(此时PCI桥作为一个PCI设备,接收访问其配置空间的读写请求);而HOST主桥或者PCI桥使用Type 01h配置请求,需要至少穿越一个PCI桥,访问没有与其直接相连的PCI Agent设备或者PCI桥。如图2-8所示,HOST主桥可以使用Type 00h配置请求访问PCI设备01,而使用Type 01h配置请求通过PCI桥1、2或者3转换为Type 00h配置请求之后,访问PCI总线树上的PCI设备11、21、22、31和32。也就是说,最终Type 01h配置请求(都)将会被转换为Type 00h配置请求,然后再访问PCI Agent设备。
2.4.1 Type 01h和Type 00h配置请求
(1)Type 01h配置请求
本节首先介绍Type 01h配置请求,并从PCI总线使用的信号线的角度上,讲述HOST主桥如何生成Type 01配置请求。在PCI总线中,只有PCI桥能够接收Type 01h配置请求。Type 01h配置请求不能直接发向最终的PCI Agent设备,而只能由PCI桥将其转换为Type 01h继续发向其它PCI桥,或者转换为Type 00h配置请求发向PCI Agent设备。PCI桥还可以将Type 01h配置请求转换为Special Cycle总线事务(HOST主桥也可以实现该功能),本节对这种情况不做介绍。
在地址周期中,HOST主桥使用配置读写总线事务,将CONFIG_ADDRESS寄存器的内容拷贝到PCI总线的AD[31:0]信号线中。CONFIG_ADDRESS寄存器与Type 01h配置请求的对应关系如图2-11所示:
从图2-11中可以发现,CONFIG_ADDRESS寄存器的内容基本上是原封不动地拷贝到PCI总线的AD[31:0]信号线上的。其中CONFIG_ADDRESS的Enable位不被拷贝,而AD总线的第0位为必须为1,表示当前配置请求是Type 01h。
为了便于理解和参照,将CONFIG_ADDRESS寄存器结构图再次贴出,如下图所示:
当PCI总线接收到Type 01h配置请求时,将寻找合适的PCI桥接收这个配置信息(Type 01h配置头信息存在于PCI总线事务的地址周期中)。如果这个配置请求是直接发向PCI桥下的PCI设备时,PCI桥将接收个Type 01配置请求,并将其转换为Type 00h配置请求;否则PCI桥将当前Type 01h配置请求原封不动的传递给下一级PCI总线。
(2)Type 00h配置请求
如果HOST主桥或者PCI桥发起的是Type 00h配置请求,CONFIG_ADDRESS寄存器与AD[31:0]的转换如图2-12所示:
从图2-12中可以发现,此时处理器对CONFIG_DATA寄存器进行读写时,处理器将CONFIG_ADDRESS寄存器中的Function Number和Register Number字段拷贝到PCI的AD总线的第10~2位;将AD总线的第1~0位赋值为0b00。PCI总线在配置请求总线事务的地址周期根据AD[1:0]判断当前配置请求是Type 00h还是Type 01h,如果AD[1:0]等于0b00,表示是Type 00h配置请求;如果AD[1:0]等于0b01,表示是Type 01h配置请求。
而AD[31:11]与CONFIG_ADDRESS的Device Number字段有关。在Type 00h配置请求的地址周期中,AD[31:11]位有且只有一位为1,其中AD[31:11]的每一位选通一个PCI设备的配置空间。PCI设备配置空间的片选信号是IDSEL,因此AD[31:11]将与PCI设备的IDSEL信号对应相连。
当以下两种请求之一满足时,HOST主桥或者PCI桥将生成Type 00h配置头,并将其发送到指定的PCI总线上:
1)CONFIG_ADDRESS寄存器的Bus Number字段为0时,处理器访问CONFIG_DATA寄存器时,HOST主桥将直接向PCI总线0发出Type 00h配置请求。因为与HOST主桥直接相连的PCI总线号为0,此时表示HOST主桥需要访问与其直接相连的PCI设备。
2)当PCI桥收到Type 01h配置头时,将检查Type 01h配置头的Bus Number字段,如果这个Bus Number与PCI桥的Secondary Bus Number相同,则将这个Type 01h配置头转换为Type 00h配置头,并发送到该PCI桥的Secondary总线上。
更多内容请看下回。