用于 PCIe* 解决方案的 Intel® Stratix® 10 Avalon® -ST和Single Root I/O Virtualization (SR-IOV)接口用户指南

ID 683111
日期 12/06/2017
Public
文档目录

7.1.3. 实现MSI-X中断

PCI Local Bus Specification的Section 6.8.2描述了MSI-X性能和表结构。MSI-X性能结构指向MSI-X Table结构和MSI-X Pending Bit Array (PBA)寄存器。BIOS设置起始地址偏移和与指向MSI-X Table和PBA寄存器的起始地址的指针相关联的BAR。
MSI-X中断组件
  1. 主机软件按照以下步骤设置Application Layer中的MSI-X中断:
    1. 主机软件读取0x050寄存器上的Message Control寄存器以确定MSI-X Table大小。表入口(table entry)的数量是<value read> + 1
      最大表格尺寸为2048个入口。每个16字节入口分为4个字段,如下图所示。对于多功能类型(variant),BAR4访问MSI-X表。对于所有其他类型(variant),任何BAR都可以访问MSI-X表。 MSI-X表的基地址必须与4 KB边界对齐。
    2. 主机设置MSI-X表。它为每个入口编程MSI-X地址,数据和掩码比特,如下图所示。
      图 58. MSI-X表的格式
    3. 主机使用下面公式计算<n th >入口的地址:
       
      				  nth_address = base address[BAR] + 16<n>
  2. 当Application Layer有一个中断,它会驱动一个中断请求到IRQ Source模块。
  3. IRQ Source设置MSI-X PBA表中的相应比特。
    PBA可以使用qword或者dword访问。对于qword访问,IRQ Source使用下面的公式计算<m th >比特的地址:
    qword address = <PBA base addr> + 8(floor(<m>/64))
    qword bit = <m> mod 64
    图 59. MSI-X PBA表
  4. IRQ Processor读取MSI-X表中的入口。
    1. 如果中断被MSI-X表的Vector_Control域屏蔽,那么中断保持在未决状态。
    2. 如果中断没有被屏蔽,那么IRQ Processor发送Memory Write Request到TX从接口。它使用MSI-X表中的地址和数据。如果 Message Upper Address = 0,那么IRQ Processor将创建一个three-dword header。如果 Message Upper Address > 0 ,那么它将创建一个4-dword header。
  5. 主机中断服务程序将TLP检测为中断并对其服务。