10-Platform Interrupt Controller API

引流关键词: 中断、同步异常、异步异常、irq、fiq、BL1,BL2,BL3,BL31,BL32,BL33,AP_BL1,AP_BL2,AP_BL3,AP_BL31,AP_BL32,AP_BL33,SCP_BL1,SCP_BL2,BL0,BL30, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存管理、页表…

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈


[专栏目录]-ATF/FF-A/specification学习

请添加图片描述


10.平台中断控制器API

本文档列出了从通用代码中抽象出中断控制器的运行时配置和控制的可选平台中断控制器 API。移植指南中描述了强制性 API 。

10.1。函数:unsigned int plat_ic_get_running_priority(void); [可选的]

Argument : void
Return : unsigned int
此 API 应返回 PE 当前正在服务的中断的优先级。只有在已通过 确认中断后才能调用它plat_ic_acknowledge_interrupt。

在使用 GIC 的 Arm 标准平台的情况下,读取运行优先级寄存器 以确定中断的优先级。

10.2. 函数:int plat_ic_is_spi(unsigned int id); [可选的]

Argument : unsigned int
Return : int
API 应返回中断 ID(第一个参数)是否被归类为共享外设中断。共享外设中断通常与系统范围的外设相关联,这些中断可以针对系统中的任何 PE。

10.3. 函数:int plat_ic_is_ppi(unsigned int id); [可选的]

Argument : unsigned int
Return : int
API 应返回中断 ID(第一个参数)是否被归类为私有外设中断。专用外设中断通常与每个 PE 专用的外设相关联。来自私有外围设备的中断仅针对该 PE。

10.4. 函数:int plat_ic_is_sgi(unsigned int id); [可选的]

Argument : unsigned int
Return : int
API 应返回中断 ID(第一个参数)是否被归类为软件生成的中断。软件生成中断由软件显式编程引发,通常用于 PE 间通信。安全 SGI 保留供安全世界软件使用。

10.5。函数:unsigned int plat_ic_get_interrupt_active(unsigned int id); [可选的]

Argument : unsigned int
Return : int
此 API 应返回第一个参数指定的中断 ID的活动id状态, 。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现读取 GIC Set Active Register以读取并返回中断的活动状态。

10.6。函数:void plat_ic_enable_interrupt(unsigned int id); [可选的]

Argument : unsigned int
Return : void
此 API 应启用第一个参数指定的中断 ID, id。系统中的 PE 预计只接收启用的中断。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会插入屏障以使内存更新在启用中断之前可见,然后写入 GIC设置启用寄存器以启用中断。

10.7。函数:void plat_ic_disable_interrupt(unsigned int id); [可选的]

Argument : unsigned int
Return : void
此 API 应禁用第一个参数指定的中断 ID, id。系统中的 PE 不会收到禁用的中断。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会写入 GIC清除启用寄存器以禁用中断,并插入屏障以使内存更新之后可见。

10.8。功能: void plat_ic_set_interrupt_priority(unsigned int id, unsigned int priority); [可选的]

Argument : unsigned int
Argument : unsigned int
Return : void
此 API 应将第一个参数指定的中断优先级 id设置为第二个参数设置的值priority。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会写入 GIC优先级寄存器设置中断优先级。

10.9。功能:int plat_ic_has_interrupt_type(unsigned int type); [可选的]

Argument : unsigned int
Return : int
此 API 应返回平台是否支持给定的中断类型。参数type应为INTR_TYPE_EL3、INTR_TYPE_S_EL1或 之一INTR_TYPE_NS。

对于使用 GICv3 的 Arm 标准平台,API 的实现返回1所有中断类型。

对于使用 GICv2 的 Arm 标准平台,API 始终返回1. INTR_TYPE_NS其他类型的返回值取决于构建选项的值GICV2_G0_FOR_EL3:

对于中断类型INTR_TYPE_EL3:

何时返回,表示GICV2_G0_FOR_EL3不支持 EL3 中断。00

何时返回,GICV2_G0_FOR_EL3表示支持 EL3 中断。11

对于中断类型INTR_TYPE_S_EL1:

何时返回,GICV2_G0_FOR_EL3表示支持安全 EL1 中断。01

何时返回,表示GICV2_G0_FOR_EL3不支持安全 EL1 中断。10

10.10。函数:void plat_ic_set_interrupt_type(unsigned int id, unsigned int type); [可选的]

Argument : unsigned int
Argument : unsigned int
Return : void
此 API 应将第一个参数指定的中断设置为id第二个参数指定的类型type。参数可以是以下type之一:

INTR_TYPE_NS: 中断意味着被非安全世界消耗。

INTR_TYPE_S_EL1: 中断是由 Secure EL1 消耗的。

INTR_TYPE_EL3: 中断意味着被 EL3 消耗。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会写入 GIC组寄存器和组修改器寄存器(仅限 GICv3)以将中断分配给正确的组。

对于 GICv3:

INTR_TYPE_NS映射到第 1 组中断。

INTR_TYPE_S_EL1映射到安全组 1 中断。

INTR_TYPE_EL3映射到安全组 0 中断。

对于 GICv2:

INTR_TYPE_NS映射到第 1 组中断。

当构建选项GICV2_G0_FOR_EL3设置为0(默认)时, INTR_TYPE_S_EL1映射到组 0。否则,INTR_TYPE_EL3映射到组 0 中断。

10.11。函数:void plat_ic_raise_el3_sgi(int sgi_num, u_register_t target); [可选的]

Argument : int
Argument : u_register_t
Return : void
此 API 应引发 EL3 SGI。第一个参数sgi_num指定 SGI 的 ID。第二个参数 ,target必须是目标 PE 的 MPIDR。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会插入屏障以在提高 SGI 之前使内存更新可见,然后写入适当的SGI 寄存器以提高 EL3 SGI。

10.12。函数:void plat_ic_set_spi_routing(unsigned int id, unsigned int routing_mode, u_register_t mpidr); [可选的]

Argument : unsigned int
Argument : unsigned int
Argument : u_register_t
Return : void
此 API 应将第一个参数指定的共享外设中断 (SPI) 的路由模式设置为id第二个参数指定 的路由模式routing_mode。

参数可以是以下routing_mode之一:

INTR_ROUTING_MODE_ANY表示中断可以路由到系统中的任何 PE。在这种情况下,该mpidr参数被忽略。

INTR_ROUTING_MODE_PE表示中断被路由到其 MPIDR 值由参数指定的 PE mpidr。

对于使用 GIC 的 Arm 标准平台,API 的实现会写入 GIC目标寄存器(GICv2) 或路由寄存器(GICv3) 以设置路由。

10.13。函数:void plat_ic_set_interrupt_pending(unsigned int id); [可选的]

Argument : unsigned int
Return : void
此 API 应将第一个参数指定的中断设置id为 Pending。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会在设置中断挂起之前插入屏障以使内存更新可见,并写入 GIC设置挂起寄存器以设置中断挂起状态。

10.14。函数:void plat_ic_clear_interrupt_pending(unsigned int id); [可选的]

Argument : unsigned int
Return : void
此 API 应清除第一个参数指定的中断的Pendingid状态。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会写入 GIC清除挂起寄存器以清除中断挂起状态,并插入屏障以使之后的内存更新可见。

10.15。功能:unsigned int plat_ic_set_priority_mask(unsigned int id); [可选的]

Argument : unsigned int
Return : int
该 API 应该在中断控制器中设置优先级掩码(第一个参数),以便只有比所提供的优先级更高的中断可以发送给 PE。API 应该返回它正在覆盖的当前优先级值。

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会在更新掩码之前插入以对内存更新进行排序,然后写入 GIC 优先掩码寄存器,并确保内存更新在掩码更新可能触发之前可见。

10.16。函数:unsigned int plat_ic_get_interrupt_id(unsigned int raw); [可选的]

Argument : unsigned int
Return : unsigned int
此 API 应从通过确认中断(使用 读取)获得的原始值中提取并返回中断号 plat_ic_acknowledge_interrupt()。如果中断 ID 无效,此 API 应返回INTR_ID_UNAVAILABLE.

在使用 GIC 的 Arm 标准平台的情况下,API 的实现会从 GIC 的确认值中屏蔽掉中断 ID 字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值