EN JA
ACPI(4)
ACPI(4) FreeBSD Kernel Interfaces Manual ACPI(4)

名称

acpi高度な設定と電源管理サポート

書式

device acpi


options ACPI_DEBUG
options DDB

解説

acpi ドライバは、Intel/Microsoft/Compaq/Toshiba ACPI 規格のサポートを行います。このサポートは、電源管理 (APM に取って代わる) と他の機能と同様に、 (PnP と PCI BIOS に取って代わる) プラットフォームハードウェア発見を含んでいます ACPI コアサポートは、Intel の ACPI CA 参照実装によって提供されます。

acpi ドライバは、 loader(8) によって自動的にロードされ、 ACPI が強制的であるプラットフォームでは、カーネル中に組み込まれるべきでないことに注意してください。

SYSCTL 変数

acpi ドライバは、ユーザの介入なしで電源管理を提供することを目的としています。デフォルト設定が最適でないなら、 acpi の振る舞いを変更するか、またはモニタするために、次の sysctl を使用することができます。
debug.acpi.enable_debug_objects
options ACPI_DEBUG なしで Debug オブジェクトのダンプを有効にします。デフォルトは、0 で、Debug オブジェクトを無視します。
hw.acpi.acline
AC (交流) 配線状態 (1 は、オンラインを意味し、0 は、バッテリ電源を意味します)。
hw.acpi.cpu.cx_usage
それぞれのスリープ状態の総使用のパーセントをリストするデバッグ情報です。 hw.acpi.cpu.cx_lowest が変更されるとき、値は、リセットされます。
hw.acpi.cpu.cx_lowest
CPU のアイドリングのために使用する最も低い Cx 状態です。スケジューリングアルゴリズムは、システムロード指示のように C1 とこの設定の間の状態を選択します。 ACPI CPU アイドリング制御を有効にするためには、 machdep.idle_available でリストされるなら、 machdep.idle は、 acpi に設定されるべきです。
hw.acpi.cpu.cx_supported
サポートされた CPU のアイドル状態とマイクロ秒単位の遷移レイテンシ (待ち時間) のリストです。各状態には、タイプ (例えば、 C2) があります。 C1 は、ia32 HLT 命令と同等であり、 C2 は、同じセマンティクスでより深いスリープを提供し、 C3 は、最も深いスリープを提供しますが、さらに、無効にされるバスマスタを必要とします。 C3 より大きい状態は、 C3 状態と同じセマンティクスでさらなる省電力を提供します。より深いスリープは、割り込みが発生するとき、より多い省電力を提供しますが、遷移レイテンシが増加します。
hw.acpi.disable_on_reboot
リブートプロセスの間 ACPI を無効にします。ほとんどのシステムは、ACPI がまだ有効にされている状態で見事にリブートしますが、あるものは、最初にレガシ (古い) モードを出ることを必要とします。デフォルトは、0 で、ACPI を有効にした状態から抜けます。
hw.acpi.handle_reboot
システムをリブートする ACPI Reset Register 機能を使用します。いくつかの新しいシステムは、このレジスタの使用を必要としますが、あるものは、レガシリブートをサポートしている状態で動作しているだけです。
hw.acpi.lid_switch_state
ふたのスイッチ (すなわち、ノートブックのスクリーン) が閉じられるときに入るために、状態 ( S1S5) をサスペンドします。デフォルトは、“ NONE” (何もしない) です。
hw.acpi.power_button_state
電源ボタンが押されるときに入るために、状態 ( S1S5) をサスペンドします。デフォルトは、 S5 (うまく電源オフ) です。
hw.acpi.reset_video
レジュームパスの間にリアルモードからビデオアダプタをリセットします。いくつかのシステムは、この助けを必要として、他のものは、それが有効にされるなら、ディスプレイの問題があります。デフォルトは、0 (無効) です。
hw.acpi.s4bios
システムが S4BIOS をサポートするかどうかを示します。これは、BIOS がシステムをディスクにサスペンドするすべての機能を取り扱うことができることを意味します。そうでなければ、OS は、ディスク ( S4OS) へのサスペンドに対して責任があります。ほとんどの現在のシステムは、 S4BIOS をサポートしません。
hw.acpi.sleep_button_state
スリープボタンが押されるときに入るために、状態 ( S1S5) をサスペンドします。通常、これは、キーボード上の特有のファンクションボタンです。デフォルトは、 S3 (RAM にサッスペンドする) です。
hw.acpi.sleep_delay
システムをサスペンドする準備と実際にサスペンド状態に入ることの間にこの数の秒数をウェート (待つ) します。デフォルトは、1 秒です。
hw.acpi.supported_sleep_state
BIOS によってサポートされた状態 ( S1S5) をサスペンドします。
S1
RAM にクィックサスペンドします。 CPU は、低電源状態に入りますが、ほとんどの周辺機器は、実行したままです。
S2
S1 よりも低電源状態ですが、同じ基本的な特性があります。多くのシステムで、サポートされていません。
S3
RAM にサスペンドします。ほとんどのデバイスは、電源がオフされ、システムは、メモリリフレッシュを除いて、実行を停止します。
S4
ディスクにサスペンドします。すべてのデバイスは、電源オフされ、システムは、実行を停止します。再開するとき、システムは、まるでコールド (冷たい) 電源オンからのように開始します。 S4BIOS が利用可能でないなら、 FreeBSD によってまだサポートされていません。
S5
システムは、手際良くシャットダウンして、電源をオフします。
hw.acpi.verbose
様々な ACPI サブシステムから冗長な印刷 (表示) を有効にします。

調整変数

調整変数は、カーネルをブートする前に loader(8) プロンプトで設定するか、または /boot/loader.conf に格納して設定することができます。また、これらの調整変数の多くには、ブートの後のアクセスのための適合する sysctl(8) エントリがあります。
acpi_dsdt_load
カスタム ACPI DSDT のロードを有効にします。
acpi_dsdt_name
ローディングが有効であるなら、ロードする DSDT テーブルの名前です。
debug.acpi.cpu_unordered
ACPI プロセッサオブジェクトと CPU に一致する MADT を使用しません。これは、一貫性のあるプロセッサ ID を使用しないバグの多い BIOS があるわずかなシステムで必要です。デフォルトは、0 (無効) です。
debug.acpi.disabled
デバッグ目的の ACPI の一部を選択的に無効にします。
debug.acpi.interpreter_slack
厳密さが少ない ACPI 実装を有効にします。デフォルトは、1 で、一般的な BIOS の誤りを無視します。
debug.acpi.max_threads
ブート時に開始されるタスクスレッドの数を指定します。これを 1 に制限することは、パラレル要求を扱うことができない様々な BIOS の周りの動作に役立つかもしれません。デフォルト値は、3 です。
debug.acpi.quirks
あらゆる自動的な特異行動を完全に上書きします。
debug.acpi.resume_beep
レジュームで PC スピーカを鳴らします。これは、サスペンド/レジュームの問題の診断を手助けできます。デフォルトは、0 (無効) です。
hint.acpi.0.disabled
ACPI のすべてを無効にするためには、これに 1 を設定します。使用している BIOS がブラックリストに登録されているために ACPI が利用者のシステムで無効にされたなら、テストのために ACPI を再有効にするように 0 に設定することができます。
hw.acpi.ec.poll_timeout
EC の応答を待つ、ミリ秒単位のディレイです。エラー“ AE_NO_HARDWARE_RESPONSE”を得るなら、この数を増加させてみてください。
hw.acpi.host_mem_start
PCI ホストブリッジへの仮定されたメモリ開始アドレスを上書きします。
hw.acpi.install_interface, hw.acpi.remove_interface
_OSI’問い合わせメソッドの返り値を制御するために、(複数の) OS インタフェースをインストールするか、または削除します。 OS インタフェースが hw.acpi.install_interface で指定されるとき、 _OSI は、それが サポートされる インタフェースのリターンについて問い合わせます。逆に、OS インタフェースが hw.acpi.remove_interface で指定されるとき、 _OSI は、それが サポートされない リターンについて問い合わせます。コンマで区切られたリストで複数のインタフェースを指定することができ、任意の先導する空白類は、無視されます。例えば、“ FreeBSD, Linux”は、2 つのインタフェース“ FreeBSD”と“ Linux”の有効なリストです。
hw.acpi.reset_video
レジュームパスで VESA リセット BIOS ベクトルの呼び出しを有効にします。これは、レジュームの後の LCD ホワイトアウトのような問題を持っているいくつかのグラフィックカードの問題を解決することができます。デフォルトは、0 (無効) です。
hw.acpi.serialize_methods
メソッドがパラレルで実行されてもそうでなくても上書きすることを許します。本当にパラレルメソッド実行を操作できない AML のための“ AE_ALREADY_EXISTS”エラーを修正する、連続している振る舞いによってこれを有効にします。これがリカーシブメソッドを中断するので、それは、デフォルトでオフです、そして、いくつかの IBM がそのようなコードを使用します。
hw.acpi.verbose
ACPI が行っていることに関する冗長なデバッグ情報をオンにします。
hw.pci.link.%s.%d.irq
このリンクとインデックスに使用する割り込みを上書きします。デバイスが acpi が有効にされている状態で動作していない場合にだけ、この機能は、慎重に使用されるべきです。“%s”は、リンクの名前です (例えば、 LNKA)。“%d”は、リンクが複数の IRQ をサポートするとき、リソースインデックスです。ほとんどの PCI リンクには、1 つの IRQ リソースしかないので、次の形式が使用されるべきです。
hw.pci.link.%s.irq
使用する割り込みを上書きします。デバイスが acpi が有効にされている状態で動作していない場合にだけ、この機能は、慎重に使用されるべきです。“%s”は、リンクの名前です (例えば、LNKA)。

ACPI を無効にする

ACPI は、大変違う異なったプラットフォームでサポートされるので、多くのデバッグと利用可能な調整オプションがあります。

acpi が有効にされている状態で働かないのが知られているマシンの、 BIOS のブラックリストがあります。現在、ブラックリストは、 acpi を無効にすべきかどうかだけを制御するだけです。将来、機能を制御する多くの精度があるようになるでしょう (それのための基盤は、既にあります)。

ブラックリストにあるマシンで (デバッグ目的などのために) acpi を有効にするためには、カーネル環境変数 hint.acpi.0.disabled に 0 を設定します。これを試みる前に、BIOS を ACPI と互換性があるより最近のバージョンにアップデートすることを検討してください。

acpi ドライバを完全に無効にするためには、カーネル環境変数 hint.acpi.0.disabled に 1 を設定してください。

いくつかの i386 マシンは、全体的にいくつかの操作が失敗するか、すべての ACPI が無効となっています。他の i386 マシンは、ACPI が有効にされている状態で失敗します。非 i386 プラットフォーム (すなわち、ACPI サポートが強制的であるプラットフォーム) の ACPI のすべてか一部を無効にすると、システムが機能しなくなる結果となるかもしれません。

acpi ドライバは、問題の場合に選択的に無効にされるかもしれない、 1 組のドライバより成ります。サブドライバを無効にするには、カーネル環境変数 debug.acpi.disabled でそれをリストアップします。複数のエントリは、空白で区切られたリストにすることができます。

無効にすることができる ACPI サブデバイスと機能は、次の通りです:

all
すべての ACPI の機能とデバイスを無効にします。
acad
( デバイス) AC アダプタをサポートします。
bus
( 機能) サブデバイスをプローブしてアタッチします。無効にすれば、全体の ACPI 名前空間をスキャンするのを避けます。
children
( 機能) 標準の ACPI サブドライバと ACPI 名前空間に列挙されたデバイスをアタッチします。これを無効にすることは、ACPI 名前空間がまだスキャンされることを除いて、“ bus”を無効にする影響と同様です。
button
( デバイス) ACPI のボタンデバイス (通常電源とスリープボタン) をサポートします。
cmbat
( デバイス) バッテリデバイスの制御メソッドです。
cpu
( デバイス) CPU の省電力と速度設定機能をサポートします。
ec
( デバイス) 組み込みプラットフォームコントローラで通信するために使われる ACPI 組み込み制御インタフェースをサポートします。
isa
( デバイス) 通常、PCI バスの子供となる、ACPI 名前空間で定義された ISA バスブリッジをサポートします。
lid
( デバイス) 通常システムをスリープ状態とする、 ACPI ラップトップのふたのスイッチをサポートします。
quirks
( 機能) クワーク (特異な行動) に敬意をはらいません。クワークは、XSDT テーブルの OEM ベンダ名とリビジョン日付に基づいて ACPI 機能を自動的に無効にします。
pci
( デバイス) ホストから PCI ブリッジをサポートします。
pci_link
( 機能) PCI 割り込みルーティングを実行します。
sysresource
( デバイス) ACPI が要求するリソースを含む疑似デバイス。
thermal
( デバイス) システム冷却と熱管理をサポートします。
timer
( デバイス) ACPI 固定周波数タイマを使用するタイムカウンタを実装します。
video
( デバイス) agp(4) デバイスと衝突するかもしれない acpi_video(4) をサポートします。

また、カーネル環境変数 debug.acpi.avoid で避けられる領域のルートのフルパスをリストすることによって、問題を起こすかもしれない ACPI 名前空間の部分を避けることが可能です、子供のオブジェクトとすべては、名前空間のバス/子供スキャンの間に、無視されます。 ACPI CA コードは、避けられた領域に関してまだ知っています。

デバッグ出力

デバッグ出力を有効にするためには、 acpi は、 options ACPI_DEBUG でコンパイルされなければなりません。デバッグ出力は、レイヤとレベルを区別します。ここで、レイヤは、ACPI サブシステムの構成要素であり、レベルは、デバッグ出力の特定の種類です。

レイヤとレベルの両方は、レイヤは、 debug.acpi.layer にレベルは、 debug.acpi.level でリストされる、空白類で切り離されたトークンのリストとして指定されます、

最初のレイヤのセットは、ACPI-CA コンポーネントのためのもので、2 番目は、 FreeBSD ドライバのためのものです。 ACPI-CA レイヤは、それらが参照するファイルの接頭辞を含んで記述されています。サポートされるレイヤは、次の通りです:

ACPI_UTILITIES
ユーティリティ関数 ("ut")
ACPI_HARDWARE
ハードウェアアクセス ("hw")
ACPI_EVENTS
イベントと GPE ("ev")
ACPI_TABLES
テーブルアクセス ("tb")
ACPI_NAMESPACE
名前空間評価 ("ns")
ACPI_PARSER
AML パーサ (構文解析) ("ps")
ACPI_DISPATCHER
インタプリタ状態の内部表現 ("ds")
ACPI_EXECUTER
AML メソッドを実行する ("ex")
ACPI_RESOURCES
リソース構文解析 ("rs")
ACPI_CA_DEBUGGER
デバッガの実装 ("db", "dm")
ACPI_OS_SERVICES
ユーザモードサポートルーチン ("os")
ACPI_CA_DISASSEMBLER
逆アセンブラの実装 (未使用)
ACPI_ALL_COMPONENTS
すべての上記の ACPI-CA コンポーネント
ACPI_AC_ADAPTER
AC アダプタドライバ
ACPI_BATTERY
コントロールメソッドバッテリドライバ
ACPI_BUS
ACPI, ISA と PCI バスドライバ
ACPI_BUTTON
電源とスリープボタンドライバ
ACPI_EC
組み込みコントローラドライバ
ACPI_FAN
ファンドライバ
ACPI_OEM
ホットキー、LED などのためのプラットフォーム特有のドライバ
ACPI_POWER
電源リソースドライバ
ACPI_PROCESSOR
CPU ドライバ
ACPI_THERMAL
温度ゾーンドライバ
ACPI_TIMER
タイマドライバ
ACPI_ALL_DRIVERS
すべての上記の FreeBSD ACPI ドライバ

サポートされるレベルは、次の通りです:

ACPI_LV_INIT
初期化進行状況
ACPI_LV_DEBUG_OBJECT
オブジェクトへの格納
ACPI_LV_INFO
一般的情報と進行状況
ACPI_LV_REPAIR
あらかじめ定義された方法で共通の問題を修理します
ACPI_LV_ALL_EXCEPTIONS
すべての前記のレベル
ACPI_LV_PARSE
ACPI_LV_DISPATCH
ACPI_LV_EXEC
ACPI_LV_NAMES
ACPI_LV_OPREGION
ACPI_LV_BFIELD
ACPI_LV_TABLES
ACPI_LV_VALUES
ACPI_LV_OBJECTS
ACPI_LV_RESOURCES
ACPI_LV_USER_REQUESTS
ACPI_LV_PACKAGE
ACPI_LV_VERBOSITY1
すべての前記のレベル
ACPI_LV_ALLOCATIONS
ACPI_LV_FUNCTIONS
ACPI_LV_OPTIMIZATIONS
ACPI_LV_VERBOSITY2
すべての前記のレベル
ACPI_LV_ALL
ACPI_LV_VERBOSITY2”と同義語
ACPI_LV_MUTEX
ACPI_LV_THREADS
ACPI_LV_IO
ACPI_LV_INTERRUPTS
ACPI_LV_VERBOSITY3
すべての前記のレベル
ACPI_LV_AML_DISASSEMBLE
ACPI_LV_VERBOSE_INFO
ACPI_LV_FULL_TABLES
ACPI_LV_EVENTS
ACPI_LV_VERBOSE
すべての“ ACPI_LV_VERBOSITY3”後のレベル
ACPI_LV_INIT_NAMES
ACPI_LV_LOAD

適切なレイヤとレベル値の選択は、大量のデバッグ出力を避けるために重要です。例えば、次の設定は、初期の情報を集める良い方法です。 ACPI-CA とエラー、警告と進捗状況に関する基本情報を印刷 (表示) する、 acpi ドライバの両方のためのデバッグ出力を有効にします。

debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" 
debug.acpi.level="ACPI_LV_ALL_EXCEPTIONS"

ACPI CA サブシステムによるデバッグ出力は、小文字でモジュール名が前に付けられ、ソース行番号が続きます。 FreeBSD のローカルコードからの出力は、同じ形式で続きますが、モジュール名は、大文字にされます。

利用者の BIOS のバイトコードを上書きする

ACPI は、ブート時にメモリイメージとして BIOS ベンダによって提供された AML (ACPI Machine Language (マシン言語)) というバイトコードを解釈します。時々、AML コードは、マイクロソフト実装によって解析されるときに現れないバグを含んでいます。 FreeBSD は、そのような問題の回避方法、またはデバッグするために利用者自身の AML コードを上書きする方法を提供します。利用者の DSDT と任意の SSDT テーブルのすべての AML も上書きされることに注意してください。

利用者 AML コードをロードするためには、 /boot/loader.conf を編集して、次の行を入れなければなりません。

acpi_dsdt_load="YES" 
acpi_dsdt_name="/boot/acpi_dsdt.aml" # この名前は変更できます。

利用者の AML コードを準備するためには、 acpidump(8)iasl(8) ユーティリティ、および何らかの ACPI 知識を必要とします。

互換性

ACPI は、i386/ia32、ia64 と amd64 で見つけられ、サポートされます。

関連項目

kenv(1), acpi_thermal(4), device.hints(5), loader.conf(5), acpiconf(8), acpidump(8), config(8), iasl(8) Compaq Computer Corporation, Intel Corporation, Microsoft Corporation, Phoenix Technologies Ltd., and Toshiba Corporation, Advanced Configuration and Power Interface Specification, http://acpi.info/spec.htm, August 25, 2003.

作者

ACPI CA サブシステムは、Intel Architecture Labs によって開発されて保守されています。

次の人々は、 FreeBSD の ACPI サブシステムに顕著な貢献を行いました: Michael Smith, Takanori Watanabe <takawata@jp.FreeBSD.org>, Mitsuru IWASAKI <iwasaki@jp.FreeBSD.org>, Munehiro Matsuda, Nate Lawson, ACPI-jp メーリングリスト<acpi-jp@jp.FreeBSD.org>と、多くの他の貢献者。

このマニュアルページは、 Michael Smith <msmith@FreeBSD.org>によって書かれました。

バグ

多くの BIOS バージョンには、システムの不安定性、サスペンド/レジュームの中断、またはデバイスが IRQ 経路制御 (ルーティング) 問題のための適切に動作することから防ぐことを引き起こすかもしれない重大なバグがあります。 acpi の問題が決定的になる前に利用者の BIOS をベンダから利用可能な最新版にアップグレードしてください。

acpi の CPU のアイドル電源管理ドライブは、ローカル APIC (LAPIC) タイマと衝突します。 hint.apic.0.clock=0 でローカル APIC タイマを無効にするか、またはローカル APIC タイマが有効にされているなら、 C3 とより深い状態を使用しないでください。

August 16, 2012 FreeBSD