BUS_SETUP_INTR(9)

名称
BUS_SETUP_INTR, bus_setup_intr, BUS_TEARDOWN_INTR, bus_teardown_intr - 割り込みハンドラの作成と接続および破壊

書式
<sys/param.h> <sys/bus.h> int BUS_SETUP_INTR(device_t dev, device_t child, struct resource *irq, int flags, driver_intr_t *intr, void *arg, void **cookiep) int bus_setup_intr(device_t dev, struct resource *r, int flags, driver_intr_t handler, void *arg, void **cookiep) int BUS_TEARDOWN_INTR(device_t dev, device_t child, struct resource *irq, void *cookiep) int bus_teardown_intr(device_t dev, struct resource *r, void *cookiep)

解説
メソッド BUS_SETUP_INTR は、資源マネージャの BUS_ALLOC_RESOURCE(9) メソッドによって以前に割り当てられた割り込みに対し、 割り込みハンドラを生成してアタッチします。 flags は <sys/bus.h> で見つかり、割り込みの大まかな種類を与えます。 また、 flags はデバイスドライバの特性についての信頼できる情報を、割り込みハンドラに伝えます。 INTR_FAST はそのハンドラが時間にクリティカルな関数のための ハンドラであることを意味します。 これらのハンドラのスピードアップのために特別な注意がはらわれます。 これの利用は INTR_EXCL を暗に含みます。 INTR_EXCL はそのハンドラをこの割り込みのための排他的なハンドラとして記録します。 INTR_MPSAFE はその割り込みハンドラはプリエンプティブな環境で適切に 振舞う (``SMP セーフ'') こと、および ``ジャイアントロック'' mutex によって 保護される必要がないことを、スケジューラに通知します。 INTR_ENTROPY はその割り込みがエントロピの良い供給源であるとして記録します。 これは、エントロピデバイス /dev/random によって使用されることができます。 ハンドラ intr は唯一の引数 arg の値を伴なって呼び出されます。

cookiep 引数は、 割り込みの確立が成功した場合に、 BUS_SETUP_INTR が書込む親のバスが使用するクッキーである void * 型へのポインタです。 ドライバ作成者は、このクッキーが 0 ではないことを仮定することが出来ます。 nexus ドライバは失敗時に cookiep に 0 を書込みます。

割り込みハンドラは、 BUS_TEARDOWN_INTR() によってデタッチされます。 正しい割り込みハンドラを破棄するために、クッキーが BUS_TEARDOWN_INTR() に渡される必要があります。 一度 BUS_TEARDOWN_INTR() が戻ると、その割り込み関数は有効ではなくなり二度と呼び出されないことが 保証されます。

これらの関数への呼び出しに交差して mutex が保持されていることは認められません。

戻り値
成功時には 0 が返され、それ以外の場合は適切なエラーが返されます。

関連項目
random(4), device(9), driver(9)

作者
-nosplit このマニュアルページは、 Doug Rabson <dfr@FreeBSD.org> が書いた BUS_CREATE_INTR および BUS_CONNECT_INTR のマニュアルページを基に、 Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org> が書きました。