使当前全局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设备的访问 。
推荐阅读
- Linux 核心--8.中断与中断处理
- 椰子汤的功效与作用 椰子汤有什么功效
- Linux操作系统如何限制SSH密码尝试次数
- 微软公司对Linux操作系统使出的各种杀招
- Linux 核心--4.内存管理
- 以Linux做路由器的问题
- Linux 核心--1.前言
- 红豆糖水的功效与作用 红豆糖水的功效与作用禁忌
- Linux 核心--3.软件基础
- 认识Linux操作系统下三大便利开源防火墙
