*参照元 [#fe11fc6b] #backlinks *説明 [#qa245f97] -パス: [[linux-2.6.33/drivers/uio/uio.c]] -FIXME: これは何? --説明 -UIO の割り込みハンドラ --割り込みの処理回数をカウントする。 --もしユーザ定義の割り込みハンドラが定義されていれば、呼び出す。 **引数 [#kdd542e1] -int irq --割り込み番号。 -void *dev_id --UIO のデバイス情報へのポインタを void * にキャストしたもの。 **返り値 [#idae6256] -irqreturn_t --割り込みハンドラの処理結果。 --通例では、割り込みを処理した場合は IRQ_HANDLED、 処理していない場合は IRQ_NONE を返す。 --[[linux-2.6.33/irqreturn_t]] **参考 [#uf0e4b8a] *実装 [#td61a201] /** * uio_interrupt - hardware interrupt handler * @irq: IRQ number, can be UIO_IRQ_CYCLIC for cyclic timer * @dev_id: Pointer to the devices uio_device structure */ static irqreturn_t uio_interrupt(int irq, void *dev_id) { struct uio_device *idev = (struct uio_device *)dev_id; irqreturn_t ret = idev->info->handler(irq, idev->info); -UIO のデバイス情報に変換し、ユーザ定義のハンドラを呼び出す。 --[[linux-2.6.33/uio_device]] --ハンドラの第二引数(idev->info)の型は struct uio_info 型である。 --[[linux-2.6.33/uio_info]] if (ret == IRQ_HANDLED) uio_event_notify(idev->info); -ユーザ定義ハンドラによって割り込みが処理されていれば、 read() で返す割り込み回数の値を更新する。 --[[linux-2.6.33/uio_event_notify()]] return ret; } *コメント [#sca3fa85]