Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Tous les pilotes clients NetAdapterCx sont des pilotes WDF (Windows Driver Framework) avec des fonctionnalités de gestion de l’alimentation similaires à tous les pilotes WDF. Les pilotes NetAdapterCx nécessitent des configurations d’alimentation supplémentaires spécifiques à la mise en réseau, comme indiqué dans cet article.
Un appareil réseau classique prend en charge trois fonctionnalités courantes de gestion de l’alimentation :
L’appareil réseau peut entrer un état d’alimentation inférieure (Dx) lorsqu’il est indiqué par le système d’exploitation.
Le pilote client inscrit des rappels d’événements WDF facultatifs pour recevoir la notification des transitions d’alimentation, comme décrit dans Prise en charge de PnP et de gestion de l’alimentation dans les pilotes de fonction.
Si l’appareil réseau peut entrer son état Dx pendant que le système reste dans son état de fonctionnement (S0), le pilote client doit prendre en charge la mise hors tension inactive. Voir Prise en charge de l’arrêt de l’inactivité. Outre le contrôle utilisateur standard du comportement d’inactivité de l’appareil et du réveil disponible pour tous les appareils WDF, NetAdapterCx permet un contrôle d’inactivité spécifique au réseau supplémentaire via *IdleRestriction tel que défini dans les mots clés INF standardisés pour la gestion de l’alimentation.
Lorsque l’appareil réseau est à l’état Dx, il peut déclencher un signal de mise en éveil si une condition de veille préconfigurée s’est produite.
Pour plus d’informations sur la façon dont un appareil WDF peut réveiller le système à partir d’un état à faible alimentation à l’échelle du système, consultez Prise en charge du réveil du système.
NetAdapterCx fournit des API pour que le pilote client déclare les événements réseau pour lesquels son matériel prend en charge la mise en éveil. Consultez Définition des fonctionnalités d’alimentation de la carte réseau.
Lorsque l’appareil réseau est dans l’état Dx, il peut toujours répondre à certaines demandes réseau couramment utilisées pour maintenir la présence du système hôte sur le réseau sans réveiller le système hôte. Consultez Définition des fonctionnalités d’alimentation de la carte réseau.
Définition des fonctionnalités d’alimentation de la carte réseau
Après avoir configuré la fonctionnalité de gestion de l’alimentation WDF, l’étape suivante consiste à définir les fonctionnalités d’alimentation de la carte réseau. Les fonctionnalités d’alimentation sont divisées en deux catégories : fonctionnalités de déchargement de protocole à faible alimentation et fonctionnalités de mise en éveil.
Fonctionnalités de déchargement de protocole à faible alimentation
Pour plus d’informations sur la façon dont la pile réseau Windows utilise cette fonctionnalité, consultez Déchargements de protocole pour la gestion de l’alimentation NDIS.
Les pilotes clients définissent leurs fonctionnalités de déchargement de protocole à faible alimentation en appelant les méthodes suivantes appropriées pour leur matériel :
Fonctionnalités de mise en éveil
Les pilotes clients appellent l’une des méthodes suivantes pour définir les fonctionnalités de mise en éveil prises en charge par leur matériel lorsque l’appareil est à faible alimentation (Dx) :
- NetAdapterWakeSetBitmapCapabilities
- NetAdapterWakeSetMagicPacketCapabilities
- NetAdapterWakeSetMediaChangeCapabilities
- NetAdapterWakeSetPacketFilterCapabilities
Consommation d’alimentation et reprise de la latence
Lorsque l’appareil réseau est dans Dx, il consomme toujours de l’alimentation pour effectuer le déchargement et le bras pour le réveil. Une fois que l’appareil a lancé le réveil à partir de Dx, il y a un délai avant que l’appareil puisse transférer à nouveau des paquets. Plus l’état interne de l’alimentation interne de l’appareil passe en moins de puissance qu’il consomme en Dx, mais plus la latence de reprise est longue.
Le tableau suivant décrit les instructions générales concernant le compromis entre la consommation d’énergie et la latence de reprise pour chaque fonctionnalité de veille.
Important
Certaines informations concernent le produit prédéfinit qui peut être sensiblement modifié avant la publication commerciale. Microsoft n’offre aucune garantie, expresse ou implicite, en ce qui concerne les informations fournies. Pour plus d’informations sur un type d’appareil spécifique, reportez-vous à la documentation spécifique au support et au programme de compatibilité matérielle Windows (WHCP).
| Fonctionnalité de mise en éveil | Événements de veille | Consommation d’énergie | Reprendre la latence |
|---|---|---|---|
| PacketFilter | Tous les paquets correspondent à la configuration de ReceivePacketFilter | Doit être inférieur au moment où en D0, et l’appareil doit être conservé dans un état approprié afin que la latence de reprise soit très petite | <= 10 ms |
| Image matricielle | Tout paquet correspond au modèle bitmap configuré | Doit être inférieur à lorsqu’il est armé pour PacketFilter, car il a plus de latitude dans la latence de reprise | <= 300 ms |
| MagicPacket | Paquet magique | Similaire à bitmap | <= 300 ms |
| MediaChange | Média connecté ou déconnecté | Similaire à bitmap | <= 300 ms |
L’exemple suivant montre comment un pilote client peut initialiser ses fonctionnalités d’alimentation. Cela se produit lors du démarrage de l’adaptateur net, mais avant d’appeler NetAdapterStart. Dans cet exemple, le pilote client définit ses fonctionnalités de mise en éveil de filtre de données bitmap, de modification de média et de filtrage de paquets.
//
// Set bitmap wake capabilities
//
NET_ADAPTER_WAKE_BITMAP_CAPABILITIES bitmapCapabilities;
NET_ADAPTER_WAKE_BITMAP_CAPABILITIES_INIT(&bitmapCapabilities);
bitmapCapabilities.BitmapPattern = TRUE;
bitmapCapabilities.MaximumPatternCount = deviceContext->PowerFiltersSupported;
bitmapCapabilities.MaximumPatternSize = 256;
NetAdapterWakeSetBitmapCapabilities(Adapter, &bitmapCapabilities);
//
// Set media change wake capabilities
//
NET_ADAPTER_WAKE_MEDIA_CHANGE_CAPABILITIES mediaChangeCapabilities;
NET_ADAPTER_WAKE_MEDIA_CHANGE_CAPABILITIES_INIT(&mediaChangeCapabilities);
mediaChangeCapabilities.MediaConnect = TRUE;
mediaChangeCapabilities.MediaDisconnect = TRUE;
NetAdapterWakeSetMediaChangeCapabilities(Adapter, &mediaChangeCapabilities);
//
// Set packet filter wake capabilities
//
if(deviceContext->SelectiveSuspendSupported)
{
NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES packetFilterCapabilities;
NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES_INIT(&packetFilterCapabilities);
packetFilterCapabilities.PacketFilterMatch = TRUE;
NetAdapterWakeSetPacketFilterCapabilities(Adapter, &packetFilterCapabilities);
}
Le client peut éventuellement inscrire EVT_NET_DEVICE_PREVIEW_POWER_OFFLOAD et EVT_NET_DEVICE_PREVIEW_WAKE_SOURCE fonctions de rappel pour accepter ou rejeter les déchargements de protocole entrants et les modèles de mise en éveil.
Modèles de déchargement et de sortie de veille du protocole de programmation
Pendant la séquence de mise sous tension de l’appareil, le pilote effectue une itération via les modèles de veille activés et les décharges de l’alimentation du protocole et les programme dans le matériel. Le pilote effectue cette opération dans ses fonctions de rappel EvtDeviceArmWakeFromS0 et EvtDeviceArmWakeFromSx .
L’exemple suivant montre comment un pilote client peut itérer sur la liste des modèles de mise en éveil pour rechercher une sortie de veille lors de l’entrée de paquets magiques, puis itérer sur la liste de déchargement de l’alimentation pour traiter le déchargement du protocole ARP IPv4 :
NTSTATUS
EvtDeviceArmWakeFromSx(
WDFDEVICE Device
)
{
NETADAPTER adapter = GetDeviceContext(Device)->Adapter;
//
// Process wake source list
//
NET_WAKE_SOURCE_LIST wakeSourceList;
NET_WAKE_SOURCE_LIST_INIT(&wakeSourceList);
NetDeviceGetWakeSourceList(Device, &wakeSourceList);
for(UINT32 i = 0; i < NetWakeSourceListGetCount(&wakeSourceList); i++)
{
NETWAKESOURCE wakeSource = NetWakeSourceListGetElement(&wakeSourceList, i);
NET_WAKE_SOURCE_TYPE const wakeSourceType = NetWakeSourceGetType(wakeSource);
if(wakeSourceType == NetWakeSourceTypeMagicPacket)
{
// Enable magic packet wake for the adapter
..
//
}
}
//
// Process power offload list
//
NET_POWER_OFFLOAD_LIST powerOffloadList;
NET_POWER_OFFLOAD_LIST_INIT(&powerOffloadList);
NetDeviceGetPowerOffloadList(Device, &powerOffloadList);
for(UINT32 i = 0; i < NetPowerOffloadListGetCount(&powerOffloadList); i++)
{
NETPOWEROFFLOAD powerOffload = NetPowerOffloadListGetElement(&powerOffloadList, i);
NET_POWER_OFFLOAD_TYPE const powerOffloadType = NetPowerOffloadGetType(powerOffload);
if(powerOffloadType == NetPowerOffloadTypeArp)
{
// Enable ARP protocol offload for the adapter
..
//
}
}
return STATUS_SUCCESS;
}
Sur le chemin jusqu’à la puissance élevée , le pilote désactive normalement les décharges d’alimentation et les modèles de sortie de veille précédemment programmés dans les rappels EvtDeviceDisarmWakeFromSx et EvtDeviceDisarmWakeFromS0 correspondants. NetDeviceGetPowerOffloadList et NetDeviceGetWakeSourceList peuvent être utilisés pour récupérer les décharges et le modèle de mise en éveil du protocole dans les rappels.
Création de rapports sur la raison du réveil
Important
Il est obligatoire que les pilotes clients signalent une raison de sortie de veille à NetAdapterCx.
Lorsque le matériel de la carte réseau réveille le système, le pilote client doit signaler à NetAdapterCx la source de mise en éveil qui a déclenché le réveil. Pour la plupart des sources de mise en éveil, les pilotes utilisent la structure NET_ADAPTER_WAKE_REASON_PACKET pour décrire le paquet réseau qui a déclenché le réveil.
Si le NET_WAKE_SOURCE_TYPE est :
NetWakeSourceTypeBitmapPattern, appelez NET_ADAPTER_WAKE_REASON_PACKET_INIT pour initialiser la structure NET_ADAPTER_WAKE_REASON_PACKET . Appelez NetAdapterReportWakeReasonPacket pour signaler cette raison de veille.
NetWakeSourceTypeMagicPacket, appelez NET_ADAPTER_WAKE_REASON_MAGIC_PACKET_INIT pour initialiser la structure NET_ADAPTER_WAKE_REASON_PACKET . Appelez NetAdapterReportWakeReasonPacket pour signaler cette raison de veille.
NetWakeSourceTypePacketFilterMatch, appelez NET_ADAPTER_WAKE_REASON_FILTER_PACKET_INIT pour initialiser la structure NET_ADAPTER_WAKE_REASON_PACKET . Appelez NetAdapterReportWakeReasonPacket pour signaler cette raison de veille.
NetWakeSourceTypeMediaChange, appelez NetAdapterReportWakeReasonMediaChange pour signaler cette raison de veille.
Scénarios de gestion de l’alimentation pour le système de secours moderne
Important
Pour la plateforme de secours moderne, le pilote de périphérique réseau doit :
- Appelez WdfDeviceInitSetPnpPowerEventCallbacks pour inscrire des rappels d’alimentation.
- Appelez WdfDeviceAssignS0IdleSettings pour prendre en charge l’idling d’appareil lorsque le système est dans son état de travail (S0).
- Appelez WdfDeviceInitSetPowerPolicyEventCallbacks pour inscrire des rappels de mise en éveil.
- Prendre en charge les fonctionnalités de déchargement de protocole à faible alimentation appropriées pour le type d’appareil.
- Prendre en charge les fonctionnalités de mise en éveil appropriées pour le type d’appareil.
Reportez-vous à la documentation spécifique aux médias et WHCP pour connaître les exigences complètes en matière de secours moderne pour votre type d’appareil.
Le système d’exploitation est responsable des décisions de stratégie d’alimentation de l’appareil réseau. Par exemple, le système d’exploitation contrôle lorsqu’un appareil doit accéder à Dx et quels types d’événements réseau l’appareil doit se réveiller. La responsabilité du pilote de périphérique est d’exécuter de manière fiable la séquence de transition de l’alimentation quand elle est demandée par le système d’exploitation, puis de programmer correctement son matériel pour la condition de mise en éveil définie par le système d’exploitation.
Le système d’exploitation prend des décisions de stratégie de puissance basées sur un large éventail de facteurs, notamment les stratégies d’alimentation à l’échelle du système et les choix des utilisateurs. Voici quelques stratégies courantes d’alimentation utilisées pour les appareils réseau sur un système de secours moderne :
Important
Ces stratégies d’alimentation peuvent changer avec les mises à jour du système d’exploitation et les informations suivantes sont fournies comme exemple. Les dépendances sur un comportement de bout en bout spécifique du système d’exploitation doivent être évitées.
Lorsque l’écran du PC est activé et que l’appareil réseau a été idédant, le système d’exploitation demande à l’appareil d’accéder à Dx et de le bras pour le wake PacketFilter et MediaChange.
Lorsque le PC entre en veille moderne et que l’appareil réseau est en cours d’iduage, le système d’exploitation demande à la carte réseau d’accéder à Dx et les bras pour bitmap, MediaChange et Magic Packet wake.
Lorsque le PC passe à Hibernation, le système d’exploitation demande à la carte réseau d’aller à Dx et le bras pour le réveil Magic Packet.
Remarque : Les pilotes clients NetAdapterCx contrôlent la visibilité de l’onglet Gestion de l’alimentation. Pour plus d’informations, consultez Contrôle utilisateur du comportement d’inactivité et de sortie de veille de l’appareil.