1.PCIe中断概述
PCIe内的中断主要分为两类,一种是传统中断INTx,另一种则是消息中断MSI/MSI-X。本章主要就这两类中断做以阐述。
2.INTx
INTx是一般被叫做PCI的传统中断,每个设备最多支持四个中断信号,INTA、INTB、INTC和INTD. 说直白一点就是有四根线,每一根线分别对应了INTA、INTB、INTC和INTD。
ECAM空间内的Interrupt Pin寄存器就会记录使用的中断的遗留消息,Interrupt Pin寄存器有效值包括01h、02h、03h和04h,分别对应INTA、INTB、INTC和INTD的遗留中断消息。
是否禁用 INTx中断可以通过ECAM空间内的Command Register内的Interrupt Disable字段控制。
3.MSI
与INTx中断相比,MSI(Message Signaled Interrupt)的性能和灵活性更高。举个例子,当基于引脚的INTx中断被多个设备共享时,如果有中断产生,需要一一调用对应的中断处理函数,从而损失性能,而MSI则不存在上述的共享问题;再举个例子,多function的PCI设备,每个function最多有一个中断引脚,当事件发生时,驱动需要去查询设备才能清楚哪一个事件发生了,这会导致中断的处理速度降低,而一个设备可以支持32个MSI中断,每个中断可以对应特定的功能。
PCIe设备中就包含了MSI Capability结构,它共有四种组成方式,分别是32位/64位的Message结构,32位/64位带中断Mask的结构,MSI可以使用Mask的机制使能或者禁用某个中断源。
MSI Capability寄存器的结构如下图所示:
Figure 1 :MSI Capability Structure for 32-bit Message Address | |||
Message Control | Next Capability Pointer | Capability ID | |
Message Address | |||
Extended Message Data (if implemented) | Message Data |
Figure 2 :MSI Capability Structure for 64-bit Message Address | |||
Message Control | Next Capability Pointer | Capability ID | |
Message Address | |||
Message Upper Address | |||
Extended Message Data (if implemented) | Message Data |
Figure 3 :MSI Capability Structure for 32-bit Message Address and PVM | |||
Message Control | Next Capability Pointer | Capability ID | |
Message Address | |||
Extended Message Data (if implemented) | Message Data | ||
Mask Bits | |||
Pending Bits |
Figure 4:MSI Capability Structure for 64-bit Message Address and PVM | |||
Message Control | Next Capability Pointer | Capability ID | |
Message Address | |||
Message Upper Address | |||
Extended Message Data (if implemented) | Message Data | ||
Mask Bits | |||
Pending Bits |