スポンサーリンク

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

名称

device_add_child, device_add_child_ordered − 存在しているデバイスの子とし て新しいデバイスを追加

書式

#include <sys/param.h>
#include <sys/bus.h>

device_t

device_add_child(device_t dev, const char *name, int unit);

device_t

device_add_child_ordered(device_t dev, int order, const char *name, int unit);

解説

dev の新しい子デバイスを追加します。 name および unit 引数はデバイスの名 前とユニット番号を指定します。名前が不明の場合には、呼び出し側は NULL を 渡すべきです。ユニット番号が不明の場合には、呼び出し側は -1 を渡すべき で、システムは次の使用可能なユニット番号を選択するでしょう。

デバイスの名前は、どのドライバがそのデバイスに適切であるかを決定するため に使用されます。名前が指定されている場合には、その名前のドライバのみがプ ローブされます。名前が与えられなかった場合には、認識しているバスの全ての ドライバがプローブされます。全てのイベントで、その名前に結び付いているド ライバのロードとアンロードが安全にできるように、そのデバイスの名前のみが 格納されます。

これは、デバイスインスタンスを独自に識別することができるバス (PCI 等) が、個々のドライバが個々のデバイスインスタンスに適合しているかチェック可 能にします。供給されたプローブヒントに依存して、たった 1 つのドライバがデ バイスをプローブ可能なバスでは、ドライバの名前はデバイスの名前として指定 されるべきです。

通常、ユニット番号はシステムによって自動的に選択されますので、ユニット番 号は -1 が与えられるべきです。指定のユニット番号が希望された時に (例えば ハードウェアの一部分をあらかじめ設定されたユニット番号に結びつけるた め)、unit は渡されるべきです。指定されたユニット番号が既に割り当てられて いた場合には、新しいユニット番号が割り当てられ、診断メッセージが表示され ます。

指定の順序でプローブされなければならないバス (例えば ISA バス用の幾つかの デバイスは関連の無いドライバのプローブの試みの失敗に敏感で、それゆえ最初 にプローブされなければならない) にアタッチされたデバイスの場合には、 device_add_child_ordered() の order 引数が半順序を指定するために使用され るべきです。新しいデバイスは、既存のより大きい順序を持つすべてのデバイス の前に追加されます。 device_add_child() が使用された場合には、順序が 0 で あるとして新しい子が追加されます。

DEVICE_IDENTIFY(9) ルーチンのコンテキストでデバイスを追加するときには、そ のデバイスが既にツリーに追加されていないことを保証するためにいくつかの注 意が払われなければなりません。なぜならば、そのデバイスの名前と devclass_t はプローブ時に (子の追加時ではなく) 関連付けられ、(モジュールの中で後でア ンロードされたと示されている) そのドライバの前のインスタンスが既に追加さ れているかもしれないからです。バスドライバの作者は同様に、子デバイスの複 製を避けるためにロードおよびアンロードされるときに、子の追加時にも注意し なければなりません。

戻り値

成功時には新しいデバイスが、そうでなければ NULL が返されます。

関連項目

device(9)

作者

このマニュアルページは Doug Rabson が書きました。

FreeBSD 10.0 May 13, 2004 FreeBSD 10.0

スポンサーリンク