PCI列挙でデバイスはどのように決定されますか?(バス/デバイス/機能)


8

PCIバス/デバイス/関数の列挙について混乱しています。PCI構成の Wikipediaページを見ると、特定のバスについて、マスターが関数0を使用してすべてのデバイスのベンダーIDとデバイスIDを要求することがわかります。すべての0xFFが返される場合、デバイスは存在せず、列挙が続行されます。有効なデバイスIDとベンダーIDが見つかった場合は、そこにPCIユニットがあり、それが列挙されます。bus.device.function内のデバイスがどのように決定されるのかわかりません。

たとえば、1つのPCIバスと1つのPCI周辺機器が接続されたCPUがあるとします。CPUがバス0(デフォルト)を検索し、すべてのデバイス番号をチェックして機能0を確認することを理解しています。周辺機器のデバイス番号はどのように決定されますか?

回答:


6

元のPCIフレームワーク(「従来のPCI」)およびPCI-Xでも、デバイスは「スロット」に対応し、それぞれに同じパラレルバスに接続された独自のコネクタが付いていました。各スロットには、列挙中にアサートされる一意のIDピンがありました。列挙は本質的に(スロットごとに)「このスロットには何かありますか?」デバイスは、この信号に応答してバス上にデータを駆動することにより応答しました。応答がないことは、デバイスがないことを意味しました。

デバイスは、下位バスを形成することを意味する「ブリッジ」であることもできます。そのバスには個別のID(アップストリームから割り当てられます)があり、独自に列挙された独自のスロットのセットがあります。

PCI-Express(PCIe)はまったく異なります。PCIeは実際にはバスではありません-デバイス間で共有されるリソースのように。代わりに、各デバイスは、その上流デバイス(および任意の下流デバイス)への独自の個別のポイントツーポイントシリアル接続を持っています-下流デバイスがある場合、それはブリッジとしても機能していることを意味します)。PCIeをLANのように考えてください。各ブリッジは、他のデバイスに接続された多数のポートを持つスイッチに似ています。他のデバイスは端末デバイスである場合もあれば、他のスイッチ(PCIeブリッ​​ジなど)である場合もあります。

PCIeは、概念的なフレームワークとアドレス指定(したがってソフトウェアに提供される動作)がPCIおよびPCI-Xと互換性があるように設計されました。ただし、実装は完全に異なります。たとえば、デバイスを列挙する場合、ポイントツーポイントであるため、列挙の各ポイントで決定する必要がある唯一の質問は「何かありますか?」各デバイスは、ワイヤの独自の独立したセットを有しているので、デバイスIDは、本質的にすべてのハードコードされている(最上位の「複合ルート」を含む、したがって各ブリッジ、指示そのデバイスIDがどうなるか、各デバイス)。

すべての場合において、バス/デバイス/機能の「機能」部分は、ペリフェラル内で厳密に処理されます。たとえば、デュアルポートNICコントローラには、多くの場合、各ポートに1つずつ、2つの機能があります。これらは個別に構成および操作できますが、CPUから機能までのデータパスはどちらも同じです。


1
答えは少し混乱します:1)PCIでは、「デバイス番号」は実際には「スロット番号」を意味します(そしてそれは理にかなっています)、2)「PCIeは完全に異なる」と言い、「各デバイスには独自の独立したワイヤセットがあるため、デバイスIDは基本的にすべてハードコードされています」。つまり、ワイヤのセット(=スロット)にIDがハードコードされているため、PCIと同じです。さて、問題は「ハードコーディング」がいつ発生するかです。スイッチ/ブリッジはリセット時にIDを再割り当てしますか?
xealits

2
うん。それはもっといい言葉になるかもしれません。ポイントは、PCIではカードが共有バス上にあるが、それがどのスロットにあるかを「認識」しており、そのスロット固有のピンがアサートされたときにのみ応答するということです。PCIeでは、ブリッジには「ワイヤー」のN個の異なるセットがあります。したがって、ブリッジデバイスには、ワイヤのセットごとに個別のスロット番号があります。ブリッジの観点から見ると、そのスロットには一定の数があります。そこに何かがあるかどうかを判断するだけです。カード自体は、それがどのスロットにあるかを認識していません。ブリッジがそこに何かがあると判断すると、スロット番号がそのデバイスに通知されます。
Gil Hamilton
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.