Cancelando a notificação ociosa de suspensão seletiva do NDIS

Se o adaptador de rede ficar inativo por um período de tempo limite ocioso, o NDIS iniciará a operação de suspensão seletiva. Por meio dessa operação, o adaptador de rede é transferido para um estado de baixa potência. O NDIS inicia essa operação emitindo uma notificação ociosa para o driver de miniporto. Para obter mais informações sobre essa operação, consulte Manipulando a notificação ociosa de suspensão seletiva do NDIS.

O NDIS chama a função de manipulador MiniportIdleNotification para notificar o driver de que o adaptador de rede subjacente parece estar ocioso. Depois que a notificação ociosa é emitida, o NDIS cancela uma notificação ociosa pendente se uma ou mais das seguintes condições forem verdadeiras:

  • Um protocolo ou driver de filtro em excesso emite uma solicitação de envio de pacote ou uma solicitação de OID (identificador de objeto) para o driver de miniport.

    Para obter mais informações sobre como o NDIS cancela a notificação ociosa para esse cenário, consulte Canceling the Idle Notification because of Overlying Driver Activity.

  • O adaptador subjacente sinaliza um evento de ativação, como receber um pacote ou detectar uma alteração em sua conexão de mídia status.

    Para obter mais informações sobre como o NDIS cancela a notificação ociosa para esse cenário, consulte Cancelando a notificação ociosa devido a eventos de ativação.

O NDIS cancela a notificação ociosa chamando a função de manipulador MiniportCancelIdleNotification do driver de miniporto subjacente. Quando essa função é chamada, o driver de miniporto deve concluir a notificação ociosa para retomar o adaptador para um estado de energia total. Para obter diretrizes sobre esse processo, consulte Concluindo a notificação ociosa de suspensão seletiva do NDIS.

Para obter mais informações sobre como implementar a função de manipulador MiniportCancelIdleNotification, consulte Implementando uma função de manipulador MiniportCancelIdleNotification.

Cancelando a notificação ociosa devido ao excesso de atividade do driver

Os monitores NDIS enviam solicitações e solicitações OID que são emitidas para um driver de miniporto cujo adaptador de rede foi suspenso e está em um estado de baixa potência. Quando isso acontece, o NDIS cancela a notificação ociosa pendente para que o adaptador de rede possa retomar para um estado de energia total.

O NDIS e o driver de miniporta seguem estas etapas quando uma notificação ociosa é cancelada:

  1. O NDIS chama a função de manipulador MiniportCancelIdleNotification para cancelar uma notificação ociosa pendente. Quando essa função de manipulador é chamada, o driver de miniporta deve cancelar todos os IRPs (pacotes de solicitação de E/S) específicos do barramento que ele possa ter emitido anteriormente para a notificação ociosa.

    Por exemplo, quando MiniportCancelIdleNotification é chamado, o miniporto para um adaptador de rede USB executa as seguintes etapas:

    1. O driver de miniporta cancela o IRP de solicitação ociosa USB pendente (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). O driver de miniporte emitiu anteriormente esse IRP para o driver de ônibus USB subjacente quando o NDIS chamou a função MiniportIdleNotification do driver. O driver de miniporta cancela esse IRP chamando IoCancelIrp.

    2. Quando o motorista do ônibus cancela o IRP de solicitação ociosa usb, ele chama a rotina de conclusão do driver de miniporto para o IRP. Essa chamada notifica o driver de que o IRP foi concluído e que o adaptador de rede pode fazer a transição para um estado de energia total. No contexto da rotina de conclusão, o driver chama NdisMIdleNotificationComplete para notificar o NDIS de que o adaptador de rede pode ser transferido para um estado de energia total.

    Nota Dependendo das dependências para cancelar solicitações ociosas específicas do barramento, o driver de miniporto chama NdisMIdleNotificationComplete de forma síncrona no contexto da chamada para MiniportCancelIdleNotification ou de forma assíncrona após o retorno de MiniportCancelIdleNotification .

    Para obter mais informações sobre como implementar uma rotina de conclusão de IRP de solicitação ociosa usb, consulte Implementando uma rotina de conclusão de IRP de solicitação ociosa usb.

  2. Depois que o driver de miniporta cancela todos os IRPs específicos do barramento para a notificação ociosa, ele chama NdisMIdleNotificationComplete. Essa chamada notifica o NDIS de que a notificação ociosa foi concluída. Em seguida, o NDIS conclui a operação de suspensão seletiva fazendo a transição do adaptador de rede para um estado de energia total.

    Quando NdisMIdleNotificationComplete é chamado, o NDIS executa as seguintes etapas:

    1. Problemas de NDIS IRP_MN_SET_POWER para o motorista de ônibus subjacente. Esse IRP solicita que o driver de barramento defina o estado de energia do adaptador de rede como PowerDeviceD0.

    2. O NDIS emite uma solicitação de conjunto de OID de OID_PNP_SET_POWER para o driver de miniporto. Nesta solicitação OID, o NDIS especifica que o adaptador de rede agora está fazendo a transição para um estado de energia total de NdisDeviceStateD0.

      Quando ele manipula essa solicitação de conjunto de OID, o driver prepara o adaptador para a operação de energia total. Isso inclui restaurar os mecanismos de recebimento e envio para o mesmo estado em que estavam antes da transição para o estado de baixa potência. Em seguida, o driver conclui a solicitação OID com NDIS_STATUS_SUCCESS.

A figura a seguir mostra as etapas envolvidas quando o NDIS cancela uma notificação ociosa que foi emitida para um driver de miniporto para um adaptador de rede USB.

Diagrama que mostra o processo de retomada de notificação ociosa para um adaptador de rede USB.

Cancelando a notificação ociosa devido a eventos de ativação

Antes que o adaptador de rede seja transferido para um estado de baixa potência, o NDIS emite uma solicitação de conjunto de OID de OID_PM_PARAMETERS para o adaptador de rede. Essa solicitação OID especifica os tipos de eventos de ativação que o adaptador pode sinalizar para retomar para um estado de energia total. Para suspensão seletiva do NDIS, o adaptador é configurado para sinalizar qualquer um dos seguintes eventos de ativação:

O NDIS e o driver de miniporta seguem estas etapas quando o NDIS cancela uma notificação ociosa devido a um sinal de ativação gerado pelo adaptador de rede:

  1. O motorista do ônibus conclui a IRP_MN_WAIT_WAKE emitida pelo NDIS antes de fazer a transição do adaptador para um estado de baixa potência. Ao concluir o IRP, o motorista do ônibus notifica o NDIS de que o adaptador de rede gerou um sinal de ativação.

  2. O NDIS chama a função de manipulador MiniportCancelIdleNotification para iniciar a operação de cancelamento da notificação ociosa. As etapas envolvidas nesta operação são as mesmas descritas em Cancelar a notificação ociosa devido à atividade de driver excessiva.

Por exemplo, a figura a seguir mostra as etapas envolvidas quando o NDIS cancela uma notificação ociosa devido a um evento de ativação sinalizado por um adaptador de rede USB.

Diagrama que mostra o processo de ativação de notificação ociosa do NDIS para um adaptador de rede USB.