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 字段。
總結
以上是生活随笔為你收集整理的10-Platform Interrupt Controller API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 09-Maximum Power Mit
- 下一篇: 17-Translation (XLAT