Condividi tramite


Gestione della notifica di inattività di sospensione selettiva NDIS

NDIS avvia un'operazione di sospensione selettiva se si verifica uno degli eventi seguenti:

  • La scheda di rete è stata inattiva per più tempo rispetto al periodo di inattività previsto. La durata di questo periodo di timeout viene specificata dal valore della parola chiave INF *SSIdleTimeout standard. Per ulteriori informazioni su questa parola chiave, vedere Parole chiave INF Standardizzate per NDIS Selective Suspend.

    Per altre informazioni su come NDIS determina che una scheda di rete è inattiva, vedere Come NDIS rileva le schede di rete inattive.

  • Il sistema conforme alla tecnologia Always On Always Connected (AOAC) sta passando a uno stato di standby connesso.

Tramite l'operazione di sospensione selettiva, la scheda di rete viene passata a uno stato a basso consumo. NDIS avvia questa operazione chiamando la funzione del gestore MiniportIdleNotification per inviare una notifica di inattività al driver miniport.

Il driver miniport potrebbe dover eseguire azioni dipendenti dal bus per gestire la notifica di inattività. La figura seguente illustra i passaggi necessari per la gestione di una notifica di inattività da parte di un driver miniport per una scheda di rete USB.

Diagramma che mostra l'operazione di notifica inattiva.

Questo argomento include le informazioni seguenti su come gestire una notifica di inattività di sospensione selettiva NDIS:

Linee guida per la gestione della chiamata a MiniportIdleNotification

Linee guida per la chiamata a NdisMIdleNotificationConfirm

Annullamento e Completamento di una Notifica di Inattività Selettiva NDIS

Linee guida per la gestione della chiamata a MiniportIdleNotification

NDIS e il driver miniport seguono questi passaggi quando NDIS chiama MiniportIdleNotification:

  1. NDIS chiama la funzione gestore MiniportIdleNotification per notificare al driver che la scheda di rete sottostante sembra essere inattiva. NDIS imposta il parametro ForceIdle della funzione handler MiniportIdleNotification a uno dei seguenti valori:

    • NDIS imposta il parametro ForceIdle su FALSE quando la scheda di rete è stata inattiva per più tempo rispetto al periodo di timeout di inattività.

    • NDIS imposta il parametro ForceIdle su TRUE quando un sistema conforme alla tecnologia Always On Always Connected (AOAC) sta passando a uno stato di Standby connesso.

  2. Quando viene chiamato MiniportIdleNotification , il driver miniport può opporre veto alla notifica di inattività e all'operazione di sospensione selettiva restituendo NDIS_STATUS_BUSY. Ad esempio, il driver potrebbe annullare la notifica di inattività se rileva attività nella scheda di rete.

    Se il driver miniport ha posto il veto su la notifica di inattività, NDIS riavvia il monitoraggio dell'attività sulla scheda di rete. Se l'adattatore diventa di nuovo inattivo entro il periodo di timeout di inattività, NDIS chiama MiniportIdleNotification.

    Nota Il driver miniport non deve veto la notifica di inattività se il parametro ForceIdle è impostato su TRUE. In questo caso, il driver deve continuare con l'operazione di sospensione selettiva.

  3. Se il driver miniport non boccia la notifica di inattività, deve eseguire operazioni specifiche del bus per preparare la scheda di rete per un'operazione di sospensione parziale. Ad esempio, il driver miniport per una scheda di rete USB esegue i passaggi seguenti per determinare se la scheda di rete può passare a uno stato a basso consumo:

    1. Il driver miniport chiama IoCallDriver per emettere un pacchetto di richiesta di I/O per una richiesta USB inattiva (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) al driver bus USB sottostante. In questo IRP, il driver miniport deve specificare una routine di callback e di completamento.

      Il driver del bus USB non completa immediatamente l'IRP. L'IRP viene lasciato in uno stato in sospeso durante la transizione al basso consumo. Il conducente dell'autobus completa l'IRP in un secondo momento quando si verifica uno degli eventi seguenti:

      • Il driver miniport annulla l'IRP.

      • È necessaria una modifica dello stato di alimentazione del sistema.

      • Il dispositivo viene rimosso dall'hub USB.

    2. Dopo che il driver del bus USB determina che può mettere la scheda di rete in uno stato a basso consumo, chiama la routine di callback IRP del driver miniport. Questa chiamata conferma che la scheda di rete può passare a uno stato a basso consumo.

      Per linee guida su come scrivere una routine di callback per l'IRP della richiesta inattiva USB, consultare Implementazione di una routine di callback per l'IRP della richiesta inattiva USB.

  4. Una volta che il driver miniport ha completato la preparazione della scheda di rete per un'operazione di sospensione selettiva, chiama NdisMIdleNotificationConfirm. In questa chiamata, il driver miniport specifica lo stato di alimentazione più basso a cui è possibile eseguire la transizione della scheda di rete.

    A seconda dei requisiti del bus per le operazioni di sospensione selettiva, il driver miniport chiama NdisMIdleNotificationConfirm in modo sincrono nel contesto della chiamata a MiniportIdleNotification o in modo asincrono dopo MiniportIdleNotification. Ad esempio, il driver miniport per una scheda di rete USB chiama NdisMIdleNotificationConfirm nel contesto della routine di callback per la richiesta di inattività USB. Il driver del bus USB chiama la routine di callback in modo sincrono durante la chiamata a IoCallDriver o in modo asincrono dopo che MiniportIdleNotification ha restituito.

  5. Se è possibile eseguire la transizione della scheda di rete a uno stato a basso consumo, il driver miniport restituisce NDIS_STATUS_PENDING dalla chiamata a MiniportIdleNotification.

    Nota Il driver miniport restituisce NDIS_STATUS_PENDING perché la notifica di inattività non viene completata finché il driver non chiama NdisMIdleNotificationComplete. Il driver miniport non dovrebbe restituire NDIS_STATUS_SUCCESS da MiniportIdleNotification.

Il driver miniport deve eseguire le operazioni seguenti fino a quando la scheda di rete non viene sospesa e passata a uno stato a basso consumo:

Linee guida per la chiamata a NdisMIdleNotificationConfirm

NDIS e il driver miniport seguono questi passaggi quando il driver miniport chiama NdisMIdleNotificationConfirm:

  1. NDIS emette IRP_MN_WAIT_WAKE al driver del bus sottostante. Questo protocollo IRP consente al conducente del bus di riattivare la scheda di rete in risposta a un segnale di riattivazione esterno.

  2. NDIS emette una richiesta di impostazione dell'identificatore di oggetto (OID) di OID_PM_PARAMETERS al driver miniport. Questa richiesta OID è associata a una struttura NDIS_PM_PARAMETERS che specifica le impostazioni in cui la scheda di rete genera un evento di riattivazione.

    Il driver miniport deve seguire queste linee guida quando elabora i membri della struttura NDIS_PM_PARAMETERS:

    • Se il parametro ForceIdle della funzione gestore MiniportIdleNotification è impostato su FALSE, NDIS imposta unicamente il flag NDIS_PM_SELECTIVE_SUSPEND_ENABLED nel membro WakeUpFlags della struttura NDIS_PM_PARAMETERS. In questo caso, la scheda di rete può segnalare un evento di riattivazione quando si verifica uno degli eventi seguenti:

      • La scheda di rete riceve un pacchetto che corrisponde a un filtro di pacchetti di ricezione. L'adattatore è configurato per utilizzare questi filtri tramite richieste di impostazione OID di OID_GEN_CURRENT_PACKET_FILTER.

      • La scheda di rete rileva altri eventi esterni che richiedono l'elaborazione dallo stack di driver di rete, ad esempio quando lo stato del collegamento cambia in disconnessione multimediale o supporto connesso.The network adapter detects other external events that require processing by the networking driver stack, such as when the link state changes to media disconnect or media connected.

    • Se il parametro ForceIdle della funzione gestore MiniportIdleNotification è stato impostato su TRUE, NDIS non imposta il flag NDIS_PM_SELECTIVE_SUSPEND_ENABLED nel membro WakeUpFlags della struttura NDIS_PM_PARAMETERS. In questo caso, NDIS imposta altri membri nella struttura NDIS_PM_PARAMETERS per gli eventi di riattivazione non correlati alla sospensione selettiva NDIS.

      Nota NDIS imposta il parametro ForceIdle su TRUE solo quando un sistema conforme alla tecnologia Always On Always Connected (AOAC) sta passando a uno stato di standby connesso.

      Il driver completa la richiesta OID con NDIS_STATUS_SUCCESS.

      Nota Se NDIS imposta il flag NDIS_PM_SELECTIVE_SUSPEND_ENABLED nel WakeUpFlags membro della struttura NDIS_PM_PARAMETERS, invia direttamente al driver miniport la richiesta di impostazione OID di OID_PM_PARAMETERS. In questo modo NDIS può ignorare l'elaborazione filtrando i driver nello stack di driver di rete.

  3. Al termine della richiesta di impostazione OID di OID_PM_PARAMETERS da parte di NDIS, viene emessa una richiesta di impostazione OID OID_PNP_SET_POWER al driver miniport.

    Quando gestisce questa richiesta di set OID, il driver prepara la scheda di rete per la transizione allo stato a basso consumo specificato nella richiesta OID. Il driver deve completare tutte le operazioni in sospeso nel modo seguente:

    • Il driver miniport attende che tutti i pacchetti di ricezione indicati in precedenza vengano restituiti tramite chiamate a MiniportReturnNetBufferLists.

    • Il driver miniport attende il completamento delle richieste di invio elaborate dall'hardware. Al termine delle richieste, il driver miniport deve chiamare NdisMSendNetBufferListsComplete.

    • Il driver miniport completa tutte le richieste di invio in sospeso chiamando NdisMSendNetBufferListsComplete.

    • Il driver miniport deve annullare tutti i timer NDIS e le attività di lavoro in sospeso. Dopo l'annullamento di questi, il driver deve attendere il completamento dei timer e degli elementi di lavoro.

    • Il driver miniport deve portare la scheda di rete in uno stato di quiete. Ad esempio, il driver deve annullare tutti i timer hardware.

    Il driver miniport configura la scheda di rete sottostante per abilitare gli eventi di riattivazione precedentemente specificati nella richiesta del set di OID OID_PM_PARAMETERS. Dopo aver preparato la scheda di rete per la transizione a basso consumo, il driver miniport completa la richiesta di set OID di OID_PNP_SET_POWER con NDIS_STATUS_SUCCESS.

  4. NDIS rilascia un IRP_MN_SET_POWER al conducente del bus sottostante. Questo IRP richiede che la scheda di rete venga passata a uno stato a basso consumo.

    Nota Durante un'operazione di sospensione selettiva, la scheda di rete verrà passata allo stato di alimentazione del dispositivo specificato nella chiamata a NdisMIdleNotificationConfirm. Il driver miniport specifica questo stato di alimentazione del dispositivo nel parametro IdlePowerState di questa funzione.

Al termine dell'IRP, NDIS ritorna dalla chiamata a NdisMIdleNotificationConfirm.

Annullamento e completamento della notifica di inattività di sospensione selettiva NDIS

Dopo l'emissione della notifica di inattività, può essere annullata e completata nei modi seguenti:

  • NDIS può annullare la notifica di inattività in sospeso se sono vere le condizioni seguenti:

    • Un protocollo sovraordinato o un driver di filtro genera una richiesta di invio di pacchetti o una richiesta OID al driver miniport.

    • L'adattatore sottostante segnala un evento di riattivazione, ad esempio la ricezione di un pacchetto che corrisponde a un modello di riattivazione LAN (WOL) o il rilevamento di una modifica nello stato della connessione multimediale.

    NDIS annulla la notifica di inattività chiamando MiniportCancelIdleNotification. Quando questa funzione del gestore viene chiamata, il driver miniport annulla tutti gli IRP specifici del bus che potrebbero essere stati rilasciati in precedenza per la notifica di inattività. Infine, il driver miniport chiama NdisMIdleNotificationComplete per completare la notifica di inattività.

    Per altre informazioni su come NDIS annulla la notifica di inattività, vedere Annullamento della notifica di inattività selettiva NDIS.

  • Dopo che la scheda di rete è in stato a basso consumo, il driver miniport può completare la notifica di inattività stessa per riprendere la scheda a uno stato di alimentazione completa. I motivi per eseguire questa operazione sono specifici della progettazione e dei requisiti del driver e dell'adattatore. Il driver miniport completa la notifica di inattività chiamando NdisMIdleNotificationComplete.

    Per ulteriori informazioni su come il driver miniport porta a termine la notifica di inattività, vedere Completamento della notifica di inattività selettiva NDIS.