PCI配置空间简介

上传人:油条 文档编号:20301256 上传时间:2017-11-21 格式:DOCX 页数:5 大小:95.81KB
返回 下载 相关 举报
PCI配置空间简介_第1页
第1页 / 共5页
PCI配置空间简介_第2页
第2页 / 共5页
PCI配置空间简介_第3页
第3页 / 共5页
PCI配置空间简介_第4页
第4页 / 共5页
PCI配置空间简介_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《PCI配置空间简介》由会员分享,可在线阅读,更多相关《PCI配置空间简介(5页珍藏版)》请在金锄头文库上搜索。

1、PCI 配置空间简介PCI 有三个互相独立的物理地址空间:设备存储器地址空间、I/O 地址空间和配置空间,配置空间是 PCI 所特有的一个物理空间。由于 PCI 支持设备即插即用,所以 PCI 设备不占用固定的内存地址空间或 I/O 地址空间,而是可以由操作系统决定其映射的基址。系统加电时,BIOS 检测 PCI 总线,确定所有连接在 PCI 总线上的设备以及它们的配置要求,并进行系统配置。所以,所有的 PCI 设备必须实现配置空间,从而能够实现参数自动配置,实现真正的即插即用。PCI 总线规范定义的配置空间总长度为 256 个字节,配置信息按一定的顺序和大小依次存放。前 64 个字节的配置空

2、间称为配置头,对于所有的设备都一样,配置头的功能主要是用来识别设备,定义主机访问 PCI 卡的方式(I/O 访问或者存储器访问,还有中断信息)。其余的 192 个字节的配置空间称为本地配置空间,主要定义卡上局部总线的特性、本地空间的基地址及范围。一个较为典型的 PCI 总线体系结构图。我们来看看 PCI 设备是如何被识别和工作的。 首先,如何读取配置空间 PCI 设备的配置信息包含了关于这个设备的基本情况的介绍,包括设备的名称,功能,使用方式等,因此首先必需要读取 PCI 设备的配置空间,才能够再讨论 PCI 设备的识别以及操作了。 PCI 规范系列文档总共定义了三种方法让 CPU 通过 Ho

3、st/PCI 桥在 PCI 总线上启动配置空间访问事务,这三种方法是:(1)配置机制1,即 Host/PCI 桥将 CPU 对 Host/PCI 桥设备的配置地址端口 0xcf8 和配置数据端口 0xcfc 的访问转换为桥后 PCI 总线上的配置空间访问事务。这也是 PCI Specification 2.2 所定义的唯一方法。(2)配置机制2。这是早期 PCI 规范所定义的方法,在PCI Specification 2.2 中已经被去除。(3)通过 PCI BIOS 提供的服务来访问配置空间。我主要介绍一下最最常用的第一种方法。 对于 PC-AT compatible System,可以通过

4、两个 I/O 端口来操作,CONFIG_ADDRESS(CF8h),CONFIG_DATA(CFCh)(都是 32 位的),通过给CONFIG_ADDRESS 写如下命令字Bus Number 选择是那个 PCI 总线,Device Number 选择这个总线上的那个设备,Function Number 选择这个设备上的那个子设备(称作功能),host-bridge 会通过以上信息选择正确的 pci 设备(置高正确的 IDSEL 引脚),然后给这个 pci设备发送 configuration read/write(可以参考 PCI 总线规范, PCI 总线上一共有三种不同读写类型的命令,IO,

5、MEMORY,CONFIG,具体的做法是通过在给 PCI设备传送地址的时候 C/BE3:0引脚上的值来决定到底是什么命令的,随后是data circle) 命令读取配置空间相应的 Register Number 处的 Dword 值到CONFIG_DATA 端口上。 Configuration read/write 命令同一般的 io 或 mem 的 read/write 不一样,他在PCI 地址线上放的不是实际的地址,而是将 CONFIG_ADDRESS 上的数据改变了一下放到 PCI 总线的 AD 引脚上,如图(当然对于所找的 PCI 设备不在 host-bridge 后直联的 pci 总

6、线上的情况,还要复杂点)。PCI 设备规定必须要支持 configuration read/write 操作,所以其会回复相应的配置空间 Register Number 位置处的值给 host bridge,从而传递到 COFIG_DATA端口。 对于 PCI 设备的配置空间,这个是有规定的,最小为 150 字节,格式如下:另外,补充一下,对于端口 CF8h 和 CFCh 的访问必须是双字 DWORD 的访问,其他的访问会被 host bridge 直接传递,因此这两个端口还可以给其他设备用。 再来看看 PCI 设备是如何被识别的 当机器刚启动以后,内核在起初始化阶段会依次采用上面提到的三种访

7、问配置空间的方法来查询主板上 PCI 总线上的 PCI 设备的配置空间。内核首要查找的是 PCI 总线编号为 0 的那个 PCI 根总线上的 Host/PCI 桥或者是 VGA 现实控制器的 PCI 设备,或者是厂商 ID 为 INTEL 和 Compaq 的 PCI 设备,只要上述的设备之一被检查到,那么内核就结束了 PCI 总线的探测工作,确定了通过哪种方式来访问配置空间。随后,系统会进行 PCI 总线枚举过程,也就是说它会依次查询各个 PCI 总线上的所有设备(从根总线开始查找其下面的每一个设备,其它的总线对于上级总线来说也类似于一个 PCI 设备,一次可以递归深入查找),枚举的过程其实

8、就是往 CONFIG_ADDRESS 端口发送各种不同 Bus Number 以及 Device Number 的命令字。经过这个枚举过程,系统就得到了当前主板上的所有 PCI 设备的配置信息了。 PCI 设备通过这些配置信息(看上面的那个表)告诉系统自己的 ID(用来区分不同的设备以及帮助驱动程序绑定特定的设备),同时还可以把 PCI 设备上的一些寄存器、内存和 IO 资源通过 BAR(Base Address Register)告诉系统,从而系统可以根据这些信息给设备上的寄存器和内存和 IO 端口资源分配总线地址,在必要的时候再将这些资源映射到系统内存和端口上(这一步是通过驱动程序实现的,

9、将 PCI 设备的物理资源(即总线地址)建立虚拟映射),这样访问PCI 设备,就变成了访问系统内存和 IO 端口操作了(通过命令iowrite32/ioread32 操作)。对于设备上大内存的访问,也有通过 DMA 实现的,它可以将 PCI 总线这边的(也就是主机下的)内存里的数据,搬移到 pci 总线上的设备的内存中,当然前提是这个设备支持这种 DMA(做法是把主机内存的虚拟地址转换成总线地址,然后再填写设备的目标和源地址,以及传输的数据大小,启动 DMA 就可以了)。 设备被识别以后,驱动程序也建立好了相应的内存和端口映射了,那么就是要按照不同的 PCI 设备的手册来读写设备的寄存器、内存以及 IO 端口,完成设备相应的功能。PCI 驱动程序一般只是封装了几组底层的访问特定寄存器、内存和 IO 端口的操作,提供给用户一组实在的功能,如读取 PCI 设备的视频信息等。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号