PCI 规范系列文档总共定义了三种方法让CPU 通过Host/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,可以通过两个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,MEMORY,CONFIG,具体的做法是通过在给PCI设备传送地址的时候C/BE[3:0]引脚上的值来决定到底是什么命令的,随后是data circle) 命令读取配置空间相应的Register Number处的Dword值到CONFIG_DATA端口上。
这个我也不太清楚,这是我复制来的,不知道有没有用:handshake |