DEVICE_IDENTIFY(9)

名称
DEVICE_IDENTIFY - デバイスの識別とその登録

書式
<sys/param.h> <sys/bus.h> void DEVICE_IDENTIFY(driver_t *driver, device_t parent)

解説
デバイスのための識別関数は、例えば ISA バスなどの、子デバイスを独立して 識別できないバス上のデバイスのためにだけ必要とされます。 これはデバイスを認識 (大抵はハードウェアの不明瞭でないレジスタに アクセスすることによって行われます) し、 そのデバイスに関してカーネルに通知し、 新しいデバイスの実体を作成するために、使用されます。

BUS_ADD_CHILD(9) はバスの子デバイスとして、デバイスを登録するために使用されます。 そのデバイスの (IRQ や I/O ポートのような) リソースは、個々のリソースのために bus_set_resource() (詳細は bus_set_resource(9) を参照) を呼び出すことによってカーネルに登録されます。

デバイスツリーおよびデバイスドライバツリーが解体されるため、 DEVICE_IDENTIFY() ルーチンはこれを考慮に入れる必要があります。 識別ルーチンを持っているデバイスドライバをロードおよびアンロードする場合には、 この可能性を排除するための特別の手段がとられない限りは、 その子ノードは同じノードを何度も追加する能力を持っています。

使用例
以下の疑似コードは、ハードウェアの一部をプローブし、デバイスと そのリソース (I/O ポート) をカーネルに登録する関数の例を示しています。

    void
    foo_identify(driver_t *driver, device_t parent)
    {
    	device_t child;
    	デバイス情報の取り出し;
    	if (サポートするデバイスうちの 1 つがマッチする &&
    	    デバイスツリーに未だ存在しない) {
    		child = BUS_ADD_CHILD(parent, 0, "foo", -1);
    		bus_set_resource(child, SYS_RES_IOPORT, 0, FOO_IOADDR, 1);
    	}
    }

関連項目
BUS_ADD_CHILD(9), bus_set_resource(9), device(9), device_add_child(9), DEVICE_ATTACH(9), DEVICE_DETACH(9), DEVICE_PROBE(9), DEVICE_SHUTDOWN(9)

作者
このマニュアルページは Alexander Langer <alex@FreeBSD.org> が書きました。