鐵人賽
昨日已經先簡單介紹 IMSIC 、 interrupt ID,以及 interrupt file,進天繼續介紹吧。
在單個 interrupt file 當中,interrupt 的優先順序是由 interrupt ID 決定的,號碼越低表示優先順序越高。
當 IMSIC 重置時,其所有 interrupt file 的狀態將變為有效且一致,但除了 machien level 和 supervisor level 的 interrupt file 中可能指定了eidelivery,其餘狀態將未指定。
IMSIC 中的每個 interrupt file 有一個或兩個用來接收 MSI 的暫存器(32 bit 暫存器),這些暫存器位在 physical address 空間對齊4KB,也就是每個 interrupt file 即一頁(page)
interrupt file 的 meomry region:
interrupt file 的 memory region 當中,除了已定義的部分,其他 byte 皆被保留,並且須為 read only 0。
interrupt file 的 memory region,對於已定義的部分,則只接受對其 32bit 的 read 和 write。若對 read only 的 byte 進行寫入,則直接忽略。
支援 little-edian 系統,假設 i 是 interrupt ID,則以 little-endian 的順序寫入到 setitpnum_le
,使 interrupt i pending bit 為1,反之若不是以 little-endian 方式的 interrupt ID,則忽略對 setipnum_le
的寫入。
而對於支援 big-endian 系統,如果 i 是 interrupt ID,則以 big-endian 的順序將i寫入到 setipnum_be
,interrupt i pending bit 為1,反之若不是以 big-endian 方式的 interrupt ID,則忽略對 setipnum_be
的寫入。
今天介紹 interrupt priority 以及 interrupt file 的 memory region,明天我們繼續,今天行程滿檔,每天要記得 po 文一個不注意,真的會忘了要 po 文章。