3.1 PCI设备BAR空间的初始化

本文介绍了PCI设备在数据传送前如何初始化BAR寄存器和PCI桥的Base、Limit寄存器,强调了PCI总线地址与存储器地址之间的转换。通过DFS算法,系统软件分配PCI设备在PCI总线域的地址,处理器通过转换才能访问PCI设备。文章还探讨了PowerPC和x86处理器的不同转换机制,并举例说明了PCI设备BAR寄存器的初始化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PCI Agent设备进行数据传送之前,系统软件需要初始化PCI Agent设备的BAR0~5寄存器和PCI桥的BaseLimit寄存器。系统软件使用DFS算法对PCI总线进行遍历时,完成这些寄存器的初始化,即分配这些设备在PCI总线域的地址空间。当这些寄存器初始化完毕后,PCI设备可以使用PCI总线地址进行数据传递。

值得注意的是,PCI Agent设备的BAR0~5寄存器和PCI桥的Base寄存器保存的地址都是PCI总线地址。而这些地址在处理器系统的存储器域中具有映像,如果一个PCI设备的BAR空间在存储器域中没有映像,处理器将不能访问该PCI设备的BAR空间。

如上文所述,处理器通过HOST主桥将PCI总线域与存储器域隔离。当处理器访问PCI设备的地址空间时,需要首先访问该设备在存储器域中的地址空间,并通过HOST主桥将这个存储器域的地址空间转换为PCI总线域的地址空间之后,再使用PCI总线事务将数据发送到指定的PCI设备中。

PCI设备访问存储器域的地址空间,即进行DMA操作时,也是首先访问该存储器地址空间所对应的PCI总线地址空间,之后通过HOST主桥将这个PCI总线地址空间转换为存储器地址空间,再由DDR控制器对存储器进行读写访问。

不同的处理器系统采用不同的机制实现存储器域和PCI总线域的转换。如PowerPC处理器使用Outbound寄存器组实现存储器域到PCI总线域间的转换,并使用Inbound寄存器组实现PCI总线域到存储器域间的转换。

x86处理器没有这种地址空间域的转换机制,因此从PCI设备的角度上看,PCI设备可以直接访问存储器地址;从处理器的角度上看,处理器可以直接访问PCI总线地址空间。但是读者需要注意,在x86处理器的HOST主桥中仍然有存储器域与PCI总线域这个概念。只是在x86处理器的HOST主桥中,存储器域的存储器地址与PCI总线地址相等,这种“简单相等”也是一种映射关系。

3.1.1 存储器地址与PCI总线地址的转换

下文根据PowerPCx86处理器的主桥,抽象出一个虚拟的HOST主桥,并以此为例讲述PCI Agent设备之间,以及PCI Agent设备与主存储器间的数据传送过程。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值