hwint_master - mathfur/minix GitHub Wiki
呼出元
概要
- kernel/mpx386.sにて定義
- 流れ
- intr_handle(irq_handlers[irq])を呼ぶ
- irq_actids[irq]が非0のとき
- INT_CTLMASK(0x21ポート)の値に[1<<irq]の値をORする
- INT_CTL(0x20ポート)に再割り込み可能マジックナンバーを書き込む
- 他のプロセスを再開する
引数
irq ほか以下も使う
- irq_handlers[irq] // ハンドラの配列
- irq_actids[irq]
実装
#define hwint_master(irq)
call save
push (_irq_handlers+4*irq) // irq_handlers[irq]のアドレスを保存しておく
call _intr_handle // void intr_handle(hook)関数を呼ぶ
pop ecx // ecxにirq_handlers[irq]のアドレスが入る
cmp (_irq_actids+4*irq), 0 // irq_actids[irq]と0を比較する
jz 0f // 一致していれば0fに飛ぶ
inb INT_CTLMASK // 0x21ポートからALに読み込む?
orb al, [1<<irq] // マスクirq?
outb INT_CTLMASK // 0x21ポートに書き戻す?
0: movb al, END_OF_INT // 割り込みコントローラ用マジックナンバー,再割り込み可能という意味
outb INT_CTL // 0x20ポートにマジックナンバーを書き込む
ret // 他のプロセスを再開する