本节介绍特定于 Solaris 平台支持的总线的寻址问题和设备配置问题。
PCI 局部总线是旨在实现高速数据传送的高性能总线。PCI 总线驻留在系统板上。此总线通常用作高度集成的外围组件、外围附件板以及主机处理器或内存系统之间的互连机制。主机处理器、主内存和 PCI 总线本身都通过 PCI 主桥 (host bridge) 连接,如图 A–3 中所示。
互连的 I/O 总线树结构通过一系列 PCI 总线网桥进行支持。可以在 PCI 主桥 (host bridge) 下扩展从属 PCI 总线网桥,以使单总线系统扩展为带有多条辅助总线的复杂系统。PCI 设备可以连接到其中的一条或多条辅助总线。此外,还可以连接其他总线网桥,如 SCSI 或 USB。
每个 PCI 设备都具有唯一的供应商 ID 和设备 ID。相同种类的多台设备会通过其驻留的总线上的唯一设备号进一步标识。
PCI 主桥 (host bridge) 用于提供处理器和外围组件之间的互连。通过 PCI 主桥 (host bridge),处理器可以直接访问独立于其他 PCI 总线主控器的主内存。例如,当 CPU 正在从主桥 (host bridge) 中的高速缓存控制器中提取数据时,其他 PCI 设备也可以通过该主桥 (host bridge) 访问系统内存。这种体系结构的优点在于其分隔了 I/O 总线与处理器的主机总线。
PCI 主桥 (host bridge) 还可提供 CPU 和外围 I/O 设备之间的数据访问映射。该桥会将每个外围设备映射到主机地址域,以便处理器可以通过程控 I/O 访问此设备。在局部总线端,PCI 主桥 (host bridge) 会将系统内存映射到 PCI 地址域,以便 PCI 设备可以作为总线主控器访问主机内存。图 A–3 显示了两种地址域。
PCI 地址域包含三种不同的地址空间: 配置、内存以及 I/O 空间。
配置空间按地理位置定义。外围设备的位置通过它在互连的 PCI 总线网桥树中的物理位置确定。设备按其总线编号和设备(插槽)编号进行定位。每个外围设备在其 PCI 配置空间中都包含一组明确定义的配置寄存器。这些寄存器不仅用于标识设备,还用于为配置框架提供设备配置信息。例如,必须首先映射设备配置空间中的基址寄存器,然后设备才能响应数据访问。
生成配置周期的方法取决于主机。x86 计算机中使用的是特殊的 I/O 端口。在其他平台上,可以将 PCI 配置空间内存映射到对应于主机地址域中 PCI 主桥 (host bridge) 的某些地址位置。处理器访问设备配置寄存器时,会将请求路由到 PCI 主桥 (host bridge)。然后,该桥会在总线上将访问转换为正确的配置周期。
PCI 配置空间针对每台设备最多包含六个 32 位基址寄存器。这些寄存器可同时提供大小和数据类型信息。系统固件会将 PCI 地址域中的基本地址分配给这些寄存器。
每个可寻址区域既可以是内存空间,也可以是 I/O 空间。基址寄存器的位 0 包含的值用于标识类型。位 0 中的值为 0 表示内存空间,值为 1 表示 I/O 空间。下图显示了两种基址寄存器: 一种表示内存类型,另一种表示 I/O 类型。
PCI 同时支持 32 位和 64 位的内存空间地址。系统固件会将 PCI 地址域中的内存空间区域分配给 PCI 外围设备。区域的基本地址存储在设备的 PCI 配置空间的基址寄存器中。每个区域的大小必须是 2 的幂,并且所分配的基本地址必须在与区域大小相等的边界上对齐。内存空间中的设备地址会内存映射到主机地址域中,以便处理器的本机装入指令或存储指令可以对任何设备执行数据访问。
PCI 支持 32 位 I/O 空间。可以在不同的平台上以不同方式访问 I/O 空间。带有特殊 I/O 指令的处理器(如 Intel 处理器系列)使用 in 和 out 指令访问 I/O 空间。没有特殊 I/O 指令的计算机将映射到对应于主机地址域中 PCI 主桥 (host bridge) 的地址位置。处理器访问内存映射的地址时,会向 PCI 主桥 (host bridge) 发送一个 I/O 请求,该主桥 (host bridge) 随后会将地址转换为 I/O 周期并将其放置在 PCI 总线上。内存映射的 I/O 通过处理器的本机装入/存储指令执行。
对于 PCI 局部总线设备,硬件配置文件应是不必要的。但是在某些情况下,PCI 设备的驱动程序需要使用硬件配置文件来增加驱动程序的专用信息。有关更多详细信息,请参见 driver.conf(4) 和 pci(4) 手册页。
标准 PCI 总线已发展为 PCI Express。PCI Express 是下一代高性能 I/O 总线,用于连接桌面、移动设备、工作站、服务器以及嵌入式计算和通信平台之类的应用程序中的外围设备。
PCI Express 可提高总线性能,减少整体系统支出,并可利用计算机设计中新的发展成果。PCI Express 使用串行的点对点类型互连在两台设备之间实现通信。通过交换机,用户可以在某个系统中将大量设备连接在一起。串行互连意味着每台设备软件包的管脚更少,这可降低成本并使性能具有高度可伸缩性。
PCI Express 总线具有内置功能,可以适应以下技术:
QoS(Quality of Service,服务质量)
热插拔和热交换
高级电源管理
RAS(Reliability, Available, Serviceable,可靠性、可用性、可维护性)
改进的错误处理
MSI 中断
将两台设备连接在一起的 PCI Express 互连称为链路。链路可以是 x1、x2、x4、x8、x12、x16 或 x32 双向的信号对。这些信号称为道。双工模式中每条道的带宽 (x1) 为 500 MB/秒。虽然 PCI-X 和 PCI Express 具有不同的硬件连接,但是对驱动程序编写者来说,两种总线是相同的。PCI-X 是共享总线。例如,总线上的所有设备都共享单独的一组数据线和信号线。PCI-Express 是交换总线,通过它可以更有效地使用设备和系统总线之间的带宽。
有关 PCI Express 的更多信息,请参阅以下 Web 站点:http://www.pcisig.com/home
典型的 S 总线系统由主板(包含 CPU 和 S 总线接口逻辑)、主板本身上的大量 S 总线设备以及大量 S 总线扩展插槽组成。另外,还可以通过相应的总线网桥将 S 总线连接到其他类型的总线。
S 总线按地理位置进行寻址。每个 S 总线插槽位于系统中固定的物理地址上。S 总线卡具有不同的地址,具体取决于其插入的插槽。将 S 总线设备移动到新插槽会导致系统将此设备视为新设备。
S 总线使用轮询中断。S 总线设备中断时,系统仅知道若干设备中的哪些设备可能发出该中断。系统中断处理程序必须询问每台设备的驱动程序此设备是否负责中断。
下表显示了 Sun UltraSPARC 2 计算机的物理地址空间布局。UltraSPARC 2 模型上的物理地址包含 41 位。该 41 位的物理地址空间会进一步分为多个通过 PA(40:33) 标识的 33 位地址空间。
表 A–1 Ultra 2 中的设备物理空间
PA(40:33) |
33 位空间 |
使用情况 |
---|---|---|
0x0 |
0x000000000 - 0x07FFFFFFF |
2 GB 主内存 |
0x80 – 0xDF |
Reserved on Ultra 2 |
在 Ultra 2 上保留 |
0xE0 |
Processor 0 |
处理器 0 |
0xE1 |
Processor 1 |
处理器 1 |
0xE2 – 0xFD |
Reserved on Ultra 2 |
在 Ultra 2 上保留 |
0xFE |
0x000000000 - 0x1FFFFFFFF |
从属 UPA (FFB) |
0xFF |
0x000000000 - 0x0FFFFFFFF |
系统 I/O 空间 |
|
0x100000000 - 0x10FFFFFFF |
S 总线插槽 0 |
|
0x110000000 - 0x11FFFFFFF |
S 总线插槽 1 |
|
0x120000000 - 0x12FFFFFFF |
S 总线插槽 2 |
|
0x130000000 - 0x13FFFFFFF |
S 总线插槽 3 |
|
0x1D0000000 - 0x1DFFFFFFF |
S 总线插槽 D |
|
0x1E0000000 - 0x1EFFFFFFF |
S 总线插槽 E |
|
0x1F0000000 - 0x1FFFFFFFF |
S 总线插槽 F |
S 总线具有 32 个地址位,如 SBus Specification(S 总线规范)中所述。下表介绍 Ultra 2 如何使用地址位。
表 A–2 Ultra 2 S 总线地址位
位 |
说明 |
---|---|
0 - 27 |
这些位是 S 总线卡用于寻址该卡的内容的 S 总线地址行。 |
28 - 31 |
供 CPU 用于选择其中一个 S 总线插槽。这些位会生成 SlaveSelect 行。 |
此寻址方案将生成表 A–1 中显示的 Ultra 2 地址。其他实现可能会使用不同数量的地址位。
Ultra 2 具有七个 S 总线插槽,其中四个是物理插槽。插槽 0 到 3 可供 S 总线卡使用。插槽 4-12 为保留插槽。插槽的使用情况如下:
插槽 D、E 以及 F 并非实际物理插槽,而是指板载直接内存访问 (direct memory access, DMA) 控制器、SCSI 控制器、以太网控制器以及音频控制器。为方便起见,会将这些设备类视为插入了插槽 D、E 以及 F。
某些 S 总线插槽是仅从属插槽。需要 DMA 功能的驱动程序应使用 ddi_slaveonly(9F) 来确定其设备是否位于具有 DMA 功能的插槽中。有关此函数的示例,请参见attach() 入口点。
通常,S 总线设备不需要硬件配置文件。但是在某些情况下,S 总线设备的驱动程序需要使用硬件配置文件来增加 S 总线卡所提供的信息。有关更多详细信息,请参见 driver.conf(4) 和 sbus(4) 手册页。