atf官方文档翻译(十八):中断管理框架( interrupt management framework)-中断管理框架中的假设&软件组件-爱代码爱编程
一、中断管理框架中的假设
该框架作出以下假设以简化其实现。
- 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]字段还存储路由模型,但作为标志字段中的模型到每个安全状态的scr_el3中的对应位的映射。
该框架还依赖于平台端口来配置中断控制器以区分安全中断和非安全中断。平台应了解系统中存在的安全设备及其相关中断号。它应该配置中断控制器以启用安全中断,确保它们的优先级始终高于非安全中断,并将它们定向到主CPU。它还应该导出Porting Guide中描述的接口,以便能够处理中断。
在本文档的其余部分中,为了简单起见,考虑了Arm-GICv2系统,并假设FIQ信号用于生成Secure-EL1中断,而IRQ信号用于在任一安全状态下生成非安全中断。不考虑EL3中断。
二、软件组件
中断管理的角色和责任分为以下在EL3和Secure-EL1中运行的软件组件。下面简要介绍了每个组件。
- 1、EL3运行时固件。此组件对TF-A的所有端口都是通用的。
- 2、安全有效载荷调度器(SPD)服务。该服务与安全有效负载(SP)软件接口,该软件在Secure-EL1/Secure-EL0中运行,负责在安全和非安全状态之间切换执行。开关由安全监视器调用触发,它使用上下文管理库导出的API来实现此功能。在两种安全状态之间切换执行也是中断管理的要求。这导致对SPD服务的严重依赖。TF-A实现了一个示例测试安全有效负载调度器(TSPD)服务。
SPD服务插入EL3运行时固件,可能对TF-A的某些端口通用。
- 3、安全有效载荷(SP)。在生产系统上,安全有效负载对应于在Secure-EL1/Secure-EL0中运行的安全操作系统。它与SPD服务接口,以管理与非安全软件的通信。TF-A实现了一个名为测试安全有效负载(TSP)的示例安全有效负载,它仅在secure-EL1中运行。
安全有效负载实现对于TF-A的某些端口来说可能是通用的,就像SPD服务一样。
原文链接:https://trustedfirmware-a.readthedocs.io/en/latest/design/interrupt-framework-design.html#concepts