DEVINFO(3) | FreeBSD Library Functions Manual | DEVINFO(3) |
名称
devinfo, devinfo_init, devinfo_free, devinfo_handle_to_device, devinfo_handle_to_resource, devinfo_handle_to_rman, devinfo_foreach_device_child, devinfo_foreach_device_resource, devinfo_foreach_rman_resource, devinfo_foreach_rman — デバイスとリソース情報ユーティリティライブラリライブラリ
Device and Resource Information Utility Library (libdevinfo, -ldevinfo)書式
#include < devinfo.h> int
devinfo_init( void);
void
devinfo_free( void);
struct devinfo_dev *
devinfo_handle_to_device( devinfo_handle_t handle);
struct devinfo_res *
devinfo_handle_to_resource( devinfo_handle_t handle);
struct devinfo_rman *
devinfo_handle_to_rman( devinfo_handle_t handle);
int
devinfo_foreach_device_child( struct devinfo_dev *parent, int (*fn)(struct devinfo_dev *child, void *arg), void *arg);
int
devinfo_foreach_device_resource( struct devinfo_dev *dev, int (*fn)(struct devinfo_dev *dev, struct devinfo_res *res, void *arg), void *arg);
int
devinfo_foreach_rman_resource( struct devinfo_rman *rman, int (*fn)(struct devinfo_res *res, void *arg), void *arg);
int
devinfo_foreach_rman( int (*fn)(struct devinfo_rman *rman, void *arg), void *arg);
解説
devinfo ライブラリはカーネルの内部のデバイス階層構造と、I/O リソース管理プログラムへのアクセスを提供します。ライブラリは、アプリケーションにとって都合がよい形に作られるカーネルの状態のスナップショットを取得するために sysctl(3) インタフェースを使用します。情報が多くの異なった方法で論理的に用意されるという事実によって、ライブラリは、どんな構造のデータも強要することを試みません。
< devinfo.h> で定義されたデータ構造で返されるデバイス、リソースとリソース管理プログラム情報は次の通りです:
struct devinfo_dev { devinfo_handle_t dd_handle; /* デバイスハンドル */ devinfo_handle_t dd_parent; /* 親ハンドル */ char *dd_name; /* デバイスの名前 */ char *dd_desc; /* デバイス記述 */ char *dd_drivername; /* アタッチされたドライバの 名前 */ char *dd_pnpinfo; /* 親のバスからの pnp 情報 */ char *dd_location; /* バスが dev を考える ところ */ uint32_t dd_devflags; /* API フラグ */ uint16_t dd_flags; /* 内部 dev フラグ */ device_state_t dd_state; /* dev の付属状態 */ }; struct devinfo_rman { devinfo_handle_t dm_handle; /* リソース管理プログラムハンドル */ u_long dm_start; /* リソース開始 */ u_long dm_size; /* リソースサイズ */ char *dm_desc; /* リソース記述 */ }; struct devinfo_res { devinfo_handle_t dr_handle; /* リソースハンドル */ devinfo_handle_t dr_rman; /* リソース管理プログラムハンドル */ devinfo_handle_t dr_device; /* 所有しているデバイス */ u_long dr_start; /* リージョン開始 */ u_long dr_size; /* リージョンサイズ */ };
devinfo_handle_t 値は対応して参照される構造体を検索するために使用することができます。
devinfo_init() はカーネルの内部デバイスとリソース状態のスナップショットを取ります。多くの再試行の後に一貫したスナップショットを取得することができないなら、 0 以外を返します。 devinfo_init() は他のどの関数が使用される前に呼び出されなければなりません。
devinfo_free() はスナップショットに関連しているメモリを解放します。他の関数によって返されたどのポインタもこれによって無効にされ、 devinfo_init() は他のどの関数も使用される前に再び呼び出されなければなりません。
devinfo_handle_to_device(), devinfo_handle_to_resource() と devinfo_handle_to_rman() は、それぞれそれらに渡された devinfo_handle_t に基づく devinfo_dev, devinfo_res と devinfo_rman 構造体へのポインタを返します。これらの関数は任意のノードから他のノードまでツリーを横断するために使用することができます。定数 DEVINFO_ROOT_DEVICE が devinfo_handle_to_device() に渡されるなら、デバイスツリーのルート (根) のハンドルを返します。
devinfo_foreach_device_child() は device の直接の子供であるすべてのデバイスでコールバック引数 fn を呼び出します。また、 fn 関数は、状態をコールバック関数に渡されることを可能にする arg が渡されます。 fn が 0 でないエラー値を返すなら、縦断は止められ、 devinfo_foreach_device_child() は呼び出し側にエラー値を返します。
devinfo_foreach_device_resource() は device によって所有されているすべてのリソースでコールバック引数 fn を呼び出します。また、 fn 関数は、状態をコールバック関数に渡されることを可能にする device と arg が渡されます。 fn が 0 でないエラー値を返すなら、縦断は止められ、 devinfo_foreach_device_resource() は呼び出し側にエラー値を返します。
devinfo_foreach_rman_resource() はリソース管理プログラム rman 中のすべてのリソースでコールバック引数 fn を呼び出します。また、 fn 関数は、状態をコールバック関数に渡されることを可能にする arg が渡されます。 fn が 0 でないエラー値を返すなら、縦断は止められ、 devinfo_foreach_rman_resource() は呼び出し側にエラー値を返します。
devinfo_foreach_rman() はすべてのリソース管理プログラムでコールバック引数 fn を呼び出します。また、 fn 関数は、状態をコールバック関数に渡されることを可能にする arg が渡されます。 fn が 0 でないエラー値を返すなら、縦断は止められ、 devinfo_foreach_rman() は呼び出し側にエラー値を返します。
関連項目
devstat(3)歴史
devinfo ライブラリは、 FreeBSD 5.0 ではじめて登場しました。作者
<msmith@FreeBSD.org>バグ
これはライブラリの最初の実装で、インタフェースはまだ改良することがあります。クラスかドライバで分類することが難しいようにして、インタフェースはデバイスクラスかドライバかを報告しません。
April 19, 2001 | FreeBSD |