OID_PNP_SET_POWER
El OID_PNP_SET_POWER OID notifica a un controlador de minipuerto que su adaptador de red subyacente pasará al estado de alimentación del dispositivo especificado en InformationBuffer. El estado de alimentación del dispositivo se especifica como uno de los siguientes valores de NDIS_DEVICE_POWER_STATE :
- NdisDeviceStateD0
- NdisDeviceStateD1
- NdisDeviceStateD2
- NdisDeviceStateD3
Una solicitud de OID_PNP_SET_POWER puede ir precedida de una solicitud de OID_PNP_QUERY_POWER .
A partir de NDIS 6.30, NDIS no se pausará y reiniciará los controladores NDIS en la pila de controladores durante las transiciones de estado de energía si se cumplen las condiciones siguientes:
El controlador de minipuerto subyacente establece la marca NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND en la estructura NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . El controlador pasa un puntero a esta estructura en su llamada a la función NdisMSetMiniportAttributes .
Todos los controladores de filtro excesivamente conectados al controlador de minipuerto admiten NDIS 6.30 o versiones posteriores de NDIS.
Todos los controladores de protocolo excesivamente enlazados al controlador de minipuerto admiten NDIS 6.30 o versiones posteriores de NDIS.
Transición a un estado de Low-Power (D1-D3)
Cuando el controlador de minipuerto controla una solicitud establecida de OID_PNP_SET_POWER para pasar a un estado de bajo consumo, debe hacer lo siguiente:
Prepare completamente el adaptador de red para el estado de alimentación del dispositivo de red indicado. La tarea que realiza el controlador de minipuerto para lograrlo depende del dispositivo.
Espere a que se devuelvan las llamadas a la función NdisMIndicateReceiveNetBufferLists .
Espere a que se completen las solicitudes de envío procesadas por el adaptador de red. Una vez completado, el controlador de minipuerto debe llamar a la función NdisMSendNetBufferListsComplete . El controlador debe establecer el miembro Status en cada estructura de NET_BUFFER_LIST en el valor NDIS_STATUS_Xxx adecuado.
Complete todas las solicitudes de envío pendientes llamando a la función NdisMSendNetBufferListsComplete . El controlador debe establecer el miembro Status en cada estructura de NET_BUFFER_LISTen NDIS_STATUS_LOW_POWER_STATE.
Rechaza todas las solicitudes de envío nuevas realizadas a su función MiniportSendNetBufferLists inmediatamente llamando a la función NdisMSendNetBufferListsComplete . El controlador debe establecer el miembro Status en cada estructura de NET_BUFFER_LISTen NDIS_STATUS_LOW_POWER_STATE.
El controlador de minipuerto que admite NDIS 6.30 y versiones posteriores de NDIS también debe hacer lo siguiente:
No espere a que se completen las indicaciones de recepción pendientes a través de llamadas a su función MiniportReturnNetBufferLists . Además, el controlador de minipuerto no debe modificar la estructura de NET_BUFFER_LIST ni los datos de los paquetes que están esperando que se completen.
Controle la solicitud de OID_PNP_SET_POWER a un estado de bajo consumo desde los estados del adaptador en pausa o en ejecución. Para obtener más información sobre estos estados, vea Miniport Adapter States and Operations.
Antes de que el adaptador de red pase al estado D3, el controlador de minipuerto debe desactivar todo el contenido bajo el control del controlador de minipuerto mediante la realización de las siguientes tareas:
Deshabilite las interrupciones y el motor DMA en el adaptador de red.
Detenga el motor de recepción en el adaptador de red.
No desasigne ni modifique descriptores de recepción y búferes de paquetes asociados a indicaciones de recepción pendientes.
Cancela todos los temporizadores NDIS.
Nota Un controlador de minipuerto no puede acceder al adaptador de red después de que el controlador de bus haya pasado el adaptador de red al estado D3.
Transición al estado de Full-Power (D0)
Cuando el controlador de minipuerto controla una solicitud establecida de OID_PNP_SET_POWER para realizar la transición a un estado de potencia completa, debe restaurar el motor de recepción del adaptador de red al mismo estado en el que estaba el motor de recepción antes de que el adaptador pasara al estado de bajo consumo.
Nota El controlador de minipuerto no debe acceder ni cambiar los búferes de recepción asociados a indicaciones de recepción pendientes.
NDIS llama a la función MiniportRestart del controlador de miniporte después de la transición a un estado de energía completa solo si NDIS llamó a la función MiniportPause del controlador antes de la transición a un estado de baja potencia.
Nota Un controlador intermedio siempre debe devolver NDIS_STATUS_SUCCESS a una consulta de OID_PNP_SET_POWER. Un controlador intermedio nunca debe propagar una solicitud de OID_PNP_SET_POWER a un controlador de miniporte subyacente.
Códigos de estado de devolución
La función MiniportOidRequest del controlador miniportador devuelve uno de los siguientes valores para esta solicitud:
Término | Descripción |
---|---|
NDIS_STATUS_SUCCESS |
El controlador de minipuerto completó la solicitud correctamente. |
NDIS_STATUS_PENDING |
El controlador de minipuerto completará la solicitud de forma asincrónica. Después de que el controlador de miniporte haya completado todo el procesamiento, debe realizarse correctamente la solicitud llamando a la función NdisMOidRequestComplete , pasando NDIS_STATUS_SUCCESS para el parámetro Status . |
NDIS_STATUS_NOT_ACCEPTED |
El controlador de minipuerto se está restableciendo. |
Requisitos
Versión |
Compatible con NDIS 5.1 y NDIS 6.0 y versiones posteriores. |
Encabezado |
Ntddndis.h (incluye Ndis.h) |
Consulte también
NdisMIndicateReceiveNetBufferLists