我一直在阅读PCIe规范这一可怕的东西,但仍然无法对下面的问题进行任何解决。
发布于 2013-09-26 00:54:30
TL;DR /简短答案
不是的。对非预取内存的条形请求仅限于使用低32位地址空间.
http://www.pcisig.com/reflector/msg03550.html
长答案
答案是否定的原因与PCI内部设备有关。描述PCI总线所包含的内存范围的数据结构只保留足够的空间来存储非预取内存和I/O内存范围的32位基和限制地址。然而,它确实保留了足够的空间来存储64位基,并限制预取内存。
甚至更长的答案
具体来说,看看http://wiki.osdev.org/PCI#PCI_Device_Structure,图3(PCI到PCI桥)。这显示了PCI配置空间头类型0x01 (PCI到PCI桥的头格式)。请注意,从该表的寄存器1C开始,有以下内容:
<代码>H 12130: 16扩展I/O基地址H 222H 12332: 16为扩展I/O限制地址>H 224F 225>F 225
实际地址是通过连接(部分)这些寄存器和0(用于基址)或1(用于限制地址)来创建的。I/O和非预取基址和限制地址为32位,因此形成:
Bit# 31 20 19 16 15 0
I/O Base: [ 16 upper bits : 4 middle bits : 12 zeros ]
I/O Limit: [ 16 upper bits : 4 middle bits : 12 ones ]
Non-prefetchable Base: [ 12 bits : 20 zeros ]
Non-prefetchable Limit: [ 12 bits : 20 ones ]预取基和限制地址为64位,形成如下:
Prefetchable Base:
Bit# 63 32
[ 32 upper bits ]
[ 12 middle bits : 20 zeros ]
Bit# 31 16 15 0
Prefetchable Limit:
Bit# 63 32
[ 32 upper bits ]
[ 12 middle bits : 20 ones ]
Bit# 31 16 15 0正如您所看到的,只有预取内存基和限制寄存器被赋予足够的位来表示64位地址。其他所有的只限于32。
发布于 2012-07-01 19:59:57
PCIe可以定义64b内存寻址。BAR(基本地址寄存器)定义和使用在PCI3.0规范(第6.2.5.1章“地址映射”)中定义,而不是在PCIe规范中定义。
https://stackoverflow.com/questions/10456779
复制相似问题