鐵人賽
今日我們繼續介紹 IMSIC 今天會是 IMSIC 系列的最後一天~加油!!
mtopei
直接與 machine level 的 interrupt file 互動,如果實現 supervisor mode, stopei
也能直接與 supervisor level 的 interrupt file 互動,同樣的如果實現了 hypervisor extension, vstopei
與選定的 guset interrupt file 互動。
*topei
CSR 的值表示在 interrupt file 當下最高的優先權的 interrupt (越低的 interrupt ID 表示越高的優先權)。
如果 interrupt 在 interrupt file 的 eip array 中沒有 pending 的 interrupt,或是在 eie array 中 沒有 enable 的 interrupt ,或是 interrupt 的優先度小於 eithreshold
,則讀取 *topei
CSR 返回 0,否則,讀取 *topei
會返回以下:
*topei
的 interrupt ID 是 hart external interrupt 的次要 ID
寫入 *topei
將清除 interrupt file 中相對應的 interrutp 的 pending bit
IMSIC 的 interrupt file 向 hart 提供 external interrupt signal,每個 interrupt file 提供一個 interrupt signal。來自 machine level interrupt file 的 interrupt signal 表示, mip
舉起 bit MEIP
;來自 supervisor level interrupt file 的 interrupt signal 在 mip
以及 sip
舉起 bit SEIP
;同樣的,來自 guest interrupt file 的 interrupt signal 在 hgeip
pending bit 被舉起。
當 interrupt file 的 eidelivery
為 0 時,interrupt delivery 是關閉的,interrupt signal 將無效。而當 interrupt file 的 eidelivery 為 1 時,interrupt pending 以及 enable bit 被舉起時,且優先度大於 eithreshold
,interrupt signal 才有效。
通過 IMSIC 的 external interrupt trap handler流程大致如下:
mtopei
或是 stopei
,同時 claim interrupt原文圖片附在下方
今日介紹有哪些 CSR 可以直接影響 interrupt file,並且介紹 interrupt 的處理,我的理解也就是一個 exteranl interrupt 的過程,是必要經過以下行為,首先 pending 以及 enable bit 要被舉起且優先度要大於 theshold,接著送給 hart 若 hart 接受,則會 claim 該 interrupt 並且把 pending bit 放下,接著去處理 ISR (interrutp service routine 也可以說是 interrupt handler),處理完之後再通知 hart 發 complete 以表示順利執行完成,接著恢復 prcoessor 暫存器,最後從 trap 離開。
明日我們將進入 APLIC 的系列,與 PLIC 有何不同呢?又與 IMSIC 有何不同呢?就明天見吧,掰撲!!