LPI是一种比较特殊的中断,它采用软件解析的模式,将收到的访问信息进行解析,通过查询ITS Table(包括设备表,中断翻译表,集合表)解析出对应的LPI中断号和路由信息,进而将中断发送给对应的Redistributor。Redistributor再通过查LPI Configuration Table(中断配置表),确定该LPI是否使能,优先级等信息。
本文重点描述配置各Table的过程
1、LPI Table
Redistributor对LPI的配置信息放在内存的表里,称为LPI Configuration Table,并且同一chip上的所有的Redistributor会共享同一组LPI中断配置表。LPI Pending Table每Redistributor一份,如下图所示。
①LPI Configuration Table
-
LPI配置表存放在内存中,GICR_PROPBASER指定了一个4KB对齐的基地址,即为存放LPI配置表的初始地址base_addr
-
LPI配置表包含了每个LPI的配置信息(优先级和使能情况),每个LPI占用8bit
-
对于任何LPI(N),存放的地址为base_addr+(N-8192),
②LPI Pending Table
- 每个Redistributor有单独的LPI Pending Table,GICR_PENDBASER用于记录LPI Pending Table的基地址base_addr
- 用于记录LPI中断是否处于pending状态
- 对于任何LPI(N),存放位置:
byte:base_addr+N/8 bit:N mod 8
2、its Table
①Device Table
- 由Device Table entry(DTE)组成,DTE描述DevicedID与ITT base address的映射关系
- DTE的组成如图所示:
实际中每个DTE为 8 Bytes
② Interrupt Translation Table
- 由 Interrupt Translation entry(ITE)组成,ITE描述了DeviceID/EventID与pINTID及ICID的对应关系
- ITE的组成如图所示:
实际每个ITE为 4 Bytes
在ITE中,所有ITE都是从EventID=0开始,可以不用配置全部的ITE
③Collection Table
- 由Collection Table entry(CTE)组成,CTE描述了ICID与路由目标之间的关系
- CTE的组成如下图所示:
每个CTE占据 2 Bytes,在内存中排布如下