.\" Copyright (c) 2000 Jeroen Ruigrok van der Werven .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/share/man/man9/BUS_SETUP_INTR.9,v 1.17.2.1 2005/01/10 23:06:34 keramida Exp % .\" .\" $FreeBSD$ .Dd January 6, 2005 .Dt BUS_SETUP_INTR 9 .Os .Sh 名称 .Nm BUS_SETUP_INTR , .Nm bus_setup_intr , .Nm BUS_TEARDOWN_INTR , .Nm bus_teardown_intr .Nd 割り込みハンドラの作成と接続および破壊 .Sh 書式 .In sys/param.h .In sys/bus.h .Ft int .Fn BUS_SETUP_INTR "device_t dev" "device_t child" "struct resource *irq" "int flags" "driver_intr_t *intr" "void *arg" "void **cookiep" .Ft int .Fn bus_setup_intr "device_t dev" "struct resource *r" "int flags" "driver_intr_t handler" "void *arg" "void **cookiep" .Ft int .Fn BUS_TEARDOWN_INTR "device_t dev" "device_t child" "struct resource *irq" "void *cookiep" .Ft int .Fn bus_teardown_intr "device_t dev" "struct resource *r" "void *cookiep" .Sh 解説 .Fn BUS_SETUP_INTR メソッドは、資源マネージャの .Xr BUS_ALLOC_RESOURCE 9 メソッドによって以前に割り当てられた割り込みに対し、 割り込みハンドラを生成してアタッチします。 .Fa flags は .In sys/bus.h で見つかり、割り込みの大まかな種類を与えます。 また、 .Fa flags はデバイスドライバの特性についての信頼できる情報を、割り込みハンドラに伝えます。 .Dv INTR_FAST はそのハンドラが時間にクリティカルな関数のための ハンドラであることを意味します。 これらのハンドラのスピードアップのために特別な注意がはらわれます。 これの利用は .Dv INTR_EXCL を暗に含みます。 .Dv INTR_EXCL はそのハンドラをこの割り込みのための排他的なハンドラとして記録します。 .Dv INTR_MPSAFE はその割り込みハンドラはプリエンプティブな環境で適切に 振舞う (``SMP セーフ'') こと、および ``ジャイアントロック'' mutex によって 保護される必要がないことを、スケジューラに通知します。 .Dv INTR_ENTROPY はその割り込みがエントロピの良い供給源であるとして記録します。 これは、エントロピデバイス .Pa /dev/random によって使用されることができます。 ハンドラ .Fa intr は唯一の引数 .Fa arg の値を伴なって呼び出されます。 .Pp .Fa cookiep 引数は、 割り込みの確立が成功した場合に、 .Fn BUS_SETUP_INTR が書込む親のバスが使用するクッキーである .Vt "void *" 型へのポインタです。 ドライバ作成者は、このクッキーが 0 ではないことを仮定することが出来ます。 nexus ドライバは失敗時に .Fa cookiep に 0 を書込みます。 .Pp 割り込みハンドラは、 .Fn BUS_TEARDOWN_INTR によってデタッチされます。 正しい割り込みハンドラを破棄するために、クッキーが .Fn BUS_TEARDOWN_INTR に渡される必要があります。 一度 .Fn BUS_TEARDOWN_INTR が戻ると、その割り込み関数は有効ではなくなり二度と呼び出されないことが 保証されます。 .Pp これらの関数への呼び出しに交差して mutex が保持されていることは認められません。 .Sh 戻り値 成功時には 0 が返され、それ以外の場合は適切なエラーが返されます。 .Sh 関連項目 .Xr random 4 , .Xr device 9 , .Xr driver 9 .Sh 作者 .An -nosplit このマニュアルページは、 .An Doug Rabson .Aq dfr@FreeBSD.org によって書かれた、 .Fn BUS_CREATE_INTR および .Fn BUS_CONNECT_INTR のマニュアルページを基に、 .An Jeroen Ruigrok van der Werven .Aq asmodai@FreeBSD.org によって書かれました。