使用MSI-X机制可以很好地解决该问题,在MSI-X Capability结构中,每一个中断向量使用独立的Meaasge Address和Message Data字段,从而中断控制器可以更加合理的为PCIe设备分配中断资源。 与MSI Capability寄存器相比,MSI-X Capability寄存器使用一个结构体来专门存放“Message Address”字段和“Message Data”字段,而不是将这...
所谓Message Signaled Interrupts (MSI) ,就是PCIe设备(一个PCIe Function)通过写一个特定的值到一个系统特定的地址(就是一个DWORD MemWr TLP,往MSI_Addr写入MSI_Data),来获得系统软件的服务(service)。用人话说,就是PCIe设备用往系统内存的某个特定地址写一个特定的值的形式,上报“中断”给系统软件,软件在收到...
#include<linux/pci.h>/* MSI-X registers (in MSI-X capability) */#define PCI_MSIX_FLAGS 2/* Message Control */#define PCI_MSIX_FLAGS_QSIZE 0x07FF/* Table size */structpci_dev*pdev=pci_dev;u16msix_config;intnum_vectors;// pdev 为 PCIE 设备,pdev->msix_cap为设备配置空间中MSIX Ca...
比如,PowerPC处理器MSI/MSI-X Capability结构中的Message Address是MPIC中断控制器的MSIIR寄存器地址,Message Data里面的值是写入MSIIR寄存器的值;那么MSI/MSI-X中断请求报文就是将Message Data里面的值写入MSIIR寄存器,从而向MPIC中断控制器提交中断,然后,由MPIC中断控制器将中断转发给处理器,然后处理器通过中断响应...
MSI和MSI-X的规格对比: 总之,PCIe设备在提交MSI中断请求时,都是向MSI/MSI-X Capability结构中的Message Address的地址写Message Data数据,从而组成一个存储器写TLP,向处理器提交中断请求。 在arm64中,MSI/MSI-X对应的是LPI中断, 在之前的文章【ARM GICv3 ITS介绍及代码分析】有介绍过,外设通过写GITS_TRANSLATER...
不同的处理器对PCIe设备发出的MSI报文的解释并不相同。但是PCIe设备在提交MSI中断请求时,都是向MSI/MSI-X Capability结构中的Message Address的地址写Message Data数据,从而组成一个存储器写TLP,向处理器提交中断请求。 有些PCIe设备还可以支持Legacy中断方式[1]。但是PCIe总线并不鼓励其设备使用Legacy中断方式,在绝大...
区别于使用INTx引脚提交的中断请求,MSI和MSI-X中断机制使用存储器写请求的TLP向处理器提交中断请求,也就是说这种中断的方法是嵌在TLP报文中的。不同的处理器对PCIe设备发出的MSI报文的解释并不相同。但是PCIe设备在提交MSI中断请求时,都是向MSI/MSI-X Capability结构中的Message Address的地址写Message Data数据,从而...
1、MSI:消息中断 2、INTx:引脚中断 真正的PCIe设备:必须使用MSI发送中断,可选择性地支持INTx消息。 PCI设备:必须支持INTx消息 PCIE的理论带宽 Gen2单向链路速率5Gbps 1、 使用8B/10B编码,产生20%的数据开销 2、 理论带宽=链路速率 80% 通道数 3、 对于单通道: ...
PCI 2.3提出了MSI(Message Signaled Interrupt),但是早期的PCI并不支持这一功能,PCIe为此定义了一种Virtual Wire来模拟PCI的中断引脚(INTA-INTD)。如下图所示: INTx Message的使用规则如下: · They have no data payload and so the Length field is reserved. ...
Message Address Register:32-bit最低两位固定为0,使得该地址是DW对齐的。 当Mask Bits将相关的中断向量(Interrupt Vector)屏蔽后,该MSI将不会被发送。软件可以通过这种方式来使能或者禁止某些MSI的发送。如果相关中断向量没有被屏蔽,则如果发生了相关中断请求,这时Pending Bits中的相应bit则会被置位。一旦中断信息被...