スポンサーリンク

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

名称

DEVICE_IDENTIFY − デバイスの識別とその登録

書式

#include <sys/param.h>
#include <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⟩ が書きました。

FreeBSD 10.0 May 13, 2004 FreeBSD 10.0

スポンサーリンク