MPIC 割り込みコントローラ

サポートするデバイスタイプ:

  • KVM_DEV_TYPE_FSL_MPIC_20 Freescale MPIC v2.0

  • KVM_DEV_TYPE_FSL_MPIC_42 Freescale MPIC v4.2

どのタイプであっても、MPIC インスタンスは 1 つしか生成できない。生成された MPIC はシステムの割り込みコントローラとして動作し、各 vCPU の割り込み入力に 接続する。

Groups:
KVM_DEV_MPIC_GRP_MISC

Attributes:

KVM_DEV_MPIC_BASE_ADDR (rw, 64-bit)

256 KiB の MPIC レジスタ空間のベースアドレス。自然境界に 揃っていなければならない。値 0 はマッピングを無効にする。 リセット値は 0。

KVM_DEV_MPIC_GRP_REGISTER (rw, 32-bit)

ゲストからアクセスした場合と同じように MPIC レジスタへアクセスする。 "attr" は MPIC レジスタ空間へのバイトオフセットである。アクセスは 4 バイト境界に揃っていなければならない。

MSI は、この属性グループを使って該当する MSIIR に書き込むことで シグナルできる。

KVM_DEV_MPIC_GRP_IRQ_ACTIVE (rw, 32-bit)

各標準 openpic ソースの IRQ 入力ライン。割り込みのセンスに関係なく、 0 が非アクティブ、1 がアクティブ。

エッジトリガ割り込みの場合: 1 を書き込むとアクティブ化エッジとみなされ、 0 を書き込むと無視される。読み出すと、以前にシグナルされたエッジがまだ アクノリッジされていなければ 1、そうでなければ 0 が返る。

"attr" は IRQ 番号である。標準ソースの IRQ 番号は、EIVPR0 から 該当する IVPR までのバイトオフセットを 32 で割った値である。

IRQ ルーティング:

MPIC のエミュレーションは IRQ ルーティングをサポートする。MPIC デバイスは 1 つしか生成できない。生成されたデバイスは irqchip id 0 として利用できる。

この irqchip 0 は 256 本の割り込みピンを持ち、割り込みソースのメイン配列 (いわゆる "SRC" 割り込み)にある割り込みを公開する。

番号付けは MPIC の device tree バインディングと同じである。チップの ドキュメントにある "internal" や "external" といった区分けは考慮せず、 ソース配列の先頭からのレジスタオフセットに基づく。

SRC 以外の割り込みへのアクセスは、IRQ ルーティングの仕組みでは実装されて いない。