Compartir a través de


Control de la notificación de suspensión inactiva selectiva de NDIS

NDIS inicia una operación de suspensión selectiva si se produce uno de los siguientes eventos:

  • El adaptador de red ha estado inactivo durante más tiempo que un período de tiempo de espera de inactividad. La duración de este período de tiempo de espera se especifica mediante el valor de la palabra clave INF estandarizada *SSIdleTimeout . Para obtener más información sobre esta palabra clave, vea Palabras clave INF estandarizadas para suspensión selectiva de NDIS.

    Para obtener más información sobre cómo NDIS determina que un adaptador de red está inactivo, consulte Cómo NDIS detecta adaptadores de red inactivos.

  • El sistema que es compatible con la tecnología always connected (AOAC) de Always On se está realizando la transición a un estado de espera conectado.

A través de la operación de suspensión selectiva, el adaptador de red pasa a un estado de baja potencia. NDIS inicia esta operación llamando a la función de controlador MiniportIdleNotification para emitir una notificación inactiva al controlador de miniport.

Es posible que el controlador de miniporte necesite realizar acciones dependientes del bus cuando controla la notificación inactiva. En la ilustración siguiente se muestran los pasos necesarios para controlar una notificación inactiva por un controlador de miniporte para un adaptador de red USB.

Diagrama que muestra la operación de notificación inactiva.

En este tema se incluye la siguiente información sobre cómo controlar una notificación de suspensión inactiva selectiva de NDIS:

Directrices para controlar la llamada a MiniportIdleNotification

Directrices para la llamada a NdisMIdleNotificationConfirm

Cancelación y finalización de una notificación de suspensión inactiva selectiva de NDIS

Directrices para controlar la llamada a MiniportIdleNotification

NDIS y el controlador de minipuerto siguen estos pasos cuando NDIS llama a MiniportIdleNotification:

  1. NDIS llama a la función de controlador MiniportIdleNotification para notificar al controlador que el adaptador de red subyacente parece estar inactivo. NDIS establece el parámetro ForceIdle de la función de controlador MiniportIdleNotification en uno de los siguientes valores:

    • NDIS establece el parámetro ForceIdle en FALSE cuando el adaptador de red ha estado inactivo durante más tiempo que el período de tiempo de espera de inactividad.

    • NDIS establece el parámetro ForceIdle en TRUE cuando un sistema que es compatible con la tecnología always connected (AOAC) de Always On está realizando la transición a un estado de espera conectado.

  2. Cuando se llama a MiniportIdleNotification , el controlador de miniporte puede vetar la notificación inactiva y la operación de suspensión selectiva devolviendo NDIS_STATUS_BUSY. Por ejemplo, el controlador podría vetar la notificación inactiva si el controlador detecta actividad en el adaptador de red.

    Si el controlador de minipuerto ve la notificación inactiva, NDIS reinicia el monitor de actividad en el adaptador de red. Si el adaptador vuelve a estar inactivo dentro del período de tiempo de espera de inactividad, NDIS llama a MiniportIdleNotification.

    Nota El controlador de minipuerto no debe vetar la notificación inactiva si el parámetro ForceIdle está establecido en TRUE. En este caso, el controlador debe continuar con la operación de suspensión selectiva.

  3. Si el controlador de miniporte no ve la notificación inactiva, debe realizar operaciones específicas del bus para preparar el adaptador de red para una operación de suspensión selectiva. Por ejemplo, el controlador de minipuerto para un adaptador de red USB realiza los pasos siguientes para determinar si el adaptador de red puede realizar la transición a un estado de bajo consumo:

    1. El controlador de minipuerto llama a IoCallDriver para emitir un paquete de solicitud de E/S (IRP) para una solicitud de inactividad USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) al controlador de bus USB subyacente. En este IRP, el controlador de minipuerto debe especificar una rutina de devolución de llamada y finalización.

      El controlador de bus USB no completa inmediatamente el IRP. El IRP se deja en un estado pendiente a través de la transición de baja potencia. El controlador de autobús completa el IRP más adelante cuando se produce cualquiera de los siguientes eventos:

      • El controlador de minipuerto cancela el IRP.

      • Se requiere un cambio de estado de alimentación del sistema.

      • El dispositivo se quita del concentrador USB.

    2. Después de que el controlador del bus USB determine que puede colocar el adaptador de red en un estado de bajo consumo, llama a la rutina de devolución de llamada IRP del controlador de miniporte. Esta llamada confirma que el adaptador de red puede pasar a un estado de bajo consumo.

      Para obtener instrucciones sobre cómo escribir una rutina de devolución de llamada para el IRP de solicitud inactiva USB, consulte Implementación de una rutina de devolución de llamada IRP de solicitud inactiva USB.

  4. Una vez que el controlador de miniporte completa la preparación del adaptador de red para una operación de suspensión selectiva, llama a NdisMIdleNotificationConfirm. En esta llamada, el controlador de minipuerto especifica el estado de energía más bajo al que el adaptador de red puede realizar la transición.

    Según los requisitos de bus para las operaciones de suspensión selectiva, el controlador de miniporta llama a NdisMIdleNotificationConfirm de forma sincrónica en el contexto de la llamada a MiniportIdleNotification o de forma asincrónica después de que miniportIdleNotification devuelva. Por ejemplo, el controlador de miniport para un adaptador de red USB llama a NdisMIdleNotificationConfirm en el contexto de la rutina de devolución de llamada para la solicitud de inactividad USB. El controlador de bus USB llama a la rutina de devolución de llamada de forma sincrónica en el contexto de la llamada a IoCallDriver o de forma asincrónica después de que se devuelva MiniportIdleNotification .

  5. Si el adaptador de red se puede pasar a un estado de baja potencia, el controlador de minipuerto devuelve NDIS_STATUS_PENDING desde la llamada a MiniportIdleNotification.

    Nota El controlador de minipuerto devuelve NDIS_STATUS_PENDING porque la notificación inactiva no se completa hasta que el controlador llama a NdisMIdleNotificationCompleTe. El controlador de minipuerto no debe devolver NDIS_STATUS_SUCCESS desde MiniportIdleNotification.

El controlador de minipuerto debe realizar las siguientes operaciones hasta que el adaptador de red se suspenda y pase a un estado de baja potencia:

Directrices para la llamada a NdisMIdleNotificationConfirm

NDIS y el controlador de minipuerto siguen estos pasos cuando el controlador de minipuerto llama a NdisMIdleNotificationConfirm:

  1. Problemas de NDIS IRP_MN_WAIT_WAKE al controlador de autobús subyacente. Este IRP permite al controlador de autobús reactivar el adaptador de red en respuesta a una señal de reactivación externa.

  2. NDIS emite una solicitud de conjunto de identificador de objeto (OID) de OID_PM_PARAMETERS al controlador de minipuerto. Esta solicitud de OID está asociada a una estructura de NDIS_PM_PARAMETERS que especifica la configuración en la que el adaptador de red genera un evento de reactivación.

    El controlador de minipuerto debe seguir estas directrices cuando procesa los miembros de la estructura NDIS_PM_PARAMETERS :

    • Si el parámetro ForceIdle de la función de controlador MiniportIdleNotification se estableció en FALSE, NDIS solo establece la marca de NDIS_PM_SELECTIVE_SUSPEND_ENABLED en el miembro WakeUpFlags de la estructura NDIS_PM_PARAMETERS . En este caso, el adaptador de red puede indicar un evento de reactivación cuando se produce uno de los siguientes eventos:

      • El adaptador de red recibe un paquete que coincide con un filtro de paquetes de recepción. El adaptador está configurado para usar estos filtros a través de solicitudes de conjunto de OID de OID_GEN_CURRENT_PACKET_FILTER.

      • El adaptador de red detecta otros eventos externos que requieren el procesamiento por parte de la pila de controladores de red, como cuando el estado del vínculo cambia a la desconexión multimedia o a los medios conectados.

    • Si el parámetro ForceIdle de la función de controlador MiniportIdleNotification se estableció en TRUE, NDIS no establece la marca NDIS_PM_SELECTIVE_SUSPEND_ENABLED en el miembro WakeUpFlags de la estructura NDIS_PM_PARAMETERS . En este caso, NDIS establece otros miembros en la estructura de NDIS_PM_PARAMETERS para eventos de reactivación no relacionados con la suspensión selectiva de NDIS.

      Nota NDIS establece el parámetro ForceIdle en TRUE solo cuando un sistema compatible con la tecnología always connected (AOAC) de Always On está realizando la transición a un estado de espera conectado.

      El controlador completa la solicitud de OID con NDIS_STATUS_SUCCESS.

      Nota Si NDIS establece la marca de NDIS_PM_SELECTIVE_SUSPEND_ENABLED en el miembro WakeUpFlags de NDIS_PM_PARAMETERS estructura, emite la solicitud de conjunto de OID de OID_PM_PARAMETERS directamente al controlador de minipuerto. Esto permite que NDIS omita el procesamiento por los controladores de filtro en la pila de controladores de red.

  3. Una vez completada correctamente la solicitud de conjunto de OID de OID_PM_PARAMETERS , NDIS emite una solicitud de conjunto de OID OID_PNP_SET_POWER al controlador de miniporte.

    Cuando controla esta solicitud de conjunto de OID, el controlador prepara el adaptador de red para realizar la transición al estado de bajo consumo especificado en la solicitud OID. El controlador debe completar todas las operaciones pendientes de la siguiente manera:

    • El controlador de minipuerto espera a que todos los paquetes de recepción indicados anteriormente se devuelvan a través de llamadas a MiniportReturnNetBufferLists.

    • El controlador de miniporte espera a que finalicen las solicitudes de envío procesadas por el hardware. Una vez completadas las solicitudes, el controlador de minipuerto debe llamar a NdisMSendNetBufferListsComplete.

    • El controlador de minipuerto completa todas las solicitudes de envío pendientes llamando a NdisMSendNetBufferListsComplete.

    • El controlador de minipuerto debe cancelar todos los temporizadores NDIS pendientes y los elementos de trabajo. Una vez cancelados, el controlador debe esperar a que se completen estos temporizadores y elementos de trabajo.

    • El controlador de minipuerto debe colocar el adaptador de red en estado inactivo. Por ejemplo, el controlador debe cancelar todos los temporizadores de hardware.

    El controlador de minipuerto configura el adaptador de red subyacente para habilitar los eventos de reactivación especificados que se especificaron anteriormente en la solicitud de conjunto de OID de OID_PM_PARAMETERS. Una vez preparado el adaptador de red para la transición de baja potencia, el controlador de minipuerto completa la solicitud de conjunto de OID de OID_PNP_SET_POWER con NDIS_STATUS_SUCCESS.

  4. NDIS emite un IRP_MN_SET_POWER al controlador de autobús subyacente. Este IRP solicita que el adaptador de red pase a un estado de baja potencia.

    Nota Durante una operación de suspensión selectiva, el adaptador de red pasará al estado de alimentación del dispositivo especificado en la llamada a NdisMIdleNotificationConfirm. El controlador de minipuerto especifica este estado de alimentación del dispositivo en el parámetro IdlePowerState de esta función.

Una vez completado el IRP, NDIS vuelve de la llamada a NdisMIdleNotificationConfirm.

Cancelación y finalización de una notificación de suspensión inactiva selectiva de NDIS

Una vez emitida la notificación inactiva, se puede cancelar y completar de las siguientes maneras:

  • NDIS puede cancelar la notificación de inactividad pendiente si se cumplen las condiciones siguientes:

    • Un protocolo o controlador de filtro excesivo emite una solicitud de paquete de envío o una solicitud de OID al controlador de minipuerto.

    • El adaptador subyacente señala un evento de reactivación, como recibir un paquete que coincida con un patrón wake-on-LAN (WOL) o detectar un cambio en su estado de conexión multimedia.

    NDIS cancela la notificación inactiva llamando a MiniportCancelIdleNotification. Cuando se llama a esta función de controlador, el controlador de minipuerto cancela los IRP específicos del bus que se hayan emitido previamente para la notificación inactiva. Por último, el controlador de minipuerto llama a NdisMIdleNotificationComple para completar la notificación inactiva.

    Para obtener más información sobre cómo NDIS cancela la notificación de inactividad, vea Cancelar la notificación de suspensión inactiva selectiva de NDIS.

  • Una vez que el adaptador de red está en estado de bajo consumo, el controlador de minipuerto puede completar la notificación inactiva para reanudar el adaptador a un estado de energía completa. Las razones para hacerlo son específicas del diseño y los requisitos del controlador y el adaptador. El controlador de minipuerto completa la notificación inactiva llamando a NdisMIdleNotificationComple.

    Para obtener más información sobre cómo el controlador de minipuerto completa la notificación inactiva, consulte Finalización de la notificación de suspensión inactiva selectiva de NDIS.