4.6.3. MSI-X
P-Tile IP for PCIe提供一个配置输出接口(Configuration Output Interface)。用户软核逻辑可以监控此接口以获取MSI-X Enable和MSI-X功能掩码相关信息。用户应用程序逻辑需要在BAR指向的存储器空间中为所有PF和VF实现MSI-X表(作为Application Layer的一部分)。
关于您可以从配置输出接口(Configuration Output Interface)获得的MSI-X相关信息的详情,请参考配置空间寄存器章节中的MSI-X寄存器部分。
MSI-X是一个可选的功能,允许用户应用程序支持大量的向量,每个向量有独立的消息数据和地址。
当支持MSI-X时,您需要指定MSI-X表和PBA的大小和位置(BAR和偏移)。MSI-X可以支持每个功能高达2048个向量,而MSI可以支持每个功能最多32个向量。
当MSI-X使能并且一个功能未被屏蔽时,允许该功能发送MSI-X消息。应用程序使用Configuration Output Interface (地址0x0C bit[5:4])或者Configuration Intercept Interface来访问此信息。
当应用程序需要生成一个MSI-X时,它将使用MSI-X表的内容(地址和数据),并通过 Avalon® -ST接口生成一个Memory Write。
您可以通过开启参数编辑器中的PCI Express/PCI Capabilities选项卡下的Enable MSI-X选项来使能MSI-X中断。如果您开启了Enable MSI-X选项,那么您应该在BAR指向的存储器空间中实现MSI-X表结构(作为Application Layer的一部分)。
MSI-X功能结构(MSI-X Capability Structure)包含关于MSI-X表和PBA结构的信息。例如,它包含指向MSI-X表和PBA结构基址的指针,以相对于功能的BAR中地址的偏移表示。MSI-X Capability Structure中的Message Control寄存器还包含MSI-X Enable比特、Function Mask比特和MSI-X表的大小。关于MSI-X Capability Structure的介绍,请参考MSI-X Capability Structure。
MSI-X中断是标准的Memory Write,因此要遵守Memory Write排序规则。
示例:
| MSI-X向量 | MSI-X高位地址 | MSI-X低位地址 | MSI-X数据 |
|---|---|---|---|
| 0 | 0x00000001 | 0xAAAA0000 | 0x00000001 |
| 1 | 0x00000001 | 0xBBBB0000 | 0x00000002 |
| 2 | 0x00000001 | 0xCCCC0000 | 0x00000003 |
| PBA表 | PBA入口 |
|---|---|
| Offset 0 | 0x0 |
如果应用程序需要生成一个MSI-X中断(向量1),那么它要读取MSI-X表信息,通过 Avalon® -ST接口生成MWR TLP,并以MSI生成类似的方式置位对应PBA比特(bit[1])。
生成的TLP将被发送到地址0x00000001_BBBB0000,数据为0x00000002。发送MSI-X之后,应用程序可以清除相关的PBA比特。