メディア切断時の省電力

メディア切断時低電力 (切断時 D3) 機能は、メディアが切断されたときにネットワーク アダプターを低電力状態 (D3) にすることで電力を節約します。 メディアが再接続されると、ネットワーク アダプターはフルパワー状態 (D0) に戻されます。

NDIS は、次の条件下で切断時 D3 機能を使用します。

  • ネットワーク アダプター ハードウェアが、メディア接続でウェイク イベントを生成する必要がある。

  • ミニポート ドライバーが、MinLinkChangeWakeUp メンバー (NDIS_PM_CAPABILITIES 構造体内) のネットワーク アダプターのウェイク イベント機能を報告する必要がある。

  • MinLinkChangeWakeUp 値が、DeviceWake メンバー (DEVICE_CAPABILITIES 構造体) として IRP_MN_QUERY_CAPABILITIES IRP により報告された値に対応する必要がある。

  • ミニポート ドライバーが、NDIS 6.20 ドライバー以降のバージョンとして登録する必要がある。

  • ネットワーク アダプターがイーサネット PCI アダプターの必要がある。

  • ウェイク イベント機能が、*DeviceSleepOnDisconnect 標準 INF ファイル キーワードで有効化される必要がある。

  • コンピューターチップセットは、コンピューターがフルパワー状態の間、ウェイク イベントを正しく伝達できる必要がある。 NDIS は、DEVPKEY_PciDevice_S0WakeupSupported PCI プロパティでクエリを実行してこれを検証します。

切断時 D3 は、コンピューターがフルパワー状態 (S0) の間のみ使用できます。 この機能は、リンク状態が外部で循環したとき (つまりスイッチがオフおよびオンになるとき) にコンピューターがウェイクしないように、コンピューターがスリープ状態になるとキャンセルされます。 コンピューターがスリープ状態になったときの低電力状態を設定する詳細については、「Wake on LAN の低電力」を参照してください。

ミニポート ドライバーは、初期化中に切断時 D3 機能を報告します。 切断時 D3 機能の報告の詳細については、「電源管理機能の報告」を参照してください。

*DeviceSleepOnDisconnect 標準 INF ファイル キーワードは、デバイスが切断時 D3 のサポートを有効にしているか無効にしているかを特定します。 この INF キーワードの詳細については、「電源管理用の標準 INF キーワード」を参照してください。

初期化中、切断時 D3 をサポートするミニポート ドライバーは、メディア接続イベントをオペレーティング システムに通知する機能をサポートできる最小の電力レベルを報告する必要があります。 ミニポート ドライバーは、MinLinkChangeWakeUp メンバー (NDIS_PM_CAPABILITIES 構造体内) の電力レベルを報告します。 たとえば、ミニポート ドライバーは NdisDeviceStateD3 を報告できます。

次の図は、メディア切断イベントの後にネットワーク アダプターを低電力状態に設定するイベントのシーケンスを示しています。

Diagram illustrating the sequence of events to set a network adapter to a low-power state after a media disconnect event.

アダプターがメディアの切断を検出すると、次のシーケンスが発生します。

  1. ネットワーク アダプター ハードウェアは、メディア切断イベントを検出し、ミニポート ドライバーに情報を渡します。

  2. ミニポート ドライバーは、NDIS_STATUS_LINK_STATE 状態表示を使用して、メディア切断イベントを NDIS に通知します。 StatusBuffer メンバー (NDIS_STATUS_INDICATION 構造体内) には NDIS_LINK_STATE 構造体が含まれます。 MediaConnectStateDisconnected 値は、MediaConnectState メンバー (NDIS_LINK_STATE 構造体内) で設定されます。

  3. NDIS は、OID_PM_PARAMETERS を使用して、Wake-on-LAN を無効化するとともにメディア接続でのウェイクを有効化します (NDIS_PM_WAKE_ON_LINK_CHANGE_ENABLED が WakeUpFlags メンバーで設定されます)。

  4. NDIS は OID_PNP_SET_POWER OID を使い、新しい電力状態 (D3) をミニポート ドライバーに通知します。

  5. NDIS は、再接続イベントを待機するため PCIe バスに IRP_MN_WAIT_WAKE IRP を送信します。

  6. NDIS は、IRP_MN_SET_POWER IRP を使用して PCIe バスを D3 状態に設定します。

次の図は、メディア接続イベントの後にネットワーク アダプターにフルパワーを回復するイベントのシーケンスを示しています。

Diagram illustrating the sequence of events to restore full power to a nic after a media connect event.

メディアが再接続されると、次のシーケンスが発生します。

  1. ネットワーク アダプターは、PCIe バスでの WAKE# のアサートか、PCI バスでの PME# のアサートによりシステムをウェイクします。

  2. バスは保留中の IRP_MN_WAIT_WAKE IRP を完了します。 IRP は、切断シーケンスの最後の手順から完了を保留しています。

  3. NDIS は、IRP_MN_SET_POWER IRP を使用して、バスをフルパワー (D0) に設定します。

  4. NDIS はミニポート ドライバーに、OID 設定要求OID_PNP_SET_POWER により、ネットワーク アダプターが全出力 (D0) 状態であることをミニポート ドライバーに通知します。

  5. ネットワーク アダプターは、NDIS_STATUS_LINK_STATE 状態表示でメディア接続イベントを NDIS に通知します。 MediaConnectStateConnected 値は、MediaConnectState メンバー (NDIS_LINK_STATE 構造体内) で設定されます。

NDIS 6.30 以降、ミニポート ドライバーが NDIS_STATUS_PM_WAKE_REASON 状態表示をサポートする場合、ネットワーク アダプターがシステムをウェイクするのであれば、この状態通知を発行する必要があります。 ドライバーは、フルパワー (D0) 状態への切り替えのための OID 設定要求 OID_PNP_SET_POWER を処理しているときに、この状態通知を発行します。

詳細については、「NDIS ウェイク理由状態表示」を参照してください。

注: ミニポートドライバーは、NDIS_STATUS_PM_WAKE_REASON 状態表示を発行する場合、それを NDIS_STATUS_LINK_STATE 状態表示を発行する前に行う必要があります。