3. PCIe设备的扩展配置空间

时间:2024-05-22 17:51:26

0 概述

本书在第2.3.2节讲述了PCI设备使用的基本配置空间。这个基本配置空间共由64个字节组成,其地址范围为0x00~0x3F,这64个字节所有PCI设备必须支持(!!!PCI设备)的。事实上,许多PCI设备仅支持这64个配置寄存器

此外PCI/PCI-X和PCIe设备扩展了0x40~0xFF(!!!)这段配置空间,在这段空间主要存放一些与MSI或者MSI-X中断机制电源管理相关的Capability结构。其中所有能够提交中断请求的PCIe设备,必须支持MSI或者MSI-X Capability结构(!!!)。

PCIe设备还支持0x100~0xFFF(!!!)这段扩展配置空间。PCIe设备使用的扩展配置空间最大为4KB(其实是一共的配置空间大小!!!),在PCIe总线的扩展配置空间中,存放PCIe设备所独有的一些Capability结构,而PCI设备不能使用这段空间。

在x86处理器中,使用CONFIG_ADDRESS寄存器CONFIG_DATA寄存器访问PCIe配置空间0x00~0xFF,而使用ECAM方式访问0x000~0xFFF这段空间;而在PowerPC处理器中,可以使用CFG_ADDR和CFG_DATA寄存器访问0x000~0xFFF,详见第2.2节。

PCI-XPCIe总线规范要求其设备必须支持Capabilities结构。在PCI总线基本配置空间中,包含一个Capabilities Pointer寄存器(!!!),该寄存器存放Capabilities结构链表的头指针。在一个PCIe设备中,可能含有多个Capability结构,这些寄存器组成一个链表,其结构如图4‑14所示。

3. PCIe设备的扩展配置空间

其中每一个Capability结构都有唯一的ID号,每一个Capability寄存器都有一个指针,这个指针指向下一个Capability结构,从而组成一个单向链表结构,这个链表的最后一个Capability结构的指针为0

一个PCIe设备可以包含多个Capability结构(!!!),包括与电源管理相关、与PCIe总线相关的结构、与中断请求相关的Capability结构、PCIe Capability结构和PCIe扩展的Capability结构。在本书的其他章节也将讲述这些Capability结构,读者在继续其他章节的学习之前,需要简单了解这些Capability结构的寄存器组成和使用方法。

其中读者需要重点关注的是MSI/MSI-X Capability结构本篇在第6章详细将讨论MSI/MSI-X Capability结构。在PCIe总线规范中,定义了较多的Capability结构,这些结构适用于不同的应用场合,在一个指定的PCIe设备中,并不一定支持本篇中涉及的所有Capability结构。系统软件程序员也不需要完全掌握PCIe总线规范定义的这些Capability结构。

1 Power Management Capability结构

2 PCI Express Capability结构

PCI Express Capability结构存放一些和PCIe总线相关的信息, 包括PCIe链路和插槽的信息. 有些PCIe设备不一定实现结构中所有寄存器, 或者并没有提供这些配置寄存器供系统软件访问.

PCI Express Capability结构的部分寄存器及其相应字段与硬件的具体实现细节相关, 本节仅介绍其中一些系统软件程序员需要了解的字段.

该结构中, Cap ID字段为PCI Express Capability结构使用的ID号, 其值为0x10. 而Next Capability字段存放下一个Capability寄存器的地址. PCI Express Capability结构如图.

3. PCIe设备的扩展配置空间

.......

3 PCI Express Extended Capability结构