PCIE MSI特性

较早的 PCI 设备在 Configuration Space 中的 Capabilities List 本就是空的,他们认为Configuration Header Space 中的描述已经可以满足需求了。

后来的 PCI / PCIE 设备才支持MSI中断,你要判断一个 MSI 类型中断需要检查几点:

一是的 Status 寄存器,其中的 BIT4 为1 时才表明支持 Capabilities List,这时再从 Configuration Space 偏移 0x34 的 CapabilitiesPointer 中取得 Capabilities List,而这个 Capabilities List 对于 PCI 设备来说是可选的,这也就是为什么你测试有些 PCI 卡的 Capabilities Pointer 有效而有些无效了,但支持Capabilities List 并不表示就支持 MSI 中断。第二点你需要知道这时你得到的仅是Capabilities List 的根节点的指针,由它指向第一个 Capability Structure。而 CapabilitiesList 则是由多种 Capability Structure 组成的,如:POWER MGR,AGP,PCI­X/PCIE 当然也包括了 MSI/MSI­X。

虽说每个 Capability Structure 不一样,但其头部的两个字段 Capability ID与 Next Capability Pointer 是每个 Capability 都有的,Capability ID 具有唯一性,代表当前结构的类型(Capability ID = 5 表示为 MSI Structer),Next Capability Pointer 则表示指向下一个 Capability。也就是说当你拿到 Capabilities List 时需要遍历全部的 CapabilitiesList,其中 Capability ID = 5 的才是 MSI Structure,即表示当前设备支持 MSI 中断,而不是像你那样直接从 Configuration Header Space 取 Capabilities Pointer 在并从当中第一个Capability Structure 判断。

你可能感兴趣的:(PCIE MSI特性)