pci 配置空间详解之Base Addresses

本文介绍了在系统启动过程中,BIOS如何为PCI设备创建统一的地址映射,并检测设备是否包含扩展ROM。主要内容涵盖地址映射的基础知识,包括如何通过Base Address Register确定设备的I/O或内存空间映射。

为了使pci 设备有更强的功能,更方便的使用方法,pci 可以在在址空间去重定向pci devices.

在system 开机的时候,与具体设备无关的软件必须去检测到这是一个什么设备,构建一个一致(consistent)

的地址映射,还要检测这个设备有没有扩展rom.  下面的章节将会包括这些内容。


1. Address Maps

Power-up 软件(应该就是bios) 将系统引导到操作系统之前需要建立一个一致(consistent) 的地址映射,这就是说它需要确定

这个系统有多少内存,I/O 控制器需要多少空间。当这些信息确定好之后,power-up 软件(bios) 可以将I/O 映射到一个合理的位置,

然后去处理系统启动。为了让这种映射做到设备无关,给这种映射的基地址放在事先定义好的head portion(配置空间的)。


所有Base Address register  的bit 0 是只读的,用来标识是映射到I/0 还是内存空间,如果是映射到内存空间,那么bit 0必须返

回一个0. 如果是映射到I/O 空间,那么bit 0必须返回一个1. 参考下面图形。



当bit 0 置1的时候,映射到I/O 空间的,始终是32bit 宽度, bit 1 是reserved. 当对bit 1作读操作的时候,必须返回0.

其他bit 就用来将这个设备映射到i/o 空间。


当bit 0 置0的时候,映射到内存可以32bit宽度也可以是64bit 宽度. 对于内存基地址寄存器,bit 2 和bit 1 应该按下表

去解析

bit 3应该设为1,如果里面的数据可预存取(prefetchable). 如果不是,应该设为0.

 

剩下的高位,具体为几,取决于这个设备需要多少地址空间。对于32bit 宽度的寄存器,可以做到从16字节到2GB.

如果一个设备需要1M的空间,那么它就去把高位的12bit设为1,其他位置0.

 

power-up 软件可以通过往里面写一个全1的值,然后读回来,就可以确定他需要多大的地址空间。对于无关紧要的

bit 都会返回0.不做用的(unimplemented) base address 写为0.

 

这种设计意味着用作地址的都是2的指数,以及被很自然的排列整齐了,


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值