PCIの知識
(Software技術者向け)
Modified: 11 Oct 1998
拡張ボードは、ISA(Industry Standard Architecture)から、PCI(Peripheral Component Interconnect)に移っています。
そのPCIに関する話題を取り上げます。
PCIのオーバービュー
PCIのベンダーIDから会社名を知りたい
コンフィグレーションレジスタの読み出し方法
Windows95とWindowsNTで使えるPCIモニタ (ソースあり)
PCI関連のリンク
http://www.pcisig.com/siginfo/vendors.html
IntelのベンダーIDが、8086 というのが面白いですね。希望の数字がもらえるんでしょうね。
PCI Special Interresting Group
InterlのPCIチップセットの仕様書
http://developer.intel.com/design/pcisets/datashts/
BIOSメーカのページ (PCIの情報もある)
- AMI
- Award BIOS
- Phoenix BIOS
PCIはBIOSによって、アドレスなどのリソース割付が行われます。
したがって、PCI用のドライバを作成する場合、割り付けられたアドレスを読み出して、その情報を使ってアクセスする必要があります。
読み出し方は、OS によって異なります。
PCI BIOSの呼び出し
DOSやWindows95/98の場合
- F000:FE6E に関数アドレスが入っていますので、それを呼び出すと設定情報が取得できます。
DOSの場合、INT 1AhでもOKです。
PCI 2.0 以降の場合 CONFIG_ADDRESS (0CF8h)、CONFIG_DATA (0CFCh) をアクセスして調停後の設定情報が取得できます。 PCI 2.0 以前の場合 0CFAh にバス番号、0CF8h に機能番号 をセットすると、C000h−CFFFh に、デバイス番号0から15のコンフィグレーションレジスタが256単位で見えるようになります。
PCI BIOS32 を備えたBIOSもあります。
PCI BIOS および PCI BIOS の仕様書は、未確認ですが、以下のページから入手できるそうです。
私は、Phoenix のホームページに、PCI BIOS32の仕様書が登録されているのを確認しました。
http://www.ptltd.com/
HAL関数の呼び出し
WindowsNTの場合
- HalGetBusData() というHALサービスを呼び出すと、設定情報が取得できます。
PCIバスは、33MHzの32ビットバスです。
(ISAは、8-10MHzの16ビットバスです)PCIバスは、独立のバスを最大256本持つことができます。バスとバスは、”PCIブリッジ”で接続されます。
各バスには、最大32個のデバイスが接続できます。
各デバイスは、最大8個の機能番号を持ち、異なるデバイスとして振る舞うことができます。