|
最後の行のSet IRQ to
0というのが気になりますが、これは「TxOKビットは立ったが、その割り込みはマスクされていて割り込みは発生しない」という意味です。rtl8139.c内を
IntrStatusおよびrtl8139_update_irqで検索してみると、送信に関する割り込みはTxOKしか発生しないようになっています。
NetBSDのドライバにおいて、送信の割り込みを処理するのはre_txeof()であり、以下の条件のときに呼ばれます。
if (status
& (RTK_ISR_TIMEOUT_EXPIRED |
RTK_ISR_TX_ERR |
RTK_ISR_TX_DESC_UNAVAIL))
re_txeof(sc);
RTK_ISR_TX_DESC_UNAVAILという名前からすると、送信デスクリプタが空になった場合に割り込みを発生させてまとめて処理するようになっているかとも思われますが、チップのマニュアルを取得するにはNDAが必要となり、またqemuはこの割り込みを発生させないので、これ以上の追求は差し控えます。
気をとりなおして、RTK_ISR_TIMEOUT_EXPIREDを調べることにします。これはqemuではPCSTimeoutという名前であり、実装されてはいるものの、#ifdef
RTL8139_ONBOARD_TIMERで無効になっていて、rtl8139.cの冒頭のコメント内のchangelogにもdisableされていると記載されています。
また、このタイマはNetBSDのドライバでは以下の箇所で初期化されており、コメントからこれがTxOKの代わりに用いられていることがわかります。
|