wucongdonglai 发表于 2011-01-27 11:36

pci IO内存和配置空间的概念理解

pci IO内存和配置空间其实是不是对应着同一个寄存器空间,是不同阶段的不同称呼?
配置空间是指在识别设备时候寄存器所存储的值,而当pci_request_region、ioremap后就成了IO内存?
还是说配置空间就是配置空间,里面存储了pci设备信息,而IO内存对应的是设备上的另一段寄存器?

shank941 发表于 2011-01-27 14:46

配置空间是pci的规范,一共256字节的配置空间,前64字节的配置空间是固定的(包括device/ventor id ,bar等)
配置了配置空间的bar,然后可以把这个pci设备的寄存器(非配置空间的内容)映射到io/memory空间中,这样可以操作io/memory空间访问这个pci设备的寄存器来。

wucongdonglai 发表于 2011-01-27 17:12

配置空间是pci的规范,一共256字节的配置空间,前64字节的配置空间是固定的(包括device/ventor id ,bar等)
...
shank941 发表于 2011-01-27 14:46 http://linux.chinaunix.net/bbs/images/common/back.gif


    也就是说:IO空间和配置空间并不相同,而且IO空间还可能会没有?
另外,配置空间有些寄存器是不是只读的,比如写入厂商ID的?
有些寄存器是可读可写的,比如基地址寄存器?

shank941 发表于 2011-01-28 11:51

也就是说:IO空间和配置空间并不相同,而且IO空间还可能会没有?
另外,配置空间有些寄存器是不 ...
wucongdonglai 发表于 2011-01-27 17:12 http://linux.chinaunix.net/bbs/images/common/back.gif


   
IO空间和配置空间并不相同,而且IO空间还可能会没有?
re:如果你配置空间的BAR配置的是memory空间,设备的寄存器(非配置空间的内容,而是你操作这个硬件需要的其他寄存器)就映射到memory空间了啊


配置空间有些寄存器是不是只读的,比如写入厂商ID的?
re:是,系统就是初始化时遍历到pci设备时 根据device id/ventor id找到相应的驱动代码来初始化这个pci设备

有些寄存器是可读可写的,比如基地址寄存器?

pci配置空间主要也就是配置下基地址寄存器还有中断啥的,通过pci_read_config_word,pci_write_config_word等函数来访问和操作配置空间,
配置空间配置完成后, 这个设备的寄存器(非配置空间内容,比如网卡的mac寄存器等)就通过基地址寄存器配置的映射地址映射到memory或者io
空间了,此时你就可以像访问内存一样访问 设备的寄存器去初始化和管理设备了,同时注意此时读写寄存器时,尽量加上volatile,防止被优化。

建议你先大概看下pci设备规范,再去linux底下找个pci设备的代码看下,比如e1000的网卡驱动。

wucongdonglai 发表于 2011-01-29 09:21

恩,好,这就清楚了,谢谢啊!
页: [1]
查看完整版本: pci IO内存和配置空间的概念理解