Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191105
  • 博文数量: 76
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 831
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-31 00:52
文章分类

全部博文(76)

文章存档

2010年(58)

2009年(18)

我的朋友

分类:

2010-03-13 17:36:33



PCI bus

Peripheral Component Interconnect  Bus

每个PCI外设由一个总线、一个设备号和一个功能号标识。
PCI 规范允许单个系统占用多达256个总线,但是因为256个总线对许多大系统是不够的,Linux现在支持PCI域. 每个PCI域可以占用多达256个总线。每个总线占用 32个设备, 每个设备可以是一个最多有8个功能的多功能卡(例如一个声音设备, 带有一个附加的 CD-ROM 驱动),有点类似USB总线。因此在硬件层面,可以用一个16位的地址寻址每个PCI设备。

总线之间可以通过bridge互连,于是便有了PCI-PCI,PCI-ISA等briges compenent, 整个PCI系统就是一个树形结构,其中bus 0是这棵树的根。bus 0 与CPU、RAM之间是通过PCI bridge相连接的。


PCI设备上有三种地址空间:memory locations, I/O ports and configuration registers.
I/O空间、存储空间和的配置空间。

I/O空间和存储空间由同一条PCI总线的的所有设备共享,例如当你存取一个内存空间时,同一条总线上所有的设备都可以看到总线周期信号等。
而配置空间则采用geographical addressing(地理位置寻址),所以configuration queries每次只会寻址一个slot,不会存在冲突。
The configuration sapce exploits geographical addressing, configuration queries address only one slot at a time, so they never collide.

PCI总线的I/0空间采用32位总线地址,存储空间则采用32位和64位总线地址。每一个
I/0空间和存储空间都可以通过配置空间的设置而remapped.

CPU可以直接访问
I/0空间和存储空间,间接的通过访问PCI controler来访问配置空间。


I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始化,配置好所有的 PCI设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所有找到的PCI设备,以及这些设备的参数和属性。

Four bytes of the configuration space hold a unique function ID, the VendorID and DeviceID pair, so the driver can use it to identify the device.

In Linux, there is a structure named  pci_device_id,   the driver have to fill in the types of device which it supported, and it is exported to user space to allow the hotplug and module loading system know what moudle works with hardware devices.




Specification notes:
1. PCI registers are always little-endian.


Code notes:

int pci_proc_attach_device(struct pci_dev *dev)
  exported info to /proc




Refer to

http://www.ibm.com/developerworks/cn/linux/l-pci/index.html
阅读(695) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~