DeviceWake
DEVICE_CAPABILITIES の DeviceWake メンバーには、デバイスがウェイク イベントを通知できる最も低い (最も電力の少ない) デバイスの電源状態、またはデバイスが外部信号に対応してウェイクできない場合は PowerDeviceUnspecified が格納されます。
バス ドライバーは、この値を設定します。 上位ドライバーでは、値をより高い電力状態に変更できます。 たとえば、バス ドライバーが DeviceWake を D3 に設定しているが、デバイス スタックの上位にあるドライバーが D2 からのウェイクアップのみをサポートしている場合、上位レベルのドライバーは値を D2 に変更できます。
ドライバーが DeviceWake を変更する場合、DeviceState 配列内のシステムからデバイスへのマッピングとの競合を回避するために、SystemWake の変更が必要な場合があります。 たとえば、バス ドライバーによって次の設定が行われるとします。
DeviceState[PowerSystemSleeping1] = PowerDeviceD1
DeviceState[PowerSystemSleeping2] = PowerDeviceD3
DeviceWake = PowerDeviceD3
SystemWake = PowerSystemSleeping2
上位ドライバーが、そのデバイスは D3 からシステムをウェイクアップできず、D2 以上からしかウェイクアップできないと判断した場合、DeviceWake を D2 に変更することができます。 ただし、この変更により、S2 から D3 へのマッピングは不可能になります。 DeviceState 配列には、デバイスが特定のシステム電源状態に対してサポートできる最大のデバイスの電源状態が一覧表示されます。 例に示すシステム電源状態が PowerSystemSleeping2 の場合、デバイス電源状態を PowerDeviceD2 にすることはできません。 この問題を解決するには、ドライバーも SystemWake から PowerSystemSleeping1 に変更する必要があります。 WakeFromDx と DeviceDx の設定も同様です。 ドライバーは、SystemWake または DeviceWake に加えた変更が、WakeFromDx および DeviceDx の値と競合しないように注意してください。 WakeFromDx と DeviceDx の値は、ドライバーが変更できないハードウェア特性を反映しています。
SystemWake メンバーと DeviceWake メンバーの両方が 0 以外の場合 (つまり、PowerSystemUnspecified ではない)、デバイスとそのドライバーは、このシステムでのウェイクアップをサポートします。
ACPI 以外のハードウェアでは、DeviceWake メンバーに 0 (PowerSystemUnspecified) が含まれています。