鐵人賽
昨日介紹 APLIC 基本功能與 interrupt source 範圍,今日我們繼續囉~
在給定的 interrupt domain 中,該 domain 的每個 hart 都有唯一的 index,範圍為 0 到 2^14 - 1 (= 16,383)。
對於相同一組的 hart,兩個不同的 interrupt domain 使用完全不同的 index。但是,如果 APLIC 的 interrupt domain 可以通過 MSI 轉發 interrupt,那麼 APLIC 的所有 M level domain 都可共享 index mapping 到 harts。
APLIC 實現的每個 interrupt domain 都有自己獨立控制介面,該介面在機器的地址空間中進行 memory mapped,允許透過 PMP(physical memory protection,實體記憶體保護)和頁面的地址轉換, access 每個 domain。
在大多數方面,每個 domain 對 software 來說,都好像是一個 root domain,在結構中看不到它上一層的 domain。
interrupt domain 對於 APLIC 的每個 interrupt source 具有以下組件:
對於 APLIC 支持的每個 interrupt domain,都有一個專用的 memory mappped 控制區域用於管理該 domain 中的 interrupt 。
此控制區域的大小是 4 KB 的倍數,並與 4 KB 地址邊界對齊。最小的有效控制區域為 16 KB,下圖為前16 KB 所包含的暫存器。
從偏移量 0x4000 開始,interrupt domain 的控制區域可以選擇具有interrupt delivery control (IDC) 結構,IDC 結構只有在直接向 harts 傳遞 interrupt 時使用,而不是由 MSI 轉發時使用。
每個 IDC 結構為 32 字節,並具有以下定義的暫存器:
IDC 結構是連續打包的,每個結構 32 字節,因此從 interrupt domain 控制區域的開頭到其第二個 IDC 結構(hart index=1)的偏移量為 0x4020;第三個 IDC 結構(hart index=2)的偏移量為 0x4040 以此類推。
除了前16 KB中的暫存器和上面列出的用於 IDC 結構的暫存器外,interrupt domain 控制區域中的其他 byte 都被保留的,並且為 read only 0,
今日繼續介紹了 APLIC 的 interrupt domain,由於 memory mapped control region 內容較長,因此今天先行介紹一些,明天再介紹完畢,明日繼續加油!!
沒想到已經完成了快一半了,天氣也慢慢從熱轉涼了,時間過得真快呀( ˘▾˘)~