PCIe学习笔记(9)--- 配置空间的两种访问方式--LEGACY

1.

IO访问


一段历史:

早期的PC,只有64KB的IO空间

到了PCI协议出现的时候,IO空间只留下两段,0x800-0x8FF, 0xC00-0xCFF

因些,根本不可能将系统中的所有PCI FUNCTION 配置空间都放到这两段IO空间中去


另外一点,当时的内存空间,似乎也不是很够用,所以,也没有说将PCI FUNCTION的配置空间映射到内存空间中去


所以,PCI SPEC的制定者,设计了一种通过IO间接访问的方式来访问PCI FUNCTION 配置空间的方式


2.

IO访问

由一个地址寄存器,与一个数据(写的数据,或者读回来的数据)寄存器来实现这个需求


分别是IO空间(RC 的HOST TO PCI BRIDGE, IO PORTS)的:

CONFIGURATION ADDRESS PORT: 0xCF8-0xCFB

CONFIGURATION DATA PORT: 0xCFC-0xCFF


首先,先将目标地址(BDF)与(读写数据的在配置空间的地址偏移,单位为DWORD)写入地址寄存器

然后,再将数据写入,或者读出数据寄存器


所以,每一个配置空间的访问,需要两次IO访问


《---有一个问题,需要之后确认:

为什么写了这组寄存器,就能产生对PCI FUNCTION配置空间的读、写呢?

看下面


3.

地址寄存器的构成:

1:0 : 00

7 : 2 : TARGET DWORD

10:8: TARGET  FUNCTION

15:11: TARGET DEVICE

23:16: TARGET BUS

30:24: RESERVED

31: ENABLE(表示是普通的IO,还是CONFIGURATION REQUEST方式的WRITE/READ)



4.

两个新概念(对我来说,没学PCIE之前,不知道的)

SECONDARY BUS NUMBER: 是BUS NUMBER,即由这个BRIDGE构成的直接BUS的NUMBER

SUBORDINATE BUS NUMBER: 是由这个BRIDGE,与一系列其下面的BRIDGE,构成的,最大数值的BUS NUMBER


这样,就构成了一个范围


5.

RC的HOST TO PCI BRIDGE,对应一条VIRTUAL BUS,  它的SECONDARY BUS NUMBER = 0

《----

之前说过,RC有一个HOST TO PCI BRIDGE,对就BUS 0(VIRTUAL BUS), 其上接了一个或多个VIRTUAL PCI TO PCI BRIDGE, 对就的是BUS 1---m

而SWITCH也有一个VIRTUAL PCI TO PCI BRIDGE, 也对应一条VIRTUAL BUS, 其上也接了一个或多个VIRTUAL PCI TO PCI BRIDGE, 对应的也是BUS x--z

《---——


6.

一个CONFIGURATION REQUEST被发到一个BRIDGE后

BRIDGE将会判断,是否在它所对应的SECONDARY BUS NUMBER与SUBORDINATE BUS NUMBER的范围内

有以下几种情况

一,如果目标等于SECONDARY BUS NUMBER, 则该BUS上的设备为该REQUEST的接受(TYPE 0 CONFIGURATION REQUEST)者,

二, 如果目标在于SECONDARY BUS NUMBER, 小于等于SUBORDINATE BUS NUMBER, 则该REQUEST将以TYPE 1的形式,一级一级传递下去

三,不在范围内,则没有REQUEST的传递


7.

不管是单PROCESSOR(单RC),还是多PROCESSOR(多RC)的情况

CONFIGURATION ADDRESS PORT与CONFIGURATION DATA PORT只有一组






你可能感兴趣的:(PCI-Express)