1
1.割り込みのハードウェア ● PCI の割り込み処理 レガシな PCI には INTA# ~ INTD# という 4 本の割り 込み信号線 (以下,INTx と略)があり,アドイン・カード はこの信号線のどれか一つを L レベルにすることによって, システムに割り込みをかけられるようになっていました. この信号はマザーボード上に並んだ PCI のスロットでされていて,順番にひねったようにつながっています(1).そして各信号がワイヤード OR でつながっていて,複 数のカードで同一の割り込みラインを共有することも可能 でした.たとえば,図1 の例では,スロット1の INTA# とスロット2の INTB# は同一の線を使っています.それ ぞれのアドイン・カードが INTA# と INTB# を使うなら, これらの割り込みは共有になります. また,INTx はエッジではなくレベル・トリガです.つ まり,INTx が L レベルの状態にある限り,システムに割 り込みがかかり続けます. レガシ PCI は,レベル・トリガワイヤード OR によっ て複数の割り込みが共有できていました. PCI Express の割り込み発生方法 PCI Express の割り込みには,従来のレガシ PCI で使わ れていた INTA# ~ INTD# をエミュレートする方法と, MSI 注1 または MSI-X を用いる方法があります.レガシな INTx をエミュレートする方法は下位互換性のために残さ れています.INTx を用いる方法は簡単であり,システム のブート時からすぐに使えるというメリットがあります. しかし,複数の割り込み要因が共有されるというデメリッ トもあります. PCI Express では,INTx 割り込みを発生させるデバイ スは,MSI または MSI-X か,もしくはその両方をサポー トすることが必須となりました.デバイスが両方の割り込 み方法をサポートしていても,同時に使われるのはどちら か一方です. ● INTx エミュレーションによる割り込み発生 PCI Express には INTx の物理的な制御線はないので, 仮想ワイヤというしくみでそれをエミュレートします.こ れは,エンドポイントとルート・コンプレックスは INTx の状態を覚えておいて,メッセージ・パケットを使って変 化するタイミングを知らせるというものです(図2). INTx を L レベルに下げたい場合には Assert_INTx メッ セージを送信し,H レベルに戻したい場合は Deassert_ INTx メッセージを送信します.このメッセージ・パケット 図3 に示す構造をしています. 131 July 2010 内藤 竜治 PCI Expressを本格的に使うには割り込みの実装が必須です.高速なデータ転送にはDMAが必須ですが,DMAを 実装するなら転送完了を知るために割り込みを使わなければならないからです.そこで今回は,PCI Expressにおけ る割り込みの実装方法と,Windowsのデバイス・ドライバでそれを受け取るためのしくみについて解説します. (筆者) 16 PCI Expressの割り込み処理の実装 徹底 解説 KEYWORD ―― PCI Express,コンフィグレーション・レジスタ,コア接続層 割り込み コントローラへ アドイン・ カード用 スロット3 割り込み ルータ アドイン・ カード用 スロット2 INTA# INTB# INTC# INTD# アドイン・ カード用 スロット1 INTA# INTB# INTC# INTD# INTA# INTB# INTC# INTD# INTA# INTB# INTC# INTD# INTA# INTB# INTC# INTD# 図1 レガシ PCI における割り込みのルーティング 割り込みルータは,PCI デバイスの割り込み線をシステムの 割り込み線に割り当てて接続する. 注 1 :Message Signaled Interrupt.PCI 3.0 でオプションとして規定され た方式.

16 PCI Expressの割り込み処理の実装 内藤 竜治 · PDF file1.割り込みのハードウェア pciの割り込み処理 レガシなpciにはinta#~intd#という4本の割り

Embed Size (px)

Citation preview

Page 1: 16 PCI Expressの割り込み処理の実装 内藤 竜治 · PDF file1.割り込みのハードウェア pciの割り込み処理 レガシなpciにはinta#~intd#という4本の割り

1.割り込みのハードウェア

● PCIの割り込み処理

レガシなPCIには INTA#~ INTD#という4本の割り

込み信号線(以下,INTxと略)があり,アドイン・カード

はこの信号線のどれか一つをLレベルにすることによって,

システムに割り込みをかけられるようになっていました.

この信号はマザーボード上に並んだPCIのスロットで共

有されていて,順番にひねったようにつながっています(図

1).そして各信号がワイヤードORでつながっていて,複

数のカードで同一の割り込みラインを共有することも可能

でした.たとえば,図1の例では,スロット1の INTA#

とスロット2の INTB#は同一の線を使っています.それ

ぞれのアドイン・カードがINTA#と INTB#を使うなら,

これらの割り込みは共有になります.

また,INTxはエッジではなくレベル・トリガです.つ

まり,INTxがLレベルの状態にある限り,システムに割

り込みがかかり続けます.

レガシPCIは,レベル・トリガとワイヤードORによっ

て複数の割り込みが共有できていました.

● PCI Expressの割り込み発生方法

PCI Expressの割り込みには,従来のレガシPCIで使わ

れていた INTA#~ INTD#をエミュレートする方法と,

MSI 注 1またはMSI-Xを用いる方法があります.レガシな

INTxをエミュレートする方法は下位互換性のために残さ

れています.INTxを用いる方法は簡単であり,システム

のブート時からすぐに使えるというメリットがあります.

しかし,複数の割り込み要因が共有されるというデメリッ

トもあります.

PCI Expressでは,INTx割り込みを発生させるデバイ

スは,MSIまたはMSI-Xか,もしくはその両方をサポー

トすることが必須となりました.デバイスが両方の割り込

み方法をサポートしていても,同時に使われるのはどちら

か一方です.

● INTxエミュレーションによる割り込み発生

PCI Expressには INTxの物理的な制御線はないので,

仮想ワイヤというしくみでそれをエミュレートします.こ

れは,エンドポイントとルート・コンプレックスは INTx

の状態を覚えておいて,メッセージ・パケットを使って変

化するタイミングを知らせるというものです(図2).

INTxをLレベルに下げたい場合には Assert_INTxメッ

セージを送信し,Hレベルに戻したい場合は Deassert_

INTxメッセージを送信します.このメッセージ・パケット

は図3に示す構造をしています.

131July 2010

内藤 竜治

 PCI Expressを本格的に使うには割り込みの実装が必須です.高速なデータ転送にはDMAが必須ですが,DMAを実装するなら転送完了を知るために割り込みを使わなければならないからです.そこで今回は,PCI Expressにおける割り込みの実装方法と,Windowsのデバイス・ドライバでそれを受け取るためのしくみについて解説します.(筆者)

第16回 PCI Expressの割り込み処理の実装

徹底 解説

KEYWORD――PCI Express,コンフィグレーション・レジスタ,コア接続層

割り込み コントローラへ

アドイン・ カード用 スロット3

割り込み ルータ

アドイン・ カード用 スロット2

INTA# INTB# INTC# INTD#

アドイン・ カード用 スロット1

INTA# INTB# INTC# INTD#

INTA# INTB# INTC# INTD#

INTA# INTB# INTC# INTD#

INTA# INTB# INTC# INTD#

図1レガシPCIにおける割り込みのルーティング

割り込みルータは,PCIデバイスの割り込み線をシステムの割り込み線に割り当てて接続する.

注1:Message Signaled Interrupt.PCI 3.0でオプションとして規定され

た方式.