Partager via


OID_PNP_SET_POWER

L’OID OID_PNP_SET_POWER informe un pilote miniport que sa carte réseau sous-jacente passe à l’état d’alimentation de l’appareil spécifié dans le InformationBuffer. L’état de l’alimentation de l’appareil est spécifié comme l’une des valeurs de NDIS_DEVICE_POWER_STATE suivantes :

  • NdisDeviceStateD0
  • NdisDeviceStateD1
  • NdisDeviceStateD2
  • NdisDeviceStateD3

Une demande de OID_PNP_SET_POWER peut être précédée d’une demande de OID_PNP_QUERY_POWER.

À compter de NDIS 6.30, NDIS ne met pas en pause et redémarre les pilotes NDIS dans la pile des pilotes pendant les transitions d’état de l’alimentation si les conditions suivantes sont remplies :

  • Le pilote miniport sous-jacent définit l’indicateur de NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND dans la structure NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES. Le pilote passe un pointeur vers cette structure dans son appel à la fonction NdisMSetMiniportAttributes.

  • Tous les pilotes de filtre qui sont attachés au pilote miniport prennent en charge NDIS 6.30 ou versions ultérieures de NDIS.

  • Tous les pilotes de protocole qui sont liés au pilote miniport prennent en charge NDIS 6.30 ou versions ultérieures de NDIS.

Transition vers un état de Low-Power (D1-D3)

Lorsque le pilote miniport gère une requête définie de OID_PNP_SET_POWER pour passer à un état à faible alimentation, il doit effectuer les opérations suivantes :

  • Préparez entièrement la carte réseau pour l’état d’alimentation de l’appareil réseau indiqué. La tâche effectuée par le pilote miniport pour y parvenir dépend de l’appareil.

  • Attendez que les appels à la fonction NdisMIndicateReceiveNetBufferLists retournent.

  • Attendez que les demandes d’envoi traitées par la carte réseau soient terminées. Une fois terminé, le pilote miniport doit appeler la fonction NdisMSendNetBufferListsComplete. Le pilote doit définir le membre Status dans chaque structure de NET_BUFFER_LIST sur la valeur NDIS_STATUS_ xxx appropriée.

  • Terminez toutes les demandes d’envoi en attente en appelant la fonction NdisMSendNetBufferListsComplete. Le pilote doit définir le membre Status dans chaque structure NET_BUFFER_LIST sur NDIS_STATUS_LOW_POWER_STATE.

  • Rejeter toutes les nouvelles demandes d’envoi adressées à sa fonction MiniportSendNetBufferLists immédiatement en appelant la fonction NdisMSendNetBufferListsComplete. Le pilote doit définir le membre Status dans chaque structure NET_BUFFER_LIST sur NDIS_STATUS_LOW_POWER_STATE.

Le pilote miniport qui prend en charge NDIS 6.30 et versions ultérieures de NDIS doit également effectuer les opérations suivantes :

  • N’attendez pas l’achèvement des indications de réception en attente par le biais d’appels à sa fonction MiniportReturnNetBufferLists. En outre, le pilote miniport ne doit pas modifier la structure ou les données NET_BUFFER_LIST pour tous les paquets qui attendent d’être terminés.

  • Gérez la requête OID_PNP_SET_POWER à un état de faible alimentation à partir des états de l’adaptateur suspendu ou en cours d’exécution. Pour plus d’informations sur ces états, consultez États et opérations de l’adaptateur Miniport.

Avant que la carte réseau passe à l’état D3, le pilote miniport doit désactiver tout sous le contrôle du pilote miniport en effectuant les tâches suivantes :

  • Désactivez les interruptions et le moteur DMA sur la carte réseau.

  • Arrêtez le moteur de réception sur la carte réseau.

  • Ne libérez pas ou modifiez les descripteurs de réception et les mémoires tampons de paquets associées aux indications de réception en attente.

  • Annulez tous les minuteurs NDIS.

Remarque Un pilote miniport ne peut pas accéder à la carte réseau une fois que le pilote de bus a passé la carte réseau à l’état D3.

Transition vers l’état de Full-Power (D0)

Lorsque le pilote miniport gère une demande définie d’OID_PNP_SET_POWER pour passer à un état d’alimentation complète, il doit restaurer le moteur de réception de la carte réseau dans le même état que celui dans lequel le moteur de réception a été passé avant la transition de l’adaptateur vers l’état de faible alimentation.

Remarque Le pilote miniport ne doit pas accéder ni modifier les mémoires tampons de réception associées aux indications de réception en attente.

NDIS appelle la fonction MiniportRestart du pilote MiniportRestart après la transition vers un état de puissance totale uniquement si NDIS a appelé la fonction MiniportPause du pilote avant la transition vers un état de faible alimentation.

Remarque Un pilote intermédiaire doit toujours retourner NDIS_STATUS_SUCCESS à une requête de OID_PNP_SET_POWER. Un pilote intermédiaire ne doit jamais propager une demande de OID_PNP_SET_POWER à un pilote miniport sous-jacent.

Retourner des codes d’état

La fonctionminiportdu pilote miniportOidRequest retourne l’une des valeurs suivantes pour cette requête :

Terme Description

NDIS_STATUS_SUCCESS

Le pilote miniport a terminé la requête avec succès.

NDIS_STATUS_PENDING

Le pilote miniport termine la requête de manière asynchrone. Une fois que le pilote miniport a terminé tout le traitement, il doit réussir la requête en appelant la fonctionNdisMOidRequestCompleteen passant NDIS_STATUS_SUCCESS pour le paramètre Status.

NDIS_STATUS_NOT_ACCEPTED

Le pilote miniport est réinitialisé.

Exigences

Version

Pris en charge pour NDIS 5.1 et NDIS 6.0 et versions ultérieures.

En-tête

Ntddndis.h (include Ndis.h)

Voir aussi


MiniportInitializeEx

MiniportPause

MiniportRestart

MiniportReturnNetBufferLists

MiniportSendNetBufferLists

NDIS_DEVICE_POWER_STATE

NdisMIndicateReceiveNetBufferLists

NdisMSendNetBufferListsComplete

NET_BUFFER_LIST