Indicazioni sullo stato del motivo di attivazione di NDIS

Se un driver miniport supporta le indicazioni sullo stato del motivo di riattivazione NDIS (NDIS_STATUS_PM_WAKE_REASON), deve generare questa indicazione di stato immediatamente dopo che la scheda di rete genera un evento di riattivazione e la scheda riprende a uno stato di alimentazione completa.

Nota Il supporto per le indicazioni sullo stato del motivo di riattivazione di NDIS è facoltativo per i driver miniport (MB) Mobile Broadband.

Il driver miniport è configurato con parametri di risparmio energia (PM) tramite una richiesta di set OID (Object Identifier) di OID_PM_PARAMETERS. Questa richiesta OID specifica i parametri PM tramite una struttura NDIS_PM_PARAMETERS .

La struttura NDIS_PM_PARAMETERS specifica i parametri per i tipi seguenti di eventi di riattivazione .

Eventi di riattivazione dei pacchetti ricevuti
La scheda di rete genera un evento di riattivazione se riceve un pacchetto che corrisponde a un modello WOL (wake-on-LAN). I modelli WOL includono quanto segue:

  • Modelli WOL indipendenti dai supporti, ad esempio pacchetti magic o modelli di dati TCP/IP all'interno del payload del pacchetto. Ad esempio, la struttura NDIS_PM_PARAMETERS potrebbe specificare un modello WOL per un frame TCP SYN.

  • Modelli WOL specifici del supporto, ad esempio un pacchetto di identificatore di richiesta EAPOL o un messaggio SMS (Short Message Service) (MB).

  • Modelli con caratteri jolly che corrispondono a un filtro di ricezione specificato tramite una richiesta del set OID di OID_GEN_CURRENT_PACKET_FILTER.

Nota Per questo tipo di indicazione dello stato del motivo di riattivazione, la scheda di rete deve essere in grado di salvare il pacchetto ricevuto. Il driver deve restituire il pacchetto ricevuto all'interno dell'indicazione dello stato.

I modelli WOL vengono specificati tramite il membro EnabledWoLPacketPatterns della struttura NDIS_PM_PARAMETERS .

Eventi di riattivazione specifici dei supporti
La scheda di rete genera un evento di riattivazione a causa di un motivo specifico del supporto, ad esempio una disassociazione da un punto di accesso 802.11 (AP) o la ricezione di un messaggio SMS (Short Message Service) a banda larga mobile (MB).

Gli eventi di riattivazione di questo tipo vengono specificati tramite il membro MediaSpecificWakeUpEvents della struttura NDIS_PM_PARAMETERS .

Eventi di riattivazione indipendenti dai supporti
La scheda di rete genera un evento di riattivazione a causa di un motivo indipendente dal supporto, ad esempio la connessione multimediale o la disconnessione.

Gli eventi di riattivazione di questo tipo vengono specificati tramite il membro WakeUpFlags della struttura NDIS_PM_PARAMETERS .

Se la scheda di rete ha generato un segnale di riattivazione, il driver miniport deve emettere un'indicazione di stato NDIS_STATUS_PM_WAKE_REASON. Il driver esegue questa operazione mentre gestisce la richiesta del set OID di OID_PNP_SET_POWER per la transizione dell'adattatore a uno stato di alimentazione completa.

Nota Il driver miniport deve emettere un'indicazione di stato NDIS_STATUS_PM_WAKE_REASON prima di emettere un'indicazione di stato correlata all'evento di riattivazione. Ad esempio, se l'evento di riattivazione è dovuto a una modifica dello stato di connettività multimediale, il driver miniport deve emettere un'indicazione di stato NDIS_STATUS_LINK_STATE dopo aver rilasciato l'indicazione di stato NDIS_STATUS_PM_WAKE_REASON.

Quando il driver miniport genera l'indicazione dello stato NDIS_STATUS_PM_WAKE_REASON , è necessario seguire questa procedura:

  1. Il driver miniport deve allocare un buffer sufficiente per contenere quanto segue:

    • Struttura NDIS_PM_WAKE_REASON .

    • Struttura NDIS_PM_WAKE_PACKET insieme al pacchetto ricevuto (pacchetto di riattivazione) che ha causato la generazione dell'evento di riattivazione della scheda di rete.

      Nota Il driver miniport non deve allocare questo spazio del buffer se indica eventi di riattivazione multimediali o indipendenti dai supporti.

  2. Il driver miniport inizializza una struttura NDIS_PM_WAKE_REASON all'inizio del buffer. Il driver imposta il membro WakeReason su un valore di enumerazione NDIS_PM_WAKE_REASON_TYPE che definisce il tipo dell'evento di riattivazione.

    Ad esempio, se il driver miniport indica un evento di riattivazione del pacchetto ricevuto, deve impostare il membro WakeReason su NdisWakeReasonPacket. In caso contrario, il driver imposta il membro WakeReason sul valore di enumerazione che descrive meglio l'evento di riattivazione indipendente dal supporto o multimediale.

  3. Se il miniportdriver emette un'indicazione di stato NDIS_STATUS_PM_WAKE_REASON per un evento di riattivazione del pacchetto ricevuto, è necessario seguire questa procedura:

    1. Il driver miniport imposta il membro InfoBufferOffset sull'offset di una struttura NDIS_PM_WAKE_PACKET che segue la struttura NDIS_PM_WAKE_REASON nel buffer.

      Nota Il driver miniport deve allineare l'inizio della struttura NDIS_PM_WAKE_PACKET su un limite a 64 bit.

    2. Il driver miniport imposta il membro InfoBufferSize sulla dimensione della struttura NDIS_PM_WAKE_PACKET più le dimensioni del pacchetto che ha causato l'evento di riattivazione .

    3. Il driver miniport inizializza una struttura NDIS_PM_WAKE_PACKET seguendo la struttura NDIS_PM_WAKE_REASON nel buffer.

      Il driver miniport imposta i membri della struttura NDIS_PM_WAKE_PACKET come indicato di seguito:

      • Il membro PatternId è impostato sull'identificatore del modello WOL che corrisponde al pacchetto di riattivazione. Questo identificatore viene specificato dal membro PatternId della struttura NDIS_PM_WOL_PATTERN passata al driver durante una richiesta di set OID di OID_PM_ADD_WOL_PATTERN.

      • Il membro PatternFriendlyName è impostato sulla descrizione leggibile dall'utente del modello di riattivazione specificato dal membro PatternId . Questo valore viene specificato dal membro FriendlyName della struttura NDIS_PM_WOL_PATTERN .

        Nota Il driver miniport non deve inizializzare questo membro. NDIS imposta il membro PatternFriendlyName sul valore corretto prima di passare la struttura NDIS_PM_WAKE_PACKET a driver sovralizzanti.

      • Il membro OriginalPacketSize è impostato sulla lunghezza del pacchetto ricevuto dalla scheda di rete.

      • Il membro SavedPacketSize deve essere impostato sulla lunghezza del pacchetto segnalato tramite l'indicazione di stato NDIS_STATUS_PM_WAKE_REASON.

        Nota Il valore di questo membro non deve essere maggiore del valore impostato dal driver miniport nel membro MaxWoLPacketSaveBuffer della struttura NDIS_PM_CAPABILITIES . Il driver restituisce questa struttura quando segnala le funzionalità di indicazione del pacchetto di riattivazione. Per altre informazioni, vedere Reporting Wake Reason Status Indication Capabilities .For more information, see Reporting Wake Reason Status Indication Capabilities.

      • Il membro SavedPacketOffset deve essere impostato sull'offset, in unità di byte, sul pacchetto di riattivazione che segue la struttura NDIS_PM_WAKE_PACKET .

        Nota Il driver miniport deve allineare l'inizio del pacchetto di riattivazione su un limite a 64 bit nel buffer.

    4. Il miniport copia il pacchetto di riattivazione nel buffer in corrispondenza dell'offset specificato dal membro SavedPacketOffset .

  4. Se il driver miniport emette un'indicazione di stato NDIS_STATUS_PM_WAKE_REASON per un evento di riattivazione multimediale o indipendente dal supporto, imposta i membri infoBufferOffset e InfoBufferSizedella struttura NDIS_PM_WAKE_REASON su zero.

  5. Il driver miniport inizializza una struttura NDIS_STATUS_INDICATION . Il driver imposta il membro StatusCode su NDIS_STATUS_PM_WAKE_REASON. Il driver imposta anche il membro StatusBuffer per puntare al buffer e imposta statusBufferLength sulla lunghezza, in byte, del buffer.

  6. Il driver miniport chiama NdisMIndicateStatusEx e passa un puntatore alla struttura NDIS_STATUS_INDICATION nel parametro StatusIndication .

Nota Dopo che il driver miniport rilascia l'indicazione di stato NDIS_STATUS_PM_WAKE_REASON per un evento di riattivazione del pacchetto ricevuto, deve indicare questo pacchetto ricevuto chiamando NdisMIndicateReceiveNetBufferLists.