Concluindo 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. Para obter mais informações sobre essa operação, consulte Manipulando a notificação ociosa de suspensão seletiva do NDIS.

Depois que a notificação ociosa é emitida, o driver de miniporto conclui a notificação ociosa de suspensão seletiva do NDIS sob as seguintes condições:

  • O NDIS cancela a notificação ociosa chamando a função de manipulador MiniportCancelIdleNotification do driver de miniporto subjacente.

  • O driver de miniporte conclui a notificação ociosa em si. Os motivos para fazer isso são específicos para o design e os requisitos do driver e do adaptador. Por exemplo, o driver poderá concluir a notificação ociosa se detectar a atividade de recebimento no adaptador de rede.

Nota O driver de miniporte não pode cancelar explicitamente a notificação ociosa. Quando o NDIS cancela a notificação ociosa, o driver de miniporto deve concluir a notificação conforme descrito neste tópico. Para obter mais informações, consulte Canceling the NDIS Selective Suspend Idle Notification(Canceling the NDIS Selective Suspend Idle Notification).

Em ambos os casos, o driver de miniporto deve concluir a notificação ociosa para retomar o adaptador para um estado de energia total. Para concluir a notificação ociosa, o driver de miniporto 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 fim, o driver chama NdisMIdleNotificationComplete para notificar o NDIS de que o adaptador de rede pode ser transferido para um estado de energia total.

Por exemplo, o driver de miniporto para um adaptador de rede USB conclui uma notificação ociosa seguindo estas etapas:

  1. O driver de miniporta cancela a solicitação ociosa USB pendente (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP. 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.

    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.

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 .

Depois que o driver de miniporto cancelar todos os IRPs específicos do barramento para a notificação ociosa, ele chamará 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 (identificador de objeto) de OID_PNP_SET_POWER para o driver de miniport. 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 trata 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 driver de miniporto conclui uma notificação ociosa para um adaptador de rede USB.

Diagrama ilustrando as etapas envolvidas na conclusão de uma notificação ociosa para um adaptador de rede USB.

Nota Quando o driver de miniporto conclui uma notificação ociosa, ele não deve chamar NdisMIdleNotificationConfirm para uma notificação ociosa que foi concluída anteriormente por meio de uma chamada para NdisMIdleNotificationComplete.