NotePublic/Hardware/Bus/PCI/PCIe_中的_Capability_结构的寻址.md

1.9 KiB

PCIe 中的 Capability 结构的寻址

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

PCIe 总线 Capability 结构的组成

其中每一个 Capability 结构都有唯一的 ID 号,每一个 Capability 寄存器都有一个指针,这个指针指向下一个 Capability 结构,从而组成一个单向链表结构,这个链表的最后一个 Capability 结构的指针为 0。链表开始的指针地址为 0x34 处的 1byte 数值,寻址过程如下。

PCIe Config 空间 Capability 指针

  1. We look at address 34h and see the address of the next capability register set (50h).

    查找 Capability 寄存器

  2. We jump to 50h and see a capability ID of 05h (MSI Capability Structure). We look at the next capability pointer in 51h to find which address to jump to next (78h).

    查找 Capability 寄存器

  3. We jump to 78h and see a capability ID of 01h (Power Management Capability Structure). We look at the next capability pointer in 79h to find which address to jump to the next (80h).

    查找 Capability 寄存器

  4. We jump to 80h and see a capability ID of 10h (PCI Express Capability Structure). We see 00h as the next capability pointer in 81h signifying the end of the linked list.

    查找 Capability 寄存器