スポンサーリンク

BUS_SETUP_INTR(9) FreeBSD カーネル開発者マニュアル BUS_SETUP_INTR(9)

名称

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

書式

#include <sys/param.h>
#include <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)

作者

このマニュアルページは、 Doug Rabson ⟨dfr@FreeBSD.org⟩ によって書かれた、 BUS_CREATE_INTR() および BUS_CONNECT_INTR() のマニュアルページを基に、 Jeroen Ruigrok van der Werven ⟨asmodai@FreeBSD.org⟩ によって書かれまし た。

FreeBSD 10.0 January 6, 2005 FreeBSD 10.0

スポンサーリンク