hwint_master - mathfur/minix GitHub Wiki

呼出元

_hwint01

概要

  • 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                            // 他のプロセスを再開する

コメント