MSI Capability
Capability ID = 0x5
Message Control bit说明
0: msi enable
1-3: 支持的中断数量,0b000=支持一个中断 0b001=支持4个中断
4-6: 使能的中断数量
7: 1表示64位地址结构,0表示32位
8: 1表示支持中断mask
Message Address:存放MSI存储器写事务的目的地址,中断到来的时候,PCIE会向这个地址写message data数据
Message address格式如下:
地址格式 0xFEEx-xxxx,
destination id : 目标CPU id
3bit: 0表示直接发送到destination id 所代表的CPU,1表示开启中断转发,即中断重映射
RH: 0代表发送到所有目标CPU, 1代表从目标cpu列表中选一个发送
DM: 0代表物理CPU 1代表虚拟CPU
X86系统下,message address对应的LAPIC的地址,linux下面查看如下:
也就是说往0FEEXXXX写入数据,实际写入了LAPIC,就会触发CPU的中断。
Message Data:存放MSI报文使用的数据
Message Data Message Address 都是由BIOS配置
Message Data 格式
高32位未使用
0-7 是中断向量编号, 如果是MSI,则中断向量号连续,msi-x则不要求连续
8-10 表示处理器如何处理PCIE的中断请求
MSI-X
Table size 11bit, 最多2048个中断
Function Mask 位1, 则所有中断被屏蔽
Msi-x table offset : 0-2bit表示table在第几个bar, 3-31表示在bar上的偏移量
linux如下图:
MSI-X Table
QAT 2.0 的MSI-X Table
ffffc402`45e61cb4 00000000 00000000 00000000 fee027f0
ffffc402`45e61cc4 00000000 00000000 00000000 fee027d0
重映射表寄存器,存放重映射表地址
Interrupt Remapping Table Address Register
IRTA
dmar_writeq(iommu->reg + DMAR_IRTA_REG,
(addr) | IR_X2APIC_MODE(mode) | INTR_REMAP_TABLE_REG_SIZE);
中断重映射address 和 data个字段的意义