PCICONF(8) | FreeBSD System Manager's Manual | PCICONF(8) |
名称
pciconf — PCI バスのための診断ユーティリティ書式
pciconf | -l [ -bcev] |
pciconf | -a selector |
pciconf | -r [ -b | -h] selector addr[ : addr2] |
pciconf | -w [ -b | -h] selector addr value |
解説
pciconf ユーティリティは、 pci(4) の ioctl(2) インタフェースにより提供されている機能へのコマンドラインインタフェースを提供します。このため、機能の中には、 /dev/pci への書き込みアクセスを持つユーザ、すなわち通常は、スーパユーザのみが、利用できるものもあります。-l オプションを付けると、ブート時のプローブにより見つかったすべてのデバイスを以下の書式で表示します:
foo0@pci0:0:4:0: class=0x010000 card=0x00000000 chip=0x000f1000 rev=0x01 hdr=0x00 bar0@pci0:0:5:0: class=0x000100 card=0x00000000 chip=0x88c15333 rev=0x00 hdr=0x00 none0@pci0:0:6:0: class=0x020000 card=0x00000000 chip=0x802910ec rev=0x00 hdr=0x00
最初の欄は、デバイス名、ユニット番号、 selector を表示します。対象の PCI デバイスに関して、カーネル内のデバイスの設定がなされていない場合、デバイス名は、“none”になります。設定されていないデバイスのユニット番号は、0 から開始し、設定されていないデバイスに出会う度に増やされます。 selector は、このコマンドの他の書式で直接使えるような形で表示されます。 2 番目の欄は、クラスコードで、2 桁の 16 進数で表されるクラスバイトとサブクラスバイト、インタフェースバイトからなります。 3 番目の欄は、 PCI 規格のリビジョン 2.1 で導入されたサブベンダ ID レジスタの内容です。より古いカードでは、0 になることに注意してください。このフィールドは、上位 2 バイトのカード ID と、下位 2 バイトのカードベンダ ID から構成されます。
4 番目の欄には、このカードがどのチップに基づいているか識別するチップデバイス ID が含まれます。この値は、上記と同様に二つのフィールドに分けられ、チップとベンダを識別します。 5 番目の欄は、チップのリビジョンを表示します。 6 番目の欄は、ヘッダタイプを示します。ほとんどのデバイスのための 0、 PCI から PCI ブリッジのための 1、と PCI から CardBus ブリッジのための 2 を含む、現在割り当てられたヘッダタイプ。ヘッダタイプレジスタが 0 となっている PCI デバイスの最上位ビットがセットされていると、そのデバイスは、 多機能 (multi-function) デバイスであり、ひとつのチップにいくつかの (似たものかもしれないし、まったく異なるものかもしれない) 機能を備えています。
-b オプションが供給されるなら、 pciconf は、各デバイスのためのリソースが割り当てられる任意のベースアドレスレジスタ (BARs) をリストします。各 BAR は、次の形式で行によって列挙されます:
bar [10] = type Memory, range 32, base 0xda060000, size 131072, enabled
角括弧の前に置かれた“ bar
”の後の最初の値は、16 進の設定空間の BAR のオフセットです。 BAR のタイプは、“Memory”, “Prefetchable Memory”または“I/O Port”の 1 つです。範囲は、BAR がデコードする最大のアドレスを示しています。ベースとサイズは、それぞれ BAR のアドレスウィンドウの始めと長さを示しています。最終に、最後のフラグは、BAR が有効にされるか、または無効にされるかを示しています。
-c オプションが供給されるなら、 pciconf は、各デバイスによってサポートされた任意のケーパビリティをリストします。各ケーパビリティは、次の形式の行を通して列挙されます:
cap 10[40] = PCI-Express 1 root port
“ cap
”接頭辞の後の最初の値は、16 進のケーパビリティ ID です。角括弧内の 2 番目の値は、16 進の設定空白でのケーパビリティのオフセットです。等号の後のテキストの形式は、ケーパビリティ特有 (capability-specific) です。
各拡張ケーパビリティは、同様の形式の行を通して列挙されます:
ecap 0002[100] = VC 1 max VC0
“ ecap
”接頭辞の後の最初の値は、16 進数の拡張ケーパビリティ ID です。角括弧の 2 番目の値は、16 進数の設定空間の拡張ケーパビリティのオフセットです。等号の後のテキストの形式は、ケーパビリティ特有です。
-e オプションが供給されるなら、 pciconf は、標準 PCI エラーレジスタの、このデバイスのために報告されたあらゆるエラーをリストします。エラーは、PCI 状態レジスタ、PCI-express デバイス状態レジスタと Advanced Error Reporting 状態レジスタでチェックされます。
-v オプションが供給されるなら、 pciconf は、ベンダ/デバイス情報データベースをロードを試み、各デバイスのためのベンダ、デバイス、クラスとサブクラス識別子を印刷 (表示) します。
-l を除いて pciconf のすべての呼び出しは、形式 pci
domain: bus: device: function, pci
bus: device: function または pci
bus: device の selector を要求します。短縮された形式の場合には、省略されたセレクタの構成部品は、0 であると仮定されます。その後に @ が続くオプションの先導するデバイス名とオプションの最終的なコロンは、無視されます。これは、 pciconf -l の出力の最初のカラムを変更なしで使用することができます。すべての番号は、10 進数で表します。
-a フラグを付けると、 selector で識別したデバイスになんらかのドライバが割り当てられているかを、 pciconf は、判定します。終了状態 0 は、デバイスがドライバを持つことを意味します;非 0 は、デバイスがドライバを持たないことを意味します。
-r オプションは、デバイス selector のバイトオフセット addr の所のコンフィギュレーションスペースレジスタ (configuration space register) を読み込み、その値を 16 進数で表示します。省略可能な第 2 アドレス addr2 は、読み込み範囲を指定します。 -w オプションは、デバイス selector のバイトオフセット addr の所のコンフィギュレーションスペースレジスタへ value を書き込みます。この二つのオプションでは、 -b フラグと -h フラグで読み書きの大きさを指定できます。 -b は、1 バイトの読み書きを行い、 -h は、2 バイト (halfword) の読み書きを行います。読み書きの大きさのデフォルトは、4 バイト (longword) です。
環境変数
通常、PCI ベンダ/デバイスの情報データベースは、 /usr/share/misc/pci_vendors から読み込まれます。環境変数 PCICONF_VENDOR_DATABASE を設定することにより、このパスを変更可能です。歴史
pciconf ユーティリティは、 FreeBSD 2.2 ではじめて登場しました。 -a オプションは、 PCI KLD サポートのために FreeBSD 3.0 で追加されました。作者
pciconf ユーティリティは、 と によって書かれました。バグ
-b オプションと -h オプションは、 pciconf の内部で実装されており、 ioctl(2) に基づいているわけではありません。root ではないユーザが -a オプションと -r オプションを使うことを許可することは、有用かもしれませんが、 KLD ドライバでデバイスを供給するために kldload を実行できるのは、root だけでしょうし、一部の粗悪な PCI チップでは、コンフィギュレーションスペースレジスタの読み込みが故障を引き起こす場合があるのです。
June 1, 2012 | FreeBSD |