10-Platform Interrupt Controller API
引流關(guān)鍵詞: 中斷、同步異常、異步異常、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、安全、內(nèi)存管理、頁(yè)表…
快速鏈接:
.
👉👉👉 個(gè)人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
[專(zhuān)欄目錄](méi)-ATF/FF-A/specification學(xué)習(xí)
10.平臺(tái)中斷控制器API?
本文檔列出了從通用代碼中抽象出中斷控制器的運(yùn)行時(shí)配置和控制的可選平臺(tái)中斷控制器 API。移植指南中描述了強(qiáng)制性 API 。
10.1。函數(shù):unsigned int plat_ic_get_running_priority(void); [可選的]?
Argument : void
Return : unsigned int
此 API 應(yīng)返回 PE 當(dāng)前正在服務(wù)的中斷的優(yōu)先級(jí)。只有在已通過(guò) 確認(rèn)中斷后才能調(diào)用它plat_ic_acknowledge_interrupt。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,讀取運(yùn)行優(yōu)先級(jí)寄存器 以確定中斷的優(yōu)先級(jí)。
10.2. 函數(shù):int plat_ic_is_spi(unsigned int id); [可選的]?
Argument : unsigned int
Return : int
API 應(yīng)返回中斷 ID(第一個(gè)參數(shù))是否被歸類(lèi)為共享外設(shè)中斷。共享外設(shè)中斷通常與系統(tǒng)范圍的外設(shè)相關(guān)聯(lián),這些中斷可以針對(duì)系統(tǒng)中的任何 PE。
10.3. 函數(shù):int plat_ic_is_ppi(unsigned int id); [可選的]?
Argument : unsigned int
Return : int
API 應(yīng)返回中斷 ID(第一個(gè)參數(shù))是否被歸類(lèi)為私有外設(shè)中斷。專(zhuān)用外設(shè)中斷通常與每個(gè) PE 專(zhuān)用的外設(shè)相關(guān)聯(lián)。來(lái)自私有外圍設(shè)備的中斷僅針對(duì)該 PE。
10.4. 函數(shù):int plat_ic_is_sgi(unsigned int id); [可選的]?
Argument : unsigned int
Return : int
API 應(yīng)返回中斷 ID(第一個(gè)參數(shù))是否被歸類(lèi)為軟件生成的中斷。軟件生成中斷由軟件顯式編程引發(fā),通常用于 PE 間通信。安全 SGI 保留供安全世界軟件使用。
10.5。函數(shù):unsigned int plat_ic_get_interrupt_active(unsigned int id); [可選的]?
Argument : unsigned int
Return : int
此 API 應(yīng)返回第一個(gè)參數(shù)指定的中斷 ID的活動(dòng)id狀態(tài), 。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)讀取 GIC Set Active Register以讀取并返回中斷的活動(dòng)狀態(tài)。
10.6。函數(shù):void plat_ic_enable_interrupt(unsigned int id); [可選的]?
Argument : unsigned int
Return : void
此 API 應(yīng)啟用第一個(gè)參數(shù)指定的中斷 ID, id。系統(tǒng)中的 PE 預(yù)計(jì)只接收啟用的中斷。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)插入屏障以使內(nèi)存更新在啟用中斷之前可見(jiàn),然后寫(xiě)入 GIC設(shè)置啟用寄存器以啟用中斷。
10.7。函數(shù):void plat_ic_disable_interrupt(unsigned int id); [可選的]?
Argument : unsigned int
Return : void
此 API 應(yīng)禁用第一個(gè)參數(shù)指定的中斷 ID, id。系統(tǒng)中的 PE 不會(huì)收到禁用的中斷。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)寫(xiě)入 GIC清除啟用寄存器以禁用中斷,并插入屏障以使內(nèi)存更新之后可見(jiàn)。
10.8。功能: void plat_ic_set_interrupt_priority(unsigned int id, unsigned int priority); [可選的]?
Argument : unsigned int
Argument : unsigned int
Return : void
此 API 應(yīng)將第一個(gè)參數(shù)指定的中斷優(yōu)先級(jí) id設(shè)置為第二個(gè)參數(shù)設(shè)置的值priority。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)寫(xiě)入 GIC優(yōu)先級(jí)寄存器設(shè)置中斷優(yōu)先級(jí)。
10.9。功能:int plat_ic_has_interrupt_type(unsigned int type); [可選的]?
Argument : unsigned int
Return : int
此 API 應(yīng)返回平臺(tái)是否支持給定的中斷類(lèi)型。參數(shù)type應(yīng)為INTR_TYPE_EL3、INTR_TYPE_S_EL1或 之一INTR_TYPE_NS。
對(duì)于使用 GICv3 的 Arm 標(biāo)準(zhǔn)平臺(tái),API 的實(shí)現(xiàn)返回1所有中斷類(lèi)型。
對(duì)于使用 GICv2 的 Arm 標(biāo)準(zhǔn)平臺(tái),API 始終返回1. INTR_TYPE_NS其他類(lèi)型的返回值取決于構(gòu)建選項(xiàng)的值GICV2_G0_FOR_EL3:
對(duì)于中斷類(lèi)型INTR_TYPE_EL3:
何時(shí)返回,表示GICV2_G0_FOR_EL3不支持 EL3 中斷。00
何時(shí)返回,GICV2_G0_FOR_EL3表示支持 EL3 中斷。11
對(duì)于中斷類(lèi)型INTR_TYPE_S_EL1:
何時(shí)返回,GICV2_G0_FOR_EL3表示支持安全 EL1 中斷。01
何時(shí)返回,表示GICV2_G0_FOR_EL3不支持安全 EL1 中斷。10
10.10。函數(shù):void plat_ic_set_interrupt_type(unsigned int id, unsigned int type); [可選的]?
Argument : unsigned int
Argument : unsigned int
Return : void
此 API 應(yīng)將第一個(gè)參數(shù)指定的中斷設(shè)置為id第二個(gè)參數(shù)指定的類(lèi)型type。參數(shù)可以是以下type之一:
INTR_TYPE_NS: 中斷意味著被非安全世界消耗。
INTR_TYPE_S_EL1: 中斷是由 Secure EL1 消耗的。
INTR_TYPE_EL3: 中斷意味著被 EL3 消耗。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)寫(xiě)入 GIC組寄存器和組修改器寄存器(僅限 GICv3)以將中斷分配給正確的組。
對(duì)于 GICv3:
INTR_TYPE_NS映射到第 1 組中斷。
INTR_TYPE_S_EL1映射到安全組 1 中斷。
INTR_TYPE_EL3映射到安全組 0 中斷。
對(duì)于 GICv2:
INTR_TYPE_NS映射到第 1 組中斷。
當(dāng)構(gòu)建選項(xiàng)GICV2_G0_FOR_EL3設(shè)置為0(默認(rèn))時(shí), INTR_TYPE_S_EL1映射到組 0。否則,INTR_TYPE_EL3映射到組 0 中斷。
10.11。函數(shù):void plat_ic_raise_el3_sgi(int sgi_num, u_register_t target); [可選的]?
Argument : int
Argument : u_register_t
Return : void
此 API 應(yīng)引發(fā) EL3 SGI。第一個(gè)參數(shù)sgi_num指定 SGI 的 ID。第二個(gè)參數(shù) ,target必須是目標(biāo) PE 的 MPIDR。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)插入屏障以在提高 SGI 之前使內(nèi)存更新可見(jiàn),然后寫(xiě)入適當(dāng)?shù)腟GI 寄存器以提高 EL3 SGI。
10.12。函數(shù):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 應(yīng)將第一個(gè)參數(shù)指定的共享外設(shè)中斷 (SPI) 的路由模式設(shè)置為id第二個(gè)參數(shù)指定 的路由模式routing_mode。
參數(shù)可以是以下routing_mode之一:
INTR_ROUTING_MODE_ANY表示中斷可以路由到系統(tǒng)中的任何 PE。在這種情況下,該mpidr參數(shù)被忽略。
INTR_ROUTING_MODE_PE表示中斷被路由到其 MPIDR 值由參數(shù)指定的 PE mpidr。
對(duì)于使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái),API 的實(shí)現(xiàn)會(huì)寫(xiě)入 GIC目標(biāo)寄存器(GICv2) 或路由寄存器(GICv3) 以設(shè)置路由。
10.13。函數(shù):void plat_ic_set_interrupt_pending(unsigned int id); [可選的]?
Argument : unsigned int
Return : void
此 API 應(yīng)將第一個(gè)參數(shù)指定的中斷設(shè)置id為 Pending。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)在設(shè)置中斷掛起之前插入屏障以使內(nèi)存更新可見(jiàn),并寫(xiě)入 GIC設(shè)置掛起寄存器以設(shè)置中斷掛起狀態(tài)。
10.14。函數(shù):void plat_ic_clear_interrupt_pending(unsigned int id); [可選的]?
Argument : unsigned int
Return : void
此 API 應(yīng)清除第一個(gè)參數(shù)指定的中斷的Pendingid狀態(tài)。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)寫(xiě)入 GIC清除掛起寄存器以清除中斷掛起狀態(tài),并插入屏障以使之后的內(nèi)存更新可見(jiàn)。
10.15。功能:unsigned int plat_ic_set_priority_mask(unsigned int id); [可選的]?
Argument : unsigned int
Return : int
該 API 應(yīng)該在中斷控制器中設(shè)置優(yōu)先級(jí)掩碼(第一個(gè)參數(shù)),以便只有比所提供的優(yōu)先級(jí)更高的中斷可以發(fā)送給 PE。API 應(yīng)該返回它正在覆蓋的當(dāng)前優(yōu)先級(jí)值。
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)在更新掩碼之前插入以對(duì)內(nèi)存更新進(jìn)行排序,然后寫(xiě)入 GIC 優(yōu)先掩碼寄存器,并確保內(nèi)存更新在掩碼更新可能觸發(fā)之前可見(jiàn)。
10.16。函數(shù):unsigned int plat_ic_get_interrupt_id(unsigned int raw); [可選的]?
Argument : unsigned int
Return : unsigned int
此 API 應(yīng)從通過(guò)確認(rèn)中斷(使用 讀取)獲得的原始值中提取并返回中斷號(hào) plat_ic_acknowledge_interrupt()。如果中斷 ID 無(wú)效,此 API 應(yīng)返回INTR_ID_UNAVAILABLE.
在使用 GIC 的 Arm 標(biāo)準(zhǔn)平臺(tái)的情況下,API 的實(shí)現(xiàn)會(huì)從 GIC 的確認(rèn)值中屏蔽掉中斷 ID 字段。
總結(jié)
以上是生活随笔為你收集整理的10-Platform Interrupt Controller API的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 09-Maximum Power Mit
- 下一篇: 17-Translation (XLAT