PCI割り込みまとめ
下で紹介した本とosdev-j調査によるまとめ。
PCIは基本的にレベルトリガ。
割り込み共有を行うためにレベルトリガになっている。
レベルトリガの場合、割り込みコントローラは、割り込み信号がアサート状態である限りいつでも割り込み要求が発生していると認識する。
OSはIRQ共有の仕組みを以下のように行う。
PCIの割り込みディアサートはいつでも非同期に行えるらしい。
PIC自身が持っているエッジ・レベル選択は今のPCでは意味がない(by neriさん)
PICの設定でかえると、全ポートの設定が変わるからまずい(PCI/ISA共有できない)
だからチップセットでIRQ毎にエッジとレベルを選択できるように今は拡張されている。
PICそのものにあるエッジ・レベルの設定はエッジ固定でいきましょう。
知りたかった事
割り込み状態の解除を行うには「各デバイス固有に方法が存在するのでそれを使う」 or 「共通インターフェースをたたけばよい」のどちらなのか?。
もし前者であれば
各デバイスドライバは固有の方法を export し、割り込み時にカーネルはそれを callしてやらなければいけない。
後者であれば、割り込み時にカーネルがデバイスの種類にかかわらず共通インターフェースをたたいて割り込み状態を解除してメッセージでそれをドライバに通知、その後にドライバが割り込みの要因となった処理ををゆっくり行えばよい
この2つでかなりカーネルの設計が変わるんです、今は後者を目指しているのですがアーキテクチャ的にそれが無理ならば仕組みを考えないとなぁ。