Serial Port Console Redirection Table (SPCR)

このドキュメントでは、Serial Port Console Redirection Table の内容を定義します。 このテーブルは、シリアル ポートや非レガシ UART インターフェイスを Microsoft® Windows® 緊急管理サービス (EMS) で使用できるかどうかを示すために使用されます。

このテーブルは、シリアル ポートまたは非レガシ UART インターフェイスの構成と使用に関する情報を提供します。 BIOS またはシステム ファームウェアがシリアル ポートを使用してコンソールの入出力を行うシステムでは、設定に関する情報を伝達し、ファームウェア コンソールの出力と Windows EMS 出力の間の移行を円滑なものにするために、このテーブルを使用する必要があります。

このテーブルは、他の ACPI テーブルと一緒にシステム メモリに配置し、ACPI RSDT テーブルで参照されている必要があります。

特許通知: Microsoft は、以下の 2 つのオプションのいずれかに基づいて、特定の特許権を利用してこの仕様を実装することを認めています。

  1. https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx で入手可能な Microsoft の Community Promise
  2. 2012 年 10 月 1 日の時点で Open Web Foundation の Web サイトで入手可能な Open Web Foundation Final Specification Agreement Version 1.0 ("OWF 1.0")
フィールド バイト長 バイト オフセット 説明
ヘッダー
署名 4 0 "SPCR"。 Serial Port Console Redirection Table の署名です。
Length 4 4 NamespaceString を含む Serial Port Console Redirection Table 全体の長さ (バイト単位) です。
リビジョン 1 8 現在のテーブル リビジョンは 4 です。
チェックサム 1 9 テーブル全体の合計を 0 にする必要があります。
OEM ID 6 10 OEM (相手先商標製品製造業者) ID です。
OEM Table ID (OEM テーブル ID) 8 16 Serial Port Console Redirection Table では、テーブル ID は製造元モデル ID になります。
OEM Revision (OEM リビジョン) 4 24 提供された OEM テーブル ID に対応する Serial Port Console Redirection Table の OEM リビジョンです。
Creator ID 4 28 テーブルを作成したユーティリティのベンダー ID です。
Creator Revision (作成者リビジョン) 4 32 テーブルを作成したユーティリティのリビジョンです。
インターフェイスの種類 1 36 レジスタ インターフェイスの種類を表します。
リビジョン 1 の場合:
  • 0 = 完全な 16550 インターフェイス
  • 1 = 完全な 16450 インターフェイス (16550 FCR レジスタへの書き込みにも対応できる必要があります)
  • 2 から 255 = 予約済み
リビジョン 2 以降の場合:
DBG2 仕様」の表 3 のシリアル ポート サブタイプを参照してください。
予約されています。 3 37 0 を指定する必要があります。
ベース アドレス 12 40 ACPI 汎用アドレス構造体を使用して記述されたシリアル ポート レジスタ セットのベース アドレスです。コンソールのリダイレクトが無効になっている場合は 0 になります。

:
COM1 (0x3F8) は次のようになります。
  • 整数形式: 0x 01 08 00 00 00000000000003F8
  • メモリ内表現: 0x01080000F803000000000000
COM2 (0x2F8) は次のようになります。
  • 整数形式: 0x 01 08 00 00 00000000000002F8
  • メモリ内表現: 0x01080000F802000000000000
Interrupt Type (割り込みの種類) 1 52 UART で使用される割り込みの種類です。
  • Bit[0]: PC-AT 互換デュアル 8259 IRQ 割り込み
  • Bit[1]: I/O APIC 割り込み (Global System Interrupt)
  • Bit[2]: I/O SAPIC 割り込み (Global System Interrupt)
  • Bit[3]: ARMH GIC 割り込み (Global System Interrupt)
  • Bit[4]: RISC-V PLIC/APLIC 割り込み (Global System Interrupt)
  • Bit[5 から 7]: 予約済み (0 に設定する必要があります)
場所
  • 0 = サポート対象外
  • 1 = サポート対象
記述したインターフェイスがポーリングされた操作のみをサポートしている場合は、このフィールドを 0 に設定します。
デュアル 8259 と I/O APIC か I/O SAPIC をどちらも使用するプラットフォームでは、IRQ ビット (Bit[0]) と対応する Global System Interrupt ビット (たとえば 8259 と SAPIC をサポートするシステムは 5) を設定する必要があります。
IRQ 1 53 UART によって使用される PC-AT 互換 IRQ です。
  • 2 から 7、9 から 12、14 から 15 = それぞれ有効な IRQ
  • 0 から 1、8、13、16 から 255 = 予約済み
Interrupt Type (割り込みの種類) フィールドの Bit[0] が設定されている場合にのみ有効です。
Global System Interrupt 4 54 UART によって使用される Global System Interrupt (GSI) です。
Interrupt Type フィールドの Bit[1 から 7] が 0 の場合は無効です。
ビット 3 の Interrupt Type フィールドが設定されている場合 (ARMH GIC)、Arm GIC 割り込みコントローラーが使用されます。 UART では Arm GIC SGI 割り込みと PPI 割り込みは使用できないため、このフィールドを {0、...、31} または {1056,..., 1119} の任意の値に設定することは禁止されています。
Configured Baud Rate (設定されたボー レート) 1 58 リダイレクトに使用される BIOS のボー レートです。
  • 0 = 現状どおり、オペレーティング システムは、完全な機能を備えたドライバーが初期化されるまでシリアル ポートの現在の構成に依存します。
  • 3 = 9600
  • 4 = 19200
  • 6 = 57600
  • 7 = 115200
  • 1 から 2、5、8 から 255 = 予約済み
パリティ 1 59
  • 0 = パリティなし
  • 1 から 255 = 予約済み
Stop Bits (ストップ ビット) 1 60
  • 1 = 1 ストップ ビット
  • 0、2 から 255 = 予約済み
フロー制御 1 61
  • Bit[0]: 送信に DCD が必要
  • Bit[1]: RTS/CTS ハードウェア フロー制御
  • Bit[2]: XON/XOFF ソフトウェア制御
  • Bit[3 から 7]: 予約済み、0 である必要があります
Terminal Type (ターミナルの種類) 1 62 BIOS がコンソール リダイレクトに使用していたターミナル プロトコルです。
  • 0 = VT100
  • 1 = 拡張 VT100 (VT100+)
  • 2 = VT-UTF8
  • 3 = ANSI
  • 4 から 255 = 予約済み
Language 1 63 BIOS がリダイレクトしていた言語です。 0 を指定する必要があります。
PCI Device ID (PCI デバイス ID) 2 64 ヘッドレス ポートとして使用される UART が含まれる PCI デバイスのデバイス ID を指定します。
PCI デバイスでない場合は、0xFFFF にする必要があります。
PCI Vendor ID (PCI ベンダー ID) 2 66 ヘッドレス ポートとして使用される UART が含まれる PCI デバイスのベンダー ID を指定します。
PCI デバイスでない場合は、0xFFFF にする必要があります。
PCI Bus Number (PCI バス番号) 1 68 テーブルに PCI デバイスが記述されている場合の PCI バス番号です。
PCI デバイスでない場合は、0x00 にする必要があります。
PCI Device Number (PCI デバイス番号) 1 69 テーブルに PCI デバイスが記述されている場合の PCI デバイス番号です。
PCI デバイスでない場合は、0x00 にする必要があります。
PCI Function Number (PCI 関数番号) 1 70 テーブルに PCI デバイスが記述されている場合の PCI 関数番号です。
PCI デバイスでない場合は、0x00 にする必要があります。
PCI Flags (PCI フラグ) 4 71 PCI 互換性フラグのビットマスクです。 既定で 0 になっているはずです。
  • Bit[0]: オペレーティング システムによる PNP デバイス列挙の阻止や、このデバイスの電源管理の無効化を禁止します。 PCI デバイスでない場合は、0 にする必要があります。
  • Bit[1 から 31]: 予約済み、0 である必要があります
PCI Segment 1 75 PCI のセグメント番号です。

PCI バスが 255 未満のシステムでは、この数は 0 である必要があります。

UART Clock Frequency (UART クロック周波数) 4 76 リビジョン 2 以下の場合:
  • 0 を指定する必要があります。
リビジョン 3 以降の場合:
  • 0 は、UART クロック周波数が不確定であることを表します。
  • 0 以外の値は、Hz 単位の UART クロック周波数を表します。
Precise Baud Rate (正確なボー レート) 4 80 Configured Baud Rate フィールドの値をオーバーライドする、0 以外の具体的なボー レートが入力されます。 このフィールドが 0 または未入力の場合は、設定されたボー レートが使用されます。 下記の「注意」を参照。
NamespaceStringLength 2 84 NUL 文字を含む、NamespaceString の長さ (バイト単位) です。
NamespaceStringOffset 2 86 この構造体の先頭からフィールド NamespaceString[] までのオフセット (バイト単位) です。 この文字列が存在する必要があるため、この値は有効である必要があります。
NamespaceString[] NamespaceStringLength NamespaceStringOffset このデバイスを一意に識別するための、NUL で終わる ASCII 文字列です。 この文字列は、ACPI 名前空間でこのデバイスを表すオブジェクトへの完全修飾参照で構成されます。 名前空間デバイスが存在しない場合、NamespaceString[] には "." (ASCII ピリオド) を 1 文字のみ含める必要があります。

ボー レート フィールドについての注意事項

SPCR テーブルを作成すると、それ以降 Configured Baud Rate フィールドは 1 バイト フィールドとして存在し、オペレーティング システムで広くサポートされるようになります。 ただし、列挙型であるため、高速 UART で使用されるものなど、従来とは異なるボー レートを正確に記述する機能には限界があります。 そこで追加されたのが、Precise Baud Rate フィールドです。このフィールドにより、ファームウェアは対応するオペレーティング システムに、特定のボー レート (1500000 など) を記述する DWORD 値を提供できるようになりました。 Precise Baud Rate フィールドに 0 以外の値が入力されていると、Configured Baud Rate フィールドは 0 になります。

リビジョン履歴

... 説明
2000/2/15 10. 作成済
2000/3/1 50. "SPCR" の 署名データを追加
2000/3/20 55. ポートと IRQ が含まれるかたちでデータを変更
2000/3/22 56. ポート識別を明確化、リダイレクトを無効にする機能を追加、 汎用レジスタ アドレス構造体へのポインターを追加
2000/3/23 .56a 書式設定、免責事項、コピー編集
2000/4/24 6. WinHEC 向けに Web へ投稿
2000/4/24 6. 公開レビューのドラフトを公開
2000/5/25 61. BASE_ADDRESS の説明を修正
2000/5/25 61. 公開レビューのドラフトを公開
2000/5/31 7. BASE_ADDRESS の説明/例を修正、 16540 インターフェイスを追加
2000/5/31 71. GRAS の情報を注から "*" に変更
2000/5/31 71. 公開レビューのドラフトを公開
2000/6/1 72. GRAS COM ポートの例をリトル エンディアンに変更、 行末にテキストを追加
2000/7/12 .75 IRQ の説明を修正、 さまざまな形式の問題を修正、PCI バス情報を追加
2000/7/26 .76 PCI フィールド名 "Device Number" を更新 冒頭の文章を非レガシ UART に言及するように変更
2000/8/10 .77 割り込み情報を変更、APIC と SAPIC を追加するフロー制御を追加
2000/9/22 .78 PCI セグメントを追加
2000/10/25 80。 PCI フラグのセクションを修正 ターミナルの種類を追加、16450 FCR 情報を追加
2001/10/1 .95 言語コードを削除
2002/1/11 1.00 ライセンス仕様を 1.00 に追加
2014/3/12 1.01 Microsoft Community Promise に基づいてリリース
2014/6/2 1.02 テーブルのリビジョンを 2 に変更、DBG2 仕様で定義されている追加のインターフェイスの種類のサポートを追加
2015/8/10 1.03 特許通知を更新
7/23/2018 1.04
2020/6/5 1.05 書式設定を編集
9/1/2020 1.06 書式設定を編集、DBG2 仕様へのリンクを更新
2021/2/17 1.07 Stop Bits (ストップ ビット) フィールドの不正確な説明を修正 誤って削除された Flow Control (フロー制御) フィールドを原状復帰、 書式設定を編集
2021/10/7 1.08 テーブルのリビジョンを 3 に変更、UART Clock Frequency (UART クロック周波数) のフィールドを作成 書式設定を編集
4/10/2023 1.09 テーブルのリビジョンを 4 に変更 Interrupt Type (割り込みの種類) フィールドに RISC-V とポーリングされたサポートを追加 新しいフィールドを追加: Precise Baud Rate、NamespaceStringLength、NamespaceStringOffset、NamespaceString[]
2023/5/1 1.10 Global System Interrupt (GSI) と UART Clock Frequency (クロック周波数フィールド) の表現を明確化