【转载】pci空间

注:本文为以后pci模拟做的相关资料调研及整理。

PCI有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间配置空间是PCI所特有的一个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。

      系统加电时,BIOS检测PCI总线,确定所有连接在PCI总线上的设备以及它们的配置要求,并进行系统配置。所以,所有的PCI设备必须实现配置空间,从而能够实现参数的自动配置,实现真正的即插即用。

         PCI总线可以通过桥芯片级连.按与CPU总线所隔的桥数目和同一层总线的扫描顺序,从0开始依次编号,扩展最多N256,0—256就是总线号;在指定的局部总线上.按硬件扫描顺序从O开始依次编号,扩展最多到32。0~32就是设备号;在一个多功能PCI设备上,最多可以实现8种功能,按设备上配置存储区的顺序从0开始依次编号,称其为功能号,一般的设备只有一个功能这三个号组合起来就可确定唯一的一个PCI设备以及该设备上的某项功能。通过这三个参数(可组成PCI设备标识符)就可操作PCI设备。

 

 15                          8|7                             3 |2     0| Addr

---+---------------------------------------------------------+-----

          BUS                |     Device        | Function  

---+---------------------------------------------------------+-----

                  图1 设备标识符

 

 

 

      PCI总线规范定义的配置空间总长度为256个字节,配置信息按一定的顺序和大小依次存放。前64个字节的配置空间称为配置头(如下图所示),对于所有的设备都一样,配置头的主要功能是用来识别设备、定义主机访问PCI卡的方式(I/O访问或者存储器访问,还有中断信息)。其余的192个字节称为本地配置空间,主要定义卡上局部总线的特性、本地空间基地址及范围等。

 

DW |    Byte3    |    Byte2    |    Byte1    |     Byte0     | Addr

---+---------------------------------------------------------+-----

 0 |     Device ID     |     Vendor ID      | 00

---+---------------------------------------------------------+-----

 1 |      Status     |      Command      | 04

---+---------------------------------------------------------+-----

 2 |        Class Code        | Revision ID | 08

---+---------------------------------------------------------+-----

 3 |   BIST  | Header Type | Latency Timer | Cache Line  | 0C

---+---------------------------------------------------------+-----

 4 |           Base Address 0           | 10

---+---------------------------------------------------------+-----

 5 |           Base Address 1           | 14

---+---------------------------------------------------------+-----

 6 |           Base Address 2           | 18

---+---------------------------------------------------------+-----

 7 |           Base Address 3           | 1C

---+---------------------------------------------------------+-----

 8 |           Base Address 4           | 20

---+---------------------------------------------------------+-----

 9 |           Base Address 5           | 24

---+---------------------------------------------------------+-----

10 |          CardBus CIS pointer          | 28

---+---------------------------------------------------------+-----

11 |  Subsystem Device ID  |   Subsystem Vendor ID   | 2C

---+---------------------------------------------------------+-----

12 |        Expansion ROM Base Address        | 30

---+---------------------------------------------------------+-----

13 |        Reserved(Capability List)         | 34

---+---------------------------------------------------------+-----

14 |            Reserved             | 38

---+---------------------------------------------------------+-----

15 |  Max_Lat  |  Min_Gnt  |  IRQ Pin  |  IRQ Line  | 3C

-------------------------------------------------------------------

                    图2 PCI配置空间

  配置空间中最重要的有:

    Vendor ID:厂商ID。知名的设备厂商的ID。FFFFh是一个非法厂商ID,可它来判断PCI设备是否存在。

    Device ID:设备ID。某厂商生产的设备的ID。操作系统就是凭着 Vendor ID和Device ID 找到对应驱动程序的。

    Status: 状态寄存器的不同位表示出错状态,如第15位为1表示该设备检测到一个奇偶错误。

 Command: 指令寄存器的每一不同的位代表不同的含义。

    Class Code:类代码。共三字节,分别是 类代码、子类代码、编程接口。类代码不仅用于区分设备类型,还是编程接口的规范,这就是为什么会有通用驱动程序。

    Header Type :指示Header 中从地址10H到3FH区域的内容格式,同时指示该设备是否为多功能设备。

    Base Address: 是基地址寄存器,也就是常说的PCI Bar。它报告设备寄存器或设备RAM在I/O端口地址空间(或物理地址空间)的地址。

                                       

        

    IRQ Line:IRQ编号。PC机以前是靠两片8259芯片来管理16个硬件中断。现在为了支持对称多处理器,有了APIC(高级可编程中断控制器),它支持管理24个中断。

    IRQ Pin:中断引脚。PCI有4个中断引脚,分别表示INTA、INTB、INTC和INTD,该寄存器表明该设备连接的是哪个引脚。

posted on 2011-10-31 09:57  hydah  阅读(819)  评论(0编辑  收藏  举报