Linux 核心--7.PCI设备(4)

2008-02-23 07:23:46来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


Linux使用的算法依赖于由PCI设备驱动程序建立的描叙PCI设备的总线/设备树,每个设备的地址空间按照PCI I/O内存顺序的升序来分配。同时再次使用遍历算法来遍历由PCI初始化代码建立的pci_bus和 pci_dev结构。从根PCI总线开始(由pci_boot指向)PCI补丁代码将完成下列工作: 

使当前全局PCI I/O和内存的基址在4K,边界在1M上对齐。 

对于当前总线上的每个设备(按照PCI I/O内存需要的升序排列) 
在PCI I/O和PCI内存中为其分配空间 

为全局PCI I/O和内存基址同时加上一个适当值 

授予设备对PCI I/O和PCI内存的使用权 
 


为对于当前总线下方的所有总线循环分配空间。注意这将改变全局PCI I/O和内存基址。 

使当前全局PCI I/O和内存的基址和边界分别在4K和1M对齐,以便确定当前PCI-PCI桥接器所需的PCI I/O和PCI内存基址及大小。 

对此PCI-PCI桥接器编程,将其PCI I/O和PCI内存基址及界限连接到总线上。 

打开PCI-PCI桥接器上的PCI I/O和PCI内存访问桥接功能。这时在此桥接器主干PCI总线上位于此桥接器PCI I/O和PCI内存地址窗口中的任何PCI I/O或者PCI内存地址将被桥接到二级PCI总线上。 
以图6.1中的PCI系统为例,PCI补丁代码将以如下方式设置系统: 


对齐PCI基址 
PCI I/O基址为0x4000而PCI内存基址为0x100000。这样允许PCI-ISA桥接器将此地址以下的地址转换成ISA地址循环。 
视频设备 
我们按照它的请求从当前PCI内存基址开始分配0x200000字节给它,这样可以在边界上对齐。PCI内存基址被移到0x400000同时PCI I/O基址保持在0x4000。 
PCI-PCI 桥接器 
现在我们将穿过PCI-PCI桥接器来分配PCI内存,注意此时我们无需对齐这些基址,因为它们已经自然对齐。 
以太网设备 
它需要0xB0字节的PCI I/O和PCI内存空间。这些空间从PCI I/O地址0x4000和PCI内存地址 0x400000处开始。PCI内存基址被移动到0x4000B0同时PCI I/O基址移动到0x40B0。 
SCSI 设备 
它需要0x1000字节PCI内存,所以它将在自然对齐后从从0x401000处开始分配空间。PCI I/O基址仍然在0x40B0而PCI内存基址被移动到0x402000。 
PCI-PCI 桥接器的PCI I/O和内存窗口 
现在我们重新回到桥接器并将其PCI I/O窗口设置成0x4000和0x40B0之间, 同时其PCI内存窗口被设置到0x400000和0x402000之间。这样此PCI-PCI桥接器将忽略对视频设备的PCI内存访问但传递对以太网设备或者SCSI设备的访问。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Linux 核心--9.设备驱动

下一篇:Linux 核心--6.进程间通讯机制