Condividi tramite


Annullamento della notifica di inattività selettiva di NDIS

Se la scheda di rete diventa inattiva per un periodo di timeout inattivo, NDIS avvia l'operazione di sospensione selettiva. Tramite questa operazione, la scheda di rete viene passata a uno stato di bassa potenza. NDIS inizia questa operazione inviando una notifica inattiva al driver miniport. Per altre informazioni su questa operazione, vedere Gestione della notifica di sospensione selettiva NDIS.

NDIS chiama la funzione del gestore MiniportIdleNotification per notificare al driver che la scheda di rete sottostante sembra essere inattiva. Dopo l'emissione della notifica inattiva, NDIS annulla una notifica inattiva se una o più delle condizioni seguenti sono vere:

NDIS annulla la notifica inattiva chiamando la funzione del gestore MiniportCancelIdleNotification del driver miniport sottostante. Quando questa funzione viene chiamata, il driver miniport deve completare la notifica inattiva per riprendere l'adattatore in uno stato di alimentazione completa. Per linee guida su questo processo, vedere Completamento della notifica di sospensione selettiva NDIS.

Per altre informazioni su come implementare la funzione del gestore MiniportCancelIdleNotification, vedere Implementazione di una funzione del gestore MiniportCancelIdleNotification.

Annullamento della notifica inattiva a causa dell'attività del driver overlying

NDIS monitora le richieste e le richieste OID inviate a un driver miniport la cui scheda di rete è stata sospesa ed è in uno stato di bassa potenza. In questo caso, NDIS annulla la notifica inattiva in sospeso in modo che la scheda di rete possa riprendere a uno stato di alimentazione completa.

NDIS e il driver miniport seguono questa procedura quando viene annullata una notifica inattiva:

  1. NDIS chiama la funzione del gestore MiniportCancelIdleNotification per annullare una notifica inattiva in sospeso. Quando viene chiamata questa funzione del gestore, il driver miniport deve annullare eventuali pacchetti di richiesta I/O specifici del bus che potrebbero essere stati rilasciati in precedenza per la notifica inattiva.

    Ad esempio, quando viene chiamato MiniportCancelIdleNotification, il miniport per una scheda di rete USB esegue i passaggi seguenti:

    1. Il driver miniport annulla la richiesta di inattività USB in sospeso (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP. Il driver miniport ha precedentemente rilasciato questo IRP al driver del bus USB sottostante quando NDIS ha chiamato la funzione MiniportIdleNotification del driver. Il driver miniport annulla questo IRP chiamando IoCancelIrp.

    2. Quando il driver del bus annulla l'IRP della richiesta di inattività USB, chiama la routine di completamento del driver miniport per l'IRP. Questa chiamata notifica al driver che l'IRP viene completata e la scheda di rete può passare a uno stato di alimentazione completa. Dal contesto della routine di completamento, il driver chiama NdisMIdleNotificationComplete per notificare a NDIS che la scheda di rete può essere passata a uno stato di alimentazione completa.

    Nota A seconda delle dipendenze per annullare le richieste di inattività specifiche del bus, il driver miniport chiama NdisMIdleNotificationComplete in modo sincrono nel contesto della chiamata a MiniportCancelIdleNotification o in modo asincrono dopo la restituzione di MiniportCancelIdleNotification .

    Per altre informazioni su come implementare una routine di completamento di una richiesta di inattività USB, vedere Implementazione di una routine di completamento IRP richiesta di inattività USB.

  2. Dopo che il driver miniport annulla qualsiasi IRP specifico del bus per la notifica inattiva, chiama NdisMIdleNotificationComplete. Questa chiamata informa NDIS che la notifica inattiva è stata completata. NDIS completa quindi l'operazione di sospensione selettiva passando la scheda di rete a uno stato di alimentazione completa.

    Quando viene chiamato NdisMIdleNotificationComplete, NDIS esegue la procedura seguente:

    1. I problemi di NDIS IRP_MN_SET_POWER al driver del bus sottostante. Questo IRP richiede al driver del bus di impostare lo stato di alimentazione della scheda di rete su PowerDeviceD0.

    2. NDIS genera una richiesta di set OID di OID_PNP_SET_POWER al driver miniport. In questa richiesta OID, NDIS specifica che la scheda di rete sta ora passando a uno stato di alimentazione completa di NdisDeviceStateD0.

      Quando gestisce questa richiesta di set OID, il driver prepara l'adattatore per l'operazione di alimentazione completa. Ciò include il ripristino del motore di ricezione e invio allo stesso stato in cui erano presenti prima della transizione allo stato a bassa potenza. Il driver completa quindi la richiesta OID con NDIS_STATUS_SUCCESS.

Nella figura seguente vengono illustrati i passaggi coinvolti quando NDIS annulla una notifica inattiva rilasciata a un driver miniport per una scheda di rete USB.

Diagramma che mostra il processo di ripresa della notifica inattiva per una scheda di rete USB.

Annullamento della notifica inattiva a causa di eventi di riattivazione

Prima che la scheda di rete venga passata a uno stato a bassa potenza, NDIS invia una richiesta OID set di OID_PM_PARAMETERS alla scheda di rete. Questa richiesta OID specifica i tipi di eventi di riattivazione che l'adattatore può segnalare per riprendere uno stato di alimentazione completa. Per la sospensione selettiva di NDIS, la scheda è configurata per segnalare uno degli eventi di riattivazione seguenti:

NDIS e il driver miniport seguono questa procedura quando NDIS annulla una notifica inattiva a causa di un segnale di riattivazione generato dalla scheda di rete:

  1. Il driver del bus completa la IRP_MN_WAIT_WAKE rilasciata da NDIS prima di passare l'adattatore a uno stato a bassa potenza. Completando l'IRP, il driver del bus informa NDIS che la scheda di rete ha generato un segnale di riattivazione.

  2. NDIS chiama la funzione del gestore MiniportCancelIdleNotification per avviare l'operazione di annullamento della notifica inattiva. I passaggi coinvolti in questa operazione sono uguali a quanto descritto in Annullamento della notifica inattiva a causa dell'attività overlying driver.

Ad esempio, la figura seguente illustra i passaggi coinvolti quando NDIS annulla una notifica inattiva a causa di un evento di riattivazione segnalato da una scheda di rete USB.

Diagramma che mostra il processo di riattivazione della notifica inattiva di NDIS per una scheda di rete USB.