根据《GICv3寄存器接口》的介绍,我们知道SPI/SGI/PPI 通过Distributor 找到Redistributor 然后确定CPU interface。而LPI是基于MSI的,基于MSI的中断可以通过ITS服务来之间确定Redistributor,无需Distributor 。本文介绍ITS服务
ITS转发LPI到Redistributor

根据这个图我们可以知道ITS服务的流程如下
- 外设通过写GITS_TRANSLATER产生一个ITS中断消息
- GITS_TRANSLATER里面包含Device ID和Event ID信息
- Device ID标识了设备,Event ID标识了哪个中断
- 通过DeviceID可以从Device Table中选择合适的ITT(Interrupt Translation Table)
- 通过EventID可以从ITT中查询到INTID和CollectionID
- 通过CollectionID可以从Collection Table找到中断路由信息
- 根据信息之间转发到目标Redistributor
到这里,我们就知道了ITS服务的工作流程了。我们发现,ITS需要查询五张表,分别如下
- LPI中断配置表
- 标识LPI中断挂起状态的Pending表
- 查询设备ID的Device Table
- 查询INTID和CollectionID的Interrupt Translation Table
- 可以获得路由信息的Collection Table
总结
至此,我们就了解了GICv3的ITS服务。