デバイス電源管理フレームワークは、デバイスがエクスポートする pm-components プロパティーに基づいて、そのデバイスがサポートする電源レベルを認識します。電源レベルの値は正の整数である必要があります。電源レベルの解釈はデバイスドライバの開発者が決定します。pm-components プロパティーに、増分が一定の昇順で電源レベルを列挙する必要があります。電源レベル 0 は「オフ」としてフレームワークに解釈されます。依存関係に従ってフレームワークがデバイスの電源を入れる必要があるとき、フレームワークは各部品を最高の電源レベルに設定します。
次の例は、ドライバの .conf ファイルの pm-components エントリを示します。このエントリは、1 個のディスクスピンドルモーターで構成される、電源管理に対応した単一部品を実装します。ディスクスピンドルモーターは部品 0 です。スピンドルモーターは 2 段階の電源レベルをサポートします。各レベルは「停止」と「全速回転」を表します。
使用例 12-1 pm-component エントリの例pm-components="NAME=Spindle Motor", "0=Stopped", "1=Full Speed";
次の例は、ドライバの attach() ルーチンでExample 12–1 を実装する方法を示します。
使用例 12-2 pm-components プロパティーを使用した attach (9E) ルーチンstatic char *pmcomps[] = { "NAME=Spindle Motor", "0=Stopped", "1=Full Speed" }; /* ... */ xxattach(dev_info_t *dip, ddi_attach_cmd_t cmd) { /* ... */ if (ddi_prop_update_string_array(DDI_DEV_T_NONE, dip, "pm-components", &pmcomp[0], sizeof (pmcomps) / sizeof (char *)) != DDI_PROP_SUCCESS) goto failed; /* ... */
次の例は、2 つの部品を実装するフレームバッファーを示します。部品 0 は、4 段階の電源レベルをサポートするフレームバッファー電子回路です。部品 1 は、接続されたモニターの電源管理の状態を表します。
使用例 12-3 複数部品の pm-components エントリpm-components="NAME=Frame Buffer", "0=Off", "1=Suspend", \ "2=Standby", "3=On", "NAME=Monitor", "0=Off", "1=Suspend", "2=Standby", "3=On";
デバイスドライバが最初に接続された時点で、フレームワークはデバイスの電源レベルを認識していません。次のタイミングで電源遷移が発生する可能性があります。
ドライバがpm_raise_power (9F) またはpm_lower_power (9F) を呼び出す。
時間しきい値を超過したため、フレームワークが部品の電源レベルを下げた。
このデバイスとの間に依存関係が存在する別のデバイスの電源レベルが変化した。Power Management Dependencies を参照してください。
電源遷移のあとで、フレームワークはデバイスの各部品の電源レベルの追跡を開始します。ドライバが電源レベルをフレームワークに通知した場合にも追跡が行われます。ドライバは pm_power_has_changed(9F) を呼び出すことによって、電源レベルの変化をフレームワークに通知します。
システムは、起きる可能性のある電源遷移ごとにデフォルトのしきい値を計算します。これらのしきい値はシステムのアイドル状態しきい値に基づいています。部品の電源レベルが不明なときは、システムのアイドル状態しきい値に基づく別のデフォルトしきい値が使用されます。