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

    xiaoxiao2021-03-25  68

    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只有一组

    转载请注明原文地址: https://ju.6miu.com/read-33610.html

    最新回复(0)