ACPI システム記述テーブル

SoC ベースのプラットフォームでは、高度な構成および電源インターフェイス (ACPI) ハードウェア仕様の実装は必要ありませんが、ACPI ソフトウェア仕様の多くは必要です (または必要な場合もあります)。 ACPI は、汎用の拡張可能なテーブルパッシング メカニズムと、オペレーティング システムにプラットフォームを記述するための特定のテーブルを定義します。

ID フィールドとチェックサム フィールドを含むテーブルの構造とヘッダーは、 ACPI 5.0 仕様で定義されています。 Windowsでは、この記事で説明する特定のテーブルに加えて、このテーブルの受け渡しメカニズムを利用します。

これらのテーブルの背後にある考え方は、汎用ソフトウェアが、さまざまな方法でさまざまなプラットフォームに統合できる標準的な知的財産 (IP) ブロックをサポートできるようにすることです。 テーブル戦略では、特定のプラットフォームのプラットフォーム変数属性がテーブルに提供され、プラットフォームに統合された特定の IP ブロックのセットに合わせて汎用ソフトウェアによって使用されます。 したがって、このソフトウェアは一度書き込み、徹底的にテストし、時間の経過とともに最適化することができます。

ルート システム記述ポインター (RSDP)

Windowsは、ハードウェア プラットフォームを起動するために UEFI ファームウェアに依存します。 したがって、Windowsは EFI システム テーブルを使用して、ACPI 5.0 仕様の「UEFI 対応システムでの RSDP の検索」セクション 5.2.5.2 で説明されているように、RSDP を検索します。 プラットフォーム ファームウェアは、RSDP の RSDT または XSDT のアドレスを入力します。 (両方のテーブル アドレスが指定されている場合は、Windows XSDT が優先されます)。

ルート システム記述テーブル (RSDT)

RSDT (または XSDT) には、プラットフォームで提供されている他のシステム記述テーブルへのポインターが含まれています。 具体的には、このテーブルには次へのポインターが含まれています。

  • 固定 ACPI ハードウェア テーブル (FADT)

  • 複数割り込みコントローラー テーブル (MADT)

  • 必要に応じて、コア システム リソース テーブル (CSRT)

  • デバッグ ポート テーブル 2 (DBG2)

  • ブート グラフィックス リソース テーブル (BGRT)

  • ファームウェア パフォーマンス データ テーブル (FPDT)

  • 基本システム記述テーブル (DSDT)

  • 必要に応じて、追加のシステム記述テーブル (SSDT)

固定 ACPI 説明テーブル (FADT)

固定 ACPI ハードウェア テーブル (FADT) には、プラットフォームで使用できるさまざまな固定ハードウェア機能に関する重要な情報が含まれています。 ハードウェアの削減された ACPI プラットフォームをサポートするために、ACPI 5.0 は、次のように FADT テーブル定義を拡張します。

  • FADT (オフセット 112) 内の Flags フィールドには、次の 2 つの新しいフラグがあります。

    HARDWARE_REDUCED_ACPI ビット オフセット 20。 ACPI ハードウェアがこのプラットフォームで使用できないことを示します。 ACPI 固定ハードウェア プログラミング モデルが実装されていない場合は、このフラグを設定する必要があります。

    LOW_POWER_S0_IDLE_CAPABLE ビット オフセット 21。 プラットフォームが、どの Sx スリープ状態よりもエネルギー効率の高い ACPI S0 システムの電源状態内の低電力アイドル状態をサポートしていることを示します。 このフラグが設定されている場合、Windowsはスリープおよび再開を試行しませんが、代わりにプラットフォームのアイドル状態とコネクト スタンバイを使用します。

  • FADT Preferred_PM_Profile フィールド (バイト オフセット 45) には、新しいロール エントリ "Tablet" があります。 この役割は、ディスプレイと入力の電源管理ポリシーに影響し、スクリーン キーボードの表示に影響します。

  • "IA-PC ブート アーキテクチャ フラグ" フィールド (オフセット 109) には、PC の CMOS RTC が実装されていないか、レガシ アドレスに存在しないことを示す新しい "CMOS RTC Not Present" フラグ (ビット オフセット 5) があります。 このフラグが設定されている場合、プラットフォームは ACPI 時間およびアラーム制御方法デバイスを実装する必要があります。 詳細については、「ACPI で定義されたデバイス」トピックの「制御方法の時刻とアラーム デバイス」セクションを参照してください。

  • ハードウェアの削減された ACPI プラットフォームで従来の PC スリープ/再開をサポートするために、新しいフィールドが追加されました。 これらのフィールドはWindowsによって無視されますが、コンプライアンスのためにテーブルに存在する必要があります。

  • HARDWARE_REDUCED_ACPI フラグが設定されている場合、ACPI ハードウェア仕様に関連するすべてのフィールドはオペレーティング システムによって無視されます。

その他のすべての FADT 設定は、以前のバージョンの ACPI 4.0 の意味を保持します。 詳細については、 ACPI 5.0 仕様のセクション 5.2.9「FIXED ACPI Description Table (FADT)」を参照してください。

複数の APIC 説明テーブル (MADT)

ACPI の PC 実装では、複数の APIC 記述テーブル (MADT) と PC 固有の割り込みコントローラー記述子を使用して、システム割り込みモデルを記述します。 Arm ベースの SoC プラットフォームの場合、ACPI 5.0 では、Arm Holdings の汎用割り込みコントローラー (GIC) と GIC ディストリビューターの記述子が追加されます。 Windowsには、GIC および GIC ディストリビューターの受信トレイサポートが含まれています。 これらの記述子の詳細については、 ACPI 5.0 仕様のセクション 5.2.12.14、"GIC 構造体"、および 5.2.12.15、"GIC ディストリビューター構造"を参照してください。

割り込みコントローラー記述子構造体は、MADT の Flags フィールドの直後に一覧表示されます。 Arm プラットフォームの場合、GIC ごとに 1 つの記述子が一覧表示され、その後に GIC ディストリビューターごとに 1 つが表示されます。 ブート プロセッサに対応する GIC は、割り込みコントローラー記述子の一覧の最初のエントリである必要があります。

汎用タイマーの説明テーブル (GTDT)

割り込みコントローラーと同様に、ACPI には標準のタイマー記述テーブルがあります。 GIT タイマーを利用する Arm システムの場合、ACPI の GTDT を使用して、Windowsの GIT の組み込みサポートを活用できます。

コア システム リソース テーブル (CSRT)

コア システム リソース (CSR) は、オペレーティング システムがアクセスをシリアル化する必要がある割り込みコントローラー、タイマー、DMA コントローラーなどの共有ハードウェア機能です。 タイマーや割り込みコントローラー (x86 と Arm の両方のアーキテクチャ) などの機能の業界標準が存在する場合、Windowsは ACPI で説明されている標準テーブル (MADT や GTDT など) に基づいて、これらの機能をサポートするように構築されています。 ただし、業界が DMA コントローラー インターフェイス標準に収束するまでは、オペレーティング システムで一部の非標準デバイスをサポートする必要があります。

Windowsでは、この問題に対処するための HAL 拡張機能の概念がサポートされています。 HAL 拡張機能は、SOC 固有のモジュールであり、DLL として実装され、Windows HAL を、Windowsに必要な特定の種類の CSR の特定のハードウェア インターフェイスに適合させます。 これらの非標準 CSR モジュールを識別して読み込むために、Microsoft は新しい ACPI テーブルを定義しました。 このテーブルは、ACPI 仕様で "CSRT" の予約済み署名を持ち、プラットフォームで標準以外の CSR が使用されている場合は RSDT に含める必要があります。

CSRT では、各リソース グループが特定の種類のハードウェアを識別する、CSR のリソース グループについて説明します。 Windowsは、リソース グループに指定された識別子を使用して、このグループに必要な HAL 拡張機能を検索して読み込みます。 CSRT 内のリソース グループには、CSR の種類と HAL 拡張機能のニーズに応じて、個々のリソース記述子が含まれる場合もあります。 これらのリソース記述子の形式と使用は、HAL 拡張機能ライターによって定義されます。これにより、拡張機能をより移植可能にし、CSRT に含まれるリソース記述子を変更するだけで、さまざまな SoC プラットフォームをサポートできます。

HAL 拡張機能のメンテナンスをサポートし、これらの拡張機能で使用されるシステム リソースを管理するには、CSRT で説明されている各リソース グループも、プラットフォームの ACPI 名前空間内のデバイスとして表す必要があります。 詳細については、次の「差別化されたシステム記述テーブル (DSDT)」セクションを参照してください。 リソース グループ ヘッダーで使用されるデバイス識別子は、デバイスの名前空間ノードで使用される識別子と一致する必要があります。 詳細については、「デバイス管理名前空間オブジェクト」トピックの「ACPI でのデバイス識別」セクションを参照してください。 これらのリソース グループ名前空間デバイスが存在すると、HAL 拡張機能を Windows Update サービスで処理できます。

詳細については、 コア システム リソース テーブル (CSRT) の仕様を参照してください。

デバッグ ポート テーブル 2 (DBG2)

Microsoft では、すべてのシステムでデバッグ ポートが必要です。 プラットフォームに組み込まれているデバッグ ポートを説明するために、Microsoft は ACPI のデバッグ ポート テーブル 2 (DBG2) を定義します。 次の表では、デバッグ目的で 1 つ以上の独立したポートを指定します。 DBG2 テーブルが存在すると、プラットフォームに少なくとも 1 つのデバッグ ポートが含まれています。 この表には、デバッグ ポートの ID と構成に関する情報が含まれています。 テーブルは、他の ACPI テーブルと共にシステム メモリ内にあり、ACPI RSDT テーブルで参照する必要があります。

Windowsは、DBG2 テーブルのポートの種類の値を使用して、システムに必要なカーネル デバッガー (KD) トランスポート (USB やシリアルなど) を識別して読み込みます。 その後、KD トランスポートは、DBG2 テーブルのポート サブタイプ値を使用して、ポートで使用されるハードウェア インターフェイスを識別します。 DBG2 テーブル内のその他の情報は、ポート レジスタのシステム アドレスを指定します。これは、指定されたサブタイプに対してハードウェア インターフェイス モジュールによって使用されます。 最後に、DBG2 テーブルには、デバッグ ポートに対応する ACPI 名前空間内のデバイス ノードへの参照を含める必要があります。 このリファレンスを使用すると、Windows デバッグの使用とデバイスの通常の使用 (存在する場合) の間の競合を管理したり、デバッガーを電源切り替えと統合したりすることもできます。

詳細については、 Microsoft デバッグ ポート テーブル 2 (DBG2) の仕様を参照してください。

差別化されたシステム記述テーブル (DSDT)

ACPI では、プラットフォーム上の周辺機器とシステム ハードウェア機能は、起動時に読み込まれる差別化システム記述テーブル (DSDT) または起動時に読み込まれるセカンダリ システム記述テーブル (SSDT) で説明されています。これらは、起動時に読み込まれるか、実行時に動的に読み込まれます。 SOC の場合、プラットフォーム構成は通常静的であるため、DSDT で十分な場合がありますが、SSDT を使用してプラットフォーム記述のモジュール性を向上させることもできます。

ACPI は、OS に依存しない方法でシステム デバイスと機能とそのプラットフォーム固有のコントロールを記述するための解釈言語 (ACPI ソース言語、または ASL) と実行環境 (ACPI 仮想マシン) を定義します。 ASL は、ACPI 名前空間で名前付きオブジェクトを定義するために使用され、Microsoft ASL コンパイラは、DSDT 内のオペレーティング システムに送信するための ACPI マシン言語 (AML) バイト コードを生成するために使用されます。 ACPI ドライバー Windows受信トレイ (Acpi.sys) は、ACPI 仮想マシンを実装し、AML バイト コードを解釈します。 AML オブジェクトは、単に説明情報を返す場合があります。 または、AML オブジェクトは、計算を実行するメソッド、または I/O 操作を実行するメソッドである可能性があります。 コントロール メソッドは、オペレーティング システムのデバイス ドライバーを使用してプラットフォーム ハードウェアで I/O 操作を実行する実行可能なAML オブジェクトです。 ASL は OpRegions を使用して、オペレーティング システムでアクセス可能なさまざまなアドレス空間を抽象化します。 制御メソッドは、OpRegions で宣言された名前付きフィールドとの間の一連の転送として I/O 操作を実行します。

OpRegions の詳細については、ACPI 5.0 仕様の「操作リージョンへのアクセス」のセクション 5.5.2.4 を参照してください。 ASL と制御方法の詳細については、ACPI 5.0 仕様の「ACPI 名前空間」セクション 5.5 を参照してください。

Windowsは、ASL コードの開発とデバッグをサポートします。 ASL コンパイラには、実装者がデバッグ ターゲットから名前空間を読み込むのを可能にする逆アセンブラーが含まれています。 ASL コンパイラを使用すると、システム ファームウェアをフラッシュすることなく、迅速なプロトタイプ作成とテストのために名前空間をターゲットに再適用できます。 さらに、Windows カーネル デバッガーは、Acpi.sys ドライバーのチェック済み (CHK) バージョンと組み合わせて、AML実行のトレースと分析をサポートします。 詳細については、「 AMLI デバッガー」を参照してください。

Windows SMM セキュリティ軽減策テーブル (WSMT)

Windows SMM Security Mitigations Table (WSMT) の仕様には、Advanced Configuration and Power Interface (ACPI) テーブルの詳細が記載されています。このテーブルは、Windows の仮想化ベースのセキュリティ (VBS) 機能をサポートする Windows オペレーティング システムで使用するために作成されたものです。

このドキュメントに記載された情報の対象となるオペレーティング システムは次のとおりです。

Windows Server 2016

Windows 10 Version 1607

詳細については、Windows SMM セキュリティ軽減策テーブル (WSMT) 仕様 (DOCX ダウンロード) を参照してください。

iSCSI ブート ファームウェア テーブル (iBFT)

iSCSI ブート ファームウェア (iBF) テーブル (iBFT) は、iSCSI ブート プロセスに役立つさまざまなパラメーターを含む情報のブロックです。 iBFT は、iBF パラメーター値をオペレーティング システムに伝達するメカニズムです。 iBF は iBFT をビルドして入力します。 iBFT は、ブート プロセスの一貫したフローを有効にするために、Windows オペレーティング システムで使用できます。

詳細については、 iSCSI ブート ファームウェア テーブル (iBFT) 仕様 (DOCX ダウンロード) を参照してください。