NDIS セレクティブ サスペンドの概要
NDIS 6.30 以降では、NDIS セレクティブ サスペンド インターフェイスを使用すると、NDIS は、アダプターを低電力状態に移行することによって、アイドル状態のネットワーク アダプターを中断できます。 これにより、システムは CPU およびアダプターの電力オーバーヘッドを削減できます。
NDIS セレクティブ サスペンドは、USB v1.1 および v2.0 インターフェイスに基づくネットワーク アダプターに特に便利です。 これらのアダプターは、アクティブかアイドルかに関係なく、受信パケットに対して継続的にポーリングされます。 アイドル状態の USB アダプターを中断することで、CPU オーバーヘッドを最大 10% 削減できます。
NDIS セレクティブ サスペンドは、USB セレクティブ サスペンド テクノロジーに基づいています。 ただし、NDIS セレクティブ サスペンドは、バスに依存しない設計です。 このようにして、セレクティブ サスペンドのためのバスに依存しない I/O 要求パケット (IRP) が NDIS によって発行されます。 これにより、ミニポート ドライバーは、特定のバスでのセレクティブ サスペンドに必要なすべての IRP を発行する責任があります。 たとえば、USB ネットワーク アダプターのミニポート ドライバーは、セレクティブ サスペンド操作中に USB バス ドライバーにバス固有の USB アイドル要求 IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) を発行します。
NDIS とミニポート ドライバーは、次の方法で NDIS セレクティブ サスペンドに参加します。
ミニポート ドライバーが NDIS セレクティブ サスペンドのサポートに登録している場合、NDIS は、ネットワーク アダプターの I/O アクティビティを監視します。 I/O アクティビティには、パケット表示の受信、パケット完了の送信、ミニポート ドライバーによって処理される OID 要求が含まれます。
NDIS は、指定されたアイドルタイムアウト期間よりも長く非アクティブになっている場合、ネットワーク アダプターがアイドル状態であると見なします。 この場合、NDIS は、ネットワーク アダプターを低電力状態に移行するためにミニポート ドライバーにアイドル状態の通知を発行することによってセレクティブ サスペンド操作を開始します。
Note
このアイドル状態のタイムアウト期間の長さは、標準化された INF キーワード *SSIdleTimeout の値によって指定されます。 このキーワードの詳細については、「NDIS セレクティブ サスペンドの標準化された INF キーワード」を参照してください。
ネットワーク アダプターがアイドル状態であることを NDIS が判断する方法の詳細については、「NDIS がアイドル状態のネットワーク アダプターを検出する方法」を参照してください。
NDIS は、ドライバーの MiniportIdleNotification ハンドラー関数を呼び出すことによって、ミニポート ドライバーにアイドル状態の通知を発行します。 この関数が呼び出されると、ミニポート ドライバーは、ネットワーク アダプターが低電力状態に移行できるかどうかを判断します。 ミニポート ドライバーは、バス固有の方法でこの判断を実行します。
たとえば、USB ミニポート ドライバーは、基になる USB バス ドライバーに USB アイドル要求 IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) を発行することによって、ネットワーク アダプターが低電力状態に移行できるかどうかを判断します。 これにより、ネットワーク アダプターがアイドル状態であることをバス ドライバーに通知し、アダプターを低電力状態に移行できるかどうかを確認します。
Note
ミニポート ドライバーは、USB アイドル要求 IRP のコールバックと完了ルーチンを指定する必要があります。
ミニポート ドライバーがアイドル状態の通知を処理する方法の詳細については、「アイドル状態の通知の NDIS セレクティブ サスペンドの処理」を参照してください。
ミニポート ドライバーは、ネットワーク アダプターが低電力状態に移行できることを確認した後、NdisMIdleNotificationConfirm を呼び出します。 この呼び出しでは、ミニポート ドライバーは、ネットワーク アダプターが移行できる最小の電源状態を指定します。
NdisMIdleNotificationConfirm が呼び出されると、NDIS は、アダプターが低電力状態に移行する準備をさせるためにミニポート ドライバーに OID 要求を発行します。 さらに NDIS では、基になるバス ドライバーに IRP を発行して、アダプターを低電力状態に設定します。
ネットワーク アダプターが中断された後、未処理のアイドル状態の通知が取り消されるまで低電力状態が保持されます。
NDIS は、ミニポート ドライバーの MiniportCancelIdleNotification ハンドラー関数を呼び出すことによって未処理のアイドル状態の通知を取り消します。 次の条件の 1 つ以上が true の場合、NDIS はこのハンドラー関数を呼び出します。
NDIS は、上にあるプロトコルまたはフィルター ドライバーからミニポート ドライバーに発行された送信パケット要求または OID 要求を検出します。
ネットワーク アダプターは、ウェイクアップ イベントを通知します。 これは、アダプターがパケットを受信したとき、またはメディア接続の状態の変化を検出したときに発生する可能性があります。
ネットワーク アダプターが中断された後、ミニポート ドライバーは、アダプターを完全な電源状態に戻すためにアイドル状態の通知を完了することもできます。 これを行う理由は、ドライバーとアダプターの設計と要件に固有です。
NDIS がアイドル状態の通知を取り消す方法の詳細については、「NDIS アイドル状態の通知のセレクティブ サスペンドを取り消す」を参照してください。
ミニポート ドライバーがアイドル状態の通知を完了する方法の詳細については、「NDIS アイドル状態の通知のセレクティブ サスペンドを完了する」を参照してください。
MiniportCancelIdleNotification ハンドラー関数が呼び出されると、ミニポート ドライバーは、ネットワーク アダプターが完全な電源状態に復旧できるかどうかを判断します。 さらにドライバーは、アイドル状態の通知のために以前に発行されている可能性があるバス固有の IRP を取り消します。
ネットワーク アダプターが完全な電源状態に移行できるかどうかの判断は、バス固有です。 たとえば、MiniportCancelIdleNotification が呼び出されると、USB ミニポートは、以前に発行された USB アイドル状態要求 IRP を取り消す必要があります。 USB ドライバーは、IRP をキャンセルするとすぐに IRP の完了ルーチンを呼び出して、IRP が取り消され、ネットワーク アダプターが完全な電源状態に復旧できることを確認します。 完了ルーチンのコンテキストでは、ミニポート ドライバーは NdisMIdleNotificationComplete を呼び出 します。
ミニポートは、ネットワーク アダプターが完全な電源状態に復旧できると判断すると、NdisMIdleNotificationComplete を呼び出します。 この呼び出しは、アイドル状態の通知が完了したことを NDIS に通知するものです。 NDIS は、ネットワーク アダプターを完全な電源状態に移行することによって、セレクティブ サスペンド操作の完了に進みます。
NdisMIdleNotificationComplete が呼び出されると、NDIS は、アダプターが完全な電源状態に移行する準備をさせるためにミニポート ドライバーに OID 要求を発行します。 さらに NDIS では、基になるバス ドライバーに IRP を発行して、アダプターを完全な電源状態に設定します。
ネットワーク アダプターが全電源状態に復旧すると、セレクティブ サスペンド操作が完了します。 NDIS は、ネットワーク アダプターの I/O アクティビティの監視を再開します。 アダプターが別のアイドル状態タイムアウト期間後に非アクティブになった場合、NDIS は、ネットワーク アダプターを中断するためにミニポート ドライバーにアイドル状態の通知を発行します。