PCICONF(8)

名称
pciconf - PCI バスのための診断ユーティリティ

書式
pciconf -l pciconf -a selector pciconf -r selector [-b | -h] reg pciconf -w selector [-b | -h] reg value

解説
pciconf コマンドは、 /dev/pci の ioctl(2) インタフェースにより提供されている機能への コマンドラインインタフェースを提供します。 -l オプションを付けると、ブート時のプローブにより見つかったすべてのデバイスを 以下の書式で表示します:

    pci0:4:0: class=0x010000 card=0x00000000 chip=0x000f1000 rev=0x01 hdr=0x00
    pci0:5:0: class=0x000100 card=0x00000000 chip=0x88c15333 rev=0x00 hdr=0x00
    pci0:6:0: class=0x020000 card=0x00000000 chip=0x802910ec rev=0x00 hdr=0x00

最初の欄は、このコマンドの他の書式で直接使えるような形で セレクタ を表示します。 2 番目の欄はクラスコードで、2 桁の 16 進数で表されるクラスバイトと サブクラスバイト、インタフェースバイトからなります。 3 番目の欄は PCI 規格のリビジョン 2.1 で導入されたサブベンダ ID レジスタの内容です。 今日のほとんどの PCI カード (2.0) ではこれは 0 となりますが、新しく開発された PCI カードではそのカード固有の識別コード (unique card identification code) が入れられます。この値は上位 2 バイトのカード ID と、 下位 2 バイトのカードベンダ ID から構成されます。

4 番目の欄にはこのカードがどのチップに基づいているか識別する チップデバイス ID が含まれます。この値は上記と同様に二つの フィールドに分けられ、チップとベンダを識別します。 5 番目の欄はチップのリビジョンを表示します。 6 番目の欄はヘッダタイプを示します。 現在割り当てられているヘッダタイプは PCI - PCI ブリッジのチップが 1 となる以外はすべて 0 となります。 ヘッダタイプレジスタが 0 となっている PCI デバイスの最上位ビットがセットされていると、そのデバイスは 多機能 (multi-function) デバイスであり、ひとつのチップにいくつかの (似たものかもしれないし、 まったく異なるものかもしれない) 機能を備えています。

-l オプションは root ではないユーザが使うことのできる唯一のものです。 pciconf を他の方法で実行するには pcibus:device (オプションで :function が続きます) という形式で セレクタ を指定する必要があります。 最後にコロンを付けても構いませんが無視されますので、 pciconf -l の出力の最初の欄をそのまま使うことができます。 すべての番号は 10 進数で表します。

-a フラグを付けると、 selector で識別したデバイスになんらかのドライバが割り当てられているかを、 pciconf は判定します。 終了状態 0 はデバイスがドライバを持つことを意味します; 非 0 はデバイスがドライバを持たないことを意味します。

-r オプションはデバイス selector のバイトオフセット reg の所のコンフィギュレーションスペースレジスタ (configuration space register) を読み取り、 その値を 16 進数で表示します。 -w オプションはデバイス selector のバイトオフセット reg の所のコンフィギュレーションスペースレジスタへ value を書き込みます。 この二つのオプションでは、 -b フラグと -h フラグで読み書きの大きさを指定できます。 -b は 1 バイトの読み書きを行い、 -h は 2 バイト (halfword) の読み書きを行います。 読み書きの大きさのデフォルトは 4 バイト (longword) です。

関連項目
ioctl(2), modload(8)

歴史
pciconf コマンドは FreeBSD 2.2 で初めて登場しました。 -a オプションは PCI LKM サポートのために FreeBSD 3.0 で追加されました。

作者
pciconf は Stefan Esser と Garrett Wollman によって書かれました。

バグ
-b オプションと -h オプションは pciconf の内部で実装されており、 ioctl() に基づいているわけではありません。

root ではないユーザが -a オプションと -r オプションを使うことを許可することは有用かもしれませんが、 LKM ドライバでデバイスを供給するために modload を実行できるのは root だけでしょうし、 一部の粗悪な PCI チップではコンフィギュレーションスペースレジスタの 読み込みが故障を引き起こす場合があるのです。