PCI设备的配置空间

1.基本介绍
其实PCI设备的配置空间就是配置PCI设备的那些寄存器集合。PCI通常将PCI配置信息存放在E2PROM中,PCI设备上电初始化时,将E2PROM中的信息读到PCI设备的配置空间中作为初始值。这个过程由硬件逻辑完成,绝大多数PCI设备使用这种方式初始化其配置空间。系统加电时,BIOS检测PCI总线,确定所有连接在PCI总线上的设备以及它们的配置要求,并进行系统配置。所以,所有的PCI设备必须实现配置空间,从而能够实现参数的自动配置。
PCI总线规范定义的配置空间总长度为256个字节,配置信息按一定的顺序和大小依次存放。前64个字节的配置空间称为配置头,对于所有的设备都一样,配置头的主要功能是用来识别设备、定义主机访问PCI卡的方式(I/O访问或者存储器访问,还有中断信息)。其余的192个字节称为本地配置空间,主要定义卡上局部总线的特性、本地空间基地址及范围等。
一般我们需要关心配置空间中配置头的信息。

2.配置空间中配置头信息
PCI设备的配置空间_第1张图片
(1)Device ID和Vendor ID寄存器,这两个寄存器的值由PCISIG分配,只读。其中Vendor ID代表PCI设备的生产厂商,而Device ID代表这个厂商所生产的具体设备。如intel公司的基于82571EB芯片的系列网卡,其Vendor ID为0x8086,而Device ID为0x105E。
(2)Revision ID和Class Code寄存器,这两个寄存器只读。其中Revision ID寄存器记载PCI设备的版本号,该寄存器可以被认为是Device ID寄存器的扩展。而Class Code寄存器记载PCI设备的分类。
(3)Header Type寄存器,改寄存器只读,第7位表示当前设备是多功能还是单功能设备。第0~6位表示当前配置空间的类型,系统软件使用该寄存器区分不同类型的PCI配置空间。如普通PCI设备、PCI桥、CardBUS设备。
(4)Subsystem ID和Subsystem Vendor ID寄存器,这两个寄存器和Device ID及Vendor ID类似,也是记录PCI设备的生产厂商和设备名称。
(5)Expansion ROM base address寄存器,有些PCI设备在处理器还没有运行操作系统之前,就需要完成基本的初始化设置,比如显卡、键盘和硬盘等设备。为了实现这个“预先执行”功能,PCI设备需要提供一段ROM程序,而处理器在初始化过程中将运行这段ROM程序,初始化这些PCI设备。
(6)Expansion ROM base address记载这段ROM程序的基地址。
Interrupt Line寄存器,这个寄存器是系统软件对PCI设备进行配置时写入的,该寄存器记录当前PCI设备使用的中断向量号,设备驱动可以通过这个寄存器,判断当前PCI设备使用处理器系统中哪个中断向量号,并将驱动程序的中断服务例程注册到操作系统中。不过目前在绝大多数处理器系统中,并没有使用该寄存器存放PCI设备使用的中断向量号。
(7)Interrupt Pin寄存器,这个寄存器保存PCI设备使用的中断引脚。为1时表示使用INTA#引脚作为中断引脚,2时表示使用INTB#引脚作为中断引脚,依次类推。
(8)Base Address Register0~5寄存器,该组寄存器简称为BAR寄存器,BAR寄存器保存PCI设备使用的地址空间的基地址,注意,该基地址是指PCI设备的PCI总线地址,并不是在CPU地址空间中的地址。其中每一个设备最多可以有6个基地址空间,但多数设备不会使用这么多组地址空间。
在PCI设备复位之后,BAR寄存器存放PCI设备需要使用的基址空间大小,这段空间可以是IO空间,也可以是存储器空间。系统软件对PCI总线进行配置时,首先获得BAR寄存器中的初始化信息,之后根据处理器系统的配置,将合理的基地址写入相应的BAR寄存器中。系统软件还可以使用该寄存器,获得PCI设备使用的BAR空间的长度,其方法是向BAR寄存器写入0xFFFF-FFFF,之后再读取该寄存器。

处理器访问PCI设备的BAR空间时,需要使用BAR寄存器提供的基地址。值得注意的是,处理器使用的是CPU地址空间的地址,而BAR寄存器存放的是PCI总线地址。因此处理器系统需要将PCI总线地址转换为CPU地址空间的地址。在许多处理器系统中,如Alpha和PowerPC处理器系统,PCI总线地址与CPU地址空间地址并不相等。但是在x86系统中,这两个地址的值是一样的,也就是它们之间的关系是一一映射的。但是,即使这两个地址的值是一样的,也需要明白这两个地址是不同地址空间中的地址。同时这个CPU地址空间的地址表示的是物理地址,需要使用ioremap这类接口映射为虚拟地址后,才能被驱动或内核使用。

最后感谢蛋哥的文章分享。

你可能感兴趣的:(PCI,SylixOS)