Open3
RustでMikanOSを実装する【Day07】
Day07AでMSIの割り込み処理の設定を行いますが、割り込みハンドラが反応せず...。
本家のほうも試しましたが、同様に反応しないため調査中
↑ 反応しました。
MsiMessageAddressの値が間違っており、修正したら割り込みハンドラは反応しましたが、デバイスの初期化以降に割り込みが発生しませんでした。
引き続き調査
まず割り込みハンドラが反応しない件に関しては、イベントリングのデキューポインタの更新時にIMANレジスタのInterrupt Pendingを1にセットすることで解決しました。
これによってデバイスの初期化処理までは正常に動作するようになりましたが、InterruptInエンドポイントに対応したTransfer Ringから、NomarlTRBを書き込んでも割り込みが発生しませんでした。(通常はこの処理後にEventRingにマウスイベント(TransferEvent)が来ます。)
データ取得には上記の方法のほかにデフォルトコントロールパイプを用いて取得する方法があるとのことなので、そちらで試したところ割り込みが発生するようになりました。