ACPI 通知

PEP の AcceptAcpiNotification コールバック ルーチンが受信するACPIの各通知は、通知の種類を示す Notification パラメーターと、指定した通知の種類の情報を含むデータ構造体を指す Data パラメーターを 1 つずつ伴います。

この呼び出しでは、Notification パラメーターは通知の種類を示す PEP_NOTIFY_ACPI_XXX 定数値に設定されます。 Data パラメーターは、この通知の種類に関連付けられている PEP_ACPI_XXX 構造体の種類を指します。

次の ACPI 通知 ID は、AcceptAcpiNotification 呼び戻しルーチンによって使用されます。

通知 ID 関連付けられた構造
PEP_NOTIFY_ACPI_PREPARE_DEVICE 0x01 PEP_ACPI_PREPARE_DEVICE
PEP_NOTIFY_ACPI_ABANDON_DEVICE 0x02 PEP_ACPI_ABANDON_DEVICE
PEP_NOTIFY_ACPI_REGISTER_DEVICE 0x03 PEP_ACPI_REGISTER_DEVICE
PEP_NOTIFY_ACPI_UNREGISTER_DEVICE 0x04 PEP_ACPI_UNREGISTER_DEVICE
PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE 0x05 PEP_ACPI_ENUMERATE_DEVICE_NAMESPACE
PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION 0x06 PEP_ACPI_QUERY_OBJECT_INFORMATION
PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD 0x07 PEP_ACPI_EVALUATE_CONTROL_METHOD
PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES 0x08 PEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES
PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES 0x09 PEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES

PEP_NOTIFY_ACPI_PREPARE_DEVICE

通知:PEP_NOTIFY_ACPI_PREPARE_DEVICEの値。 データ:デバイスを名前で識別するPEP_ACPI_PREPARE_DEVICE構造へのポインター。

PEP がデバイスに ACPI サービスを提供するかを選択できるようにします。

Windows ACPI ドライバーがデバイスの列挙中に ACPI 名前空間内の新しいデバイスを検出すると、Windows 電力管理フレームワーク (PoFx)はこの通知を送信します。 この通知は、AcceptAcpiNotification 呼び戻しルーチンを実装する PEP に送信されます。

PEP_NOTIFY_ACPI_PREPARE_DEVICE通知を送信するためには、PoFx は PEP の AcceptAcpiNotification ルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値はPEP_NOTIFY_ACPI_PREPARE_DEVICEで、データパラメーターはデバイスの名前を含むPEP_ACPI_PREPARE_DEVICE構造を指します。 PEP がこのデバイスの ACPI サービスを提供する準備ができている場合、PEP はこの構造の DeviceAccepted メンバーを TRUE に設定します。 このようなサービスの提供を拒否するために、PEP はこのメンバーをFALSEに設定します。

(DeviceAccepted = TRUE を設定することで)デバイスの ACPI サービスの提供準備ができたことを PEP が示した場合、PoFx は PEP に PEP_NOTIFY_ACPI_REGISTER_DEVICE通知を送信して、PEP をデバイスの ACPI サービスの唯一のプロバイダーとして登録することで応答します。 PoFxは、1つのPEPのみがデバイスの ACPI サービス プロバイダーの役割を要求すると想定しています。

ベストプラクティスとして、PEP_NOTIFY_ACPI_PREPARE_DEVICE通知に応答してデバイスの初期化を実行しないでください。 代わりに、デバイスのPEP_NOTIFY_ACPI_REGISTER_DEVICE通知を受信するか、デバイスに対して ACPI 制御メソッド (_INIなど) が呼び出されるまで、この初期化を延期します。

PEP_NOTIFY_ACPI_PREPARE_DEVICE通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVELで呼び出されます。

PEP_NOTIFY_ACPI_ABANDON_DEVICE

通知:PEP_NOTIFY_ACPI_ABANDON_DEVICE値。

データ:破棄されたデバイスを識別するPEP_ACPI_ABANDON_DEVICE構造へのポインター。

指定したデバイスが破棄され、PEP から ACPI サービスが不要になったことを PEP に通知します。

Windows 電源管理フレームワーク (PoFx) は、この通知を送信して、デバイスがオペレーティングシステムで使用されなくなったことを PEP に通知します。 PEP はこの通知を使用して、デバイスの状態を追跡するために割り当てた内部ストレージをクリーンできます。

PEP_NOTIFY_ACPI_ABANDON_DEVICE通知を送信するためには、PoFx は PEP の AcceptAcpiNotification 呼び戻しルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値がPEP_NOTIFY_ACPI_ABANDON_DEVICEで、データパラメーターはPEP_ACPI_ABANDON_DEVICE構造を指します。

PoFx は、前のPEP_NOTIFY_ACPI_PREPARE_DEVICE通知でデバイスに ACPI サービスを提供することを選択した PEP にのみこの通知を送信します。 PEP が以前のPEP_NOTIFY_ACPI_REGISTER_DEVICE通知でこれらのサービスを提供するように登録されている場合、PoFx はPEP_NOTIFY_ACPI_ABANDON_DEVICE通知を送信する前に、デバイスのPEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知を送信します。

PEP_NOTIFY_ACPI_ABANDON_DEVICE通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVELで呼び出されます。

PEP_NOTIFY_ACPI_REGISTER_DEVICE

通知:PEP_NOTIFY_ACPI_REGISTER_DEVICE値。

データ:デバイスを識別するPEP_ACPI_REGISTER_DEVICE構造へのポインター。 この通知に応答して、PEP は有効な PEPHANDLE 値を作成してデバイスを識別し、このハンドル値を構造に書き込む必要があります。

指定したデバイスの ACPI サービスの唯一のプロバイダーとして PEP を登録します。

Windows 電力管理フレームワーク (PoFx) は、以前のPEP_NOTIFY_ACPI_PREPARE_DEVICE通知で、指定されたデバイスに ACPI サービスを提供する準備ができていることを示した PEP にこの通知を送信します。

PEP_NOTIFY_ACPI_REGISTER_DEVICE通知を送信するためには、PoFx は PEP の AcceptAcpiNotification ルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値がPEP_NOTIFY_ACPI_REGISTER_DEVICEで、データパラメーターは、PEP が ACPI サービスを提供するデバイスを識別するPEP_ACPI_REGISTER_DEVICE構造を指します。

PEP_NOTIFY_ACPI_REGISTER_DEVICE通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVELで呼び出されます。

PEP_NOTIFY_ACPI_UNREGISTER_DEVICE

通知:PEP_NOTIFY_ACPI_UNREGISTER_DEVICE値。

データ:デバイスの PEPHANDLE を含むPEP_ACPI_UNREGISTER_DEVICE構造へのポインター。

PEP から ACPI サービスの指定したデバイスの登録を取り消します。

この通知に応答して、PEP は前のPEP_NOTIFY_ACPI_REGISTER_DEVICE通知でこのデバイス用に作成された PEPHANDLE を破棄できます。

PEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知を送信するためには、PoFx は PEP の AcceptAcpiNotification 呼び戻しルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値がPEP_NOTIFY_ACPI_UNREGISTER_DEVICEで、データパラメーターはPEP_ACPI_UNREGISTER_DEVICE構造を指します。

PEP_NOTIFY_ACPI_UNREGISTER_DEVICE通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVELで呼び出されます。

PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE

通知:PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE値。

データ:デバイスの ACPI 名前空間内のオブジェクトの列挙体を含むPEP_ACPI_ENUMERATE_DEVICE_NAMESPACE構造へのポインター。

ACPI 名前空間内の指定されたデバイスの下で 、PEP でサポートされている ACPI オブジェクト (ネイティブメソッド) の一覧をに対してPEPにクエリを実行します。

Windows ACPI ドライバーはこの通知によって列挙されたオブジェクトを使用して、指定されたデバイスの名前空間を構築します。 その後、このデバイスを参照する際に、ACPI ドライバーはこれらのオブジェクトについてのみ PEPに対してクエリを実行します。

Windows 電力管理フレームワーク (PoFx) は、デバイスが検出された直後にPEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知を送信し、デバイスにACPI サービスを提供するようにPEP が登録します。 この登録の詳細については、PEP_NOTIFY_ACPI_REGISTER_DEVICEを参照してください。

PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知を送信するために、PoFx は PEP の AcceptAcpiNotification 呼び戻しルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値がPEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACEで、データパラメーターはPEP_ACPI_ENUMERATE_DEVICE_NAMESPACE構造を指します。

AcceptAcpiNotification ルーチンは、PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知を処理し、TRUE を返すことが期待されます。 これを行わない場合、バグチェックが発生します。

PEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVEL で呼び出されます。

PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION

通知:PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION値。

データ:ACPI オブジェクトの属性を指定するPEP_ACPI_QUERY_OBJECT_INFORMATION構造へのポインター。

以前に列挙された ACPI オブジェクトに関する情報に対し PEP にクエリを実行します。

Windows 電力管理フレームワーク (PoFx) はこの通知を送信して、以前のPEP_NOTIFY_ACPI_ENUMERATE_DEVICE_NAMESPACE通知の処理中に列挙されたオブジェクトの属性に対してPEPにクエリを実行します。 現在、列挙されるオブジェクトはコントロールメソッドのみです。

PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION通知を送信するために、PoFx は PEP の AcceptAcpiNotification 呼び戻しルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値がPEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATIONで、データパラメーターはPEP_ACPI_QUERY_OBJECT_INFORMATION構造を指します。

PEP_NOTIFY_ACPI_QUERY_OBJECT_INFORMATION通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVEL で呼び出されます。

PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD

通知:PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD値。

データ:評価する ACPI 制御メソッド、このメソッドに指定する入力引数、および結果の出力バッファーを指定するPEP_ACPI_EVALUATE_CONTROL_METHOD構造へのポインター。

PEP が登録済みハンドラーである ACPI 制御メソッドを評価するために使用されます。

Windows 電力管理フレームワーク (PoFx) は、Windows ACPI ドライバーが PEP によって実装されている ACPI 制御メソッドを評価する必要がある場合に、PEP にこの通知を送信します。

PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知を送信するために、PoFx は PEP の AcceptAcpiNotification 呼び戻しルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値がPEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHODで、データパラメーターはPEP_ACPI_EVALUATE_CONTROL_METHOD構造を指します。

プラットフォーム デザイナーは、PEP または ACPI ファームウェアで特定の ACPI 制御メソッドを処理するかどうかを選択できます。 PEP が ACPI 制御メソッドの登録済みハンドラーである場合、PoFx は Windows ACPI ドライバーからの要求に応答し、PEP にPEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知を送信してこのメソッドを評価します。

PEP がデバイスに対して処理が可能な ACPI 制御メソッドの例の一覧を次に示します。

デバイスの識別と構成:_HID、_CID、_UID、_ADR、_CLS、_SUB、_CRS、_PRSなど。 デバイスの電力管理とスリープ解除:_PS0から_PS3, _PR0から_PR3, _DSWなど。 デバイス固有のメソッド:_DSMおよびデバイス スタック固有の制御メソッド。 ACPI 時刻やアラーム デバイスなどの特殊なデバイスの場合、この通知は時間とアラームの方法 (_GCP、_GRT、_SRTなど) を評価するために使用されます。

PEP_NOTIFY_ACPI_EVALUATE_CONTROL_METHOD通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVEL で呼び出されます。

PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES

通知:PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES値。

データ:電力リソースの一覧を含むPEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES構造へのポインター。

PEP に対して、デバイスへの電力を制御するために必要な生リソースの一覧のクエリを実行します。

この通知に応じてPEP は、デバイスへの電力を制御するために必要な生リソースの一覧を提供します。 デバイスに必要な電力リソースを予約し、(PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知を送信することによって) PEP に翻訳されたリソースの対応する一覧を提供するために、Windows ACPI ドライバーはこの一覧を必要とします。 詳細については、「生リソースおよび翻訳済みリソース」を参照してください。

PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知を送信するために、Windows 電力管理フレームワーク (PoFx) は PEP の AcceptAcpiNotification 呼び戻しルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値がPEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCESされ、データパラメーターはPEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES構造を指します。

PEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVEL で呼び出されます。

PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES

通知:PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES値。

データ:電力リソースの一覧を含むPEP_ACPI_QUERY_DEVICE_CONTROL_RESOURCES構造へのポインター。

PEP に、デバイスに必要な電力制御リソースの変換されたリソースの一覧を提供します。

Windows 電力管理フレームワーク (PoFx) は、PEP が前のPEP_NOTIFY_ACPI_QUERY_DEVICE_CONTROL_RESOURCES通知に応答して生リソースを一覧表示した場合に、この通知を送信します。 PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知は、PEP に翻訳されたリソースの対応する一覧を提供します。 詳細については、「生リソースおよび翻訳済みリソース」を参照してください。

PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知を送信するために、PoFx は PEP の AcceptAcpiNotification 呼び戻しルーチンを呼び出します。 この呼び出しでは、通知パラメーターの値がPEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCESで、データパラメーターはPEP_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES構造を指します。

PEP_NOTIFY_ACPI_TRANSLATED_DEVICE_CONTROL_RESOURCES通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVEL で呼び出されます。

PEP_NOTIFY_ACPI_WORK

通知:PEP_NOTIFY_ACPI_WORK値。

データ:PEP_WORK構造へのポインター。

PEP が RequestWorker ルーチンを呼び出して Windows 電力管理フレームワーク (PoFx) から作業項目を要求するたびに PEP に送信されます。 この通知は、ACPI のみの作業に使用されます。

PEP が RequestWorker ルーチンを呼び出して作業項目を要求すると、PoFx は PEP にPEP_NOTIFY_ACPI_WORK通知を送信して応答します。 ただしこの通知は、作業項目の処理に必要なリソース (つまり、ワーカースレッド) が使用可能になるまで送信されません。 このように、PoFx は、リソースがない理由でに通知中に PEP が PoFx に渡す作業要求が失敗することがないよう保証します。

入力時に、PEP は、PEP_WORK構造が初期化されていないと想定する必要があります。 PEP はこの通知を処理するために、要求されている作業を記述する PEP によって割り当てられたPEP_WORK_INFORMATION構造を指す WorkInformation メンバーを設定する必要があります。 さらにPEP は、PEP_WORK構造の NeedWork メンバーを TRUE に設定して、PEP がPEP_NOTIFY_ACPI_WORK通知を処理していること、および WorkInformation メンバーが有効なPEP_WORK_INFORMATION構造を指していることを確認する必要があります。 PEP が通知の処理に失敗した場合、またはPEP_WORK_INFORMATION構造を割り当てることができない場合、PEP は WorkInformation メンバーを NULL に設定し、NeedWork メンバーを FAL Standard Edition に設定する必要があります。

PEP_NOTIFY_ACPI_WORK通知の場合、AcceptAcpiNotification ルーチンは常に IRQL = PASSIVE_LEVEL で呼び出されます。