tail head cat sleep
QR code linking to this page

manページ  — BUS_SETUP_INTR

名称

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> によって書かれました。

BUS_SETUP_INTR (9) January 6, 2005

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

How's my programming? Call 1-800-DEV-NULL