次の方法で共有


PCI 電源管理とデバイス ドライバー

この記事では、PCI Power Management (PCI-PM) に準拠するハードウェアがオペレーティング システムのデバイス ドライバーとやり取りする方法と、PCI-PM が ACPI と統合する方法について、ベンダーが経験したいくつかの混乱を明らかにします。 詳細については、https://www.uefi.org/specifications を参照してください。

デバイス ドライバーと PCI 電源管理

この説明では、現在の Windows DDK で説明されているように、Windows ドライバー モデル (WDM) ドライバーが電源管理イベントを処理する方法について理解していることを前提としています。 一般に、デバイス ドライバーの役割は次のとおりです。

  • バス ドライバー: バス ドライバーは、デバイスの列挙、構成、および制御を担当します。 PCI-PM の場合、PCI ドライバーは、ハードウェアの機能を判断するために PCI-PM レジスタを読み取る役割を担います。 POWER IRP が電源状態の変更を要求すると、PCI ドライバーは PCI 電源管理レジスタに書き込み、ハードウェアを異なる Dx 状態に設定します。

    デバイスでウェイクアップが有効になっている場合、PCI ドライバーは、デバイスが PME を起動できるように、PCI-PM レジスタに書き込みます (ACPI もアクションを実行します。次のセクションを参照)。 最後に、ACPI が PCI バスがシステムをスリープ解除していると判断した場合、PCI ドライバーは、PCI 構成領域をスキャンして、どのデバイスが PME をアサートするかを探し、そのデバイスの PME を無効にして、そのデバイスのドライバーに通知します。

  • デバイス ドライバー: デバイスの特定のドライバーは、デバイス コンテキストを保存および復元し、デバイスのポリシー所有者として電源状態の変更を要求します。 デバイス ドライバーは、低いデバイスの電源状態の変更を要求する POWER IRP を受信すると、デバイス ドライバーは、後でデバイスをオンにするために必要な独自のデバイス コンテキストを保存する責任があります。 場合によっては、何も保存できない場合があります。

PCI-PM レジスタは、厳密には PCI ドライバーのドメインです。IHV のデバイス ドライバーは、これらのレジスタのいずれかにアクセスする必要はありません。 そうすると、システムが確実に動作しなくなることがあります。 デバイス ドライバーの責任は、独自のアクションのみを実行することです。

ACPI と PCI PM の統合

一部のデバイス、特にポータブルのマザーボード ビデオ デバイスでは、PCI 電源管理と ACPI ソース言語アセンブラー (ASL) の両方がデバイスの電源を完全に管理する必要があります。 PCI 電源管理レジスタは、内部クロックや電源プレーンなど、デバイスの内部状態を制御します。 ASL は、外部クロックや電源プレーンなどの外部状態を制御するか、ビデオ コントローラーの場合は、ASL がビデオ バックライトを制御します。 ASL と PCI-PM は、マザーボード デバイスでのみ組み合わせることができます。

OnNow アーキテクチャは階層型アーキテクチャであり、デバイス ドライバー、PCI ドライバー、ACPI ドライバー (および ASL) の統合を自然に処理します。 次のシナリオは、これらのデバイスを処理するためにドライバーが呼び出される順序を示しています。

上記のシナリオが説明どおりに動作するには、WDM ドライバーは、現在のバージョンの Microsoft WDK で説明されているように、POWER IRP を正しく転送する必要があります。

シナリオ 1: デバイスをオフにする

  1. デバイス ドライバー: 独自のデバイスの状態を保存します。

  2. PCI ドライバー: プラグ アンド プレイ構成を保存し、デバイス (割り込みと BAR) を無効にし、PCI-PM レジスタを使用してデバイスを D3 に配置します。

  3. ACPI ドライバー: ASL コード (_PS3および電源リソースが使用されなくなった_OFF) を実行して、チップの外部の状態を制御します。

シナリオ 2: PCI 電源管理とデバイス ドライバー

  1. ACPI ドライバー: ASL コード (_PS0および OnNow に必要な電源リソースの_ON) を実行して、チップの外部の状態を制御します。

  2. PCI ドライバー: PCI-PM レジスタを使用してデバイスを D0 に配置し、プラグ アンド プレイ構成を復元します (割り込みと BAR-これらは、デバイスが以前にオンになっていたものとは異なる場合があります)。

  3. デバイス ドライバー: デバイス内の独自のコンテキストを復元します。

シナリオ 3: ウェイクアップを有効にする

  1. デバイス ドライバー: ウェイクアップを有効にするためにチップに独自のレジスタを設定します。 たとえば、パターン マッチング ネットワーク ウェイクアップでは、この場合、パターンがアダプターにプログラムされます。

  2. PCI ドライバー: デバイスが PME をアサートできるように、PCI PM レジスタのウェイクアップ 有効化ビットを設定します。

  3. ACPI ドライバー: PME に関連付けられているチップ セット内の GPE を有効にします (ルート PCI バスの下にリストされている_PRW オブジェクトによって説明されます)。

シナリオ 4: ウェイクアップ

  1. ACPI ドライバー: ウェイクアップイベントのGPE状態ビットをスキャンしてスリープ解除し、ウェイクアップイベントに関連するGPE状態ビットを無効にし、設定されたGPEビットに関連する任意の_Lxxまたは_Exxメソッドを実行します。 PCI バスでのウェイクアップ通知に応答して、ACPI ドライバーは PCI ドライバーのWAIT_WAKE IRP を完了して、システムをウェイクしていることを PCI ドライバーに通知します。

  2. PCI ドライバー: 設定された PME ステータス ビットを持つデバイスを探して、構成領域をスキャンします。 デバイスごとに、PME を無効にし、そのデバイスのWAIT_WAKE IRP を完了して、ウェイクアップをアサートしていることをドライバーに通知します。 PCI ドライバーは、PME のアサートを示しているデバイスがないことを確認するために、すべての PCI デバイスを一巡したとき、および PME のアサートが停止したときに、ウェイクデバイスのスキャンを停止します。

  3. デバイス ドライバー: デバイスを D0 に配置するよう要求し (シナリオ 2 を参照)、ウェイクアップ イベントを処理するために必要なチップ内の独自のレジスタを設定します。

PCI 電源管理とデバイス ドライバーに対する行動喚起

  • この記事の説明に従って、ACPI と PCI-PM の機能をデバイスに統合します。

  • PCI 電源管理仕様は、PCI-SIG Web サイトで入手できます。

  • ACPI 仕様は、 https://www.uefi.org/specificationsで入手できます。 このリンクは、Microsoft.com サイトから移動します。

  • ACPI コンポーネント アーキテクチャ (ACPICA) コンパイラは、 https://acpica.org/downloads/binary-toolsにあります。