一、中断管理框架中的假设
该框架作出以下假设以简化其实现。
- 1、尽管该框架支持2种类型的安全中断(EL3和secure-EL1中断),但只有Arm GICv3这样的中断控制器架构支持0组中断形式的EL3中断。在Arm GICv2中,假设所有安全中断都在secure-EL1中处理。它们可以通过EL3传送到Secure-EL1,但不能在EL3中处理。
- 2、中断异常(PSTATE.I和F位)在EL3中执行期间被屏蔽。
- 3、中断管理:以下部分描述中断处理框架如何管理中断。这需要:
- 1、提供一个接口,允许注册一个处理程序,并指定一种中断类型的路由模型。
- 2、实现支持在生成中断时将中断类型的控制交给其注册的处理程序。
中断管理的两个方面都涉及从EL3到secure-EL1的安全软件堆栈中的各种组件。软件组件一节介绍了这些组件。框架在以下数据结构中存储与每种类型的中断相关的信息。
typedef struct intr_type_desc {
interrupt_type_handler_t handler;
uint32_t flags;
uint32_t scr_el3[2];
} intr_type_desc_t;
标志字段以位[1:0]存储中断类型的路由模型。当执行处于安全状态时,位[0]存储路由模型。当执行处于非安全状态时,位[1]存储路由模型。如节路由模型中所述,值0表示中断应以FEL为目标。值1表示它应该针对EL3。剩余的位被保留和SBZ。助手宏set_interrupt_rm_flag()应用于设置flags参数中的位。
scr_el3[2]字段还存储路由模型,但作为标志字段中的模型到每个安全状态的sc