Condividi tramite


OID_PNP_SET_POWER

L'OID OID_PNP_SET_POWER notifica a un driver miniport che la scheda di rete sottostante passerà allo stato di alimentazione del dispositivo specificato in InformationBuffer. Lo stato di alimentazione del dispositivo viene specificato come uno dei valori di NDIS_DEVICE_POWER_STATE seguenti:

  • NdisDeviceStateD0
  • NdisDeviceStateD1
  • NdisDeviceStateD2
  • NdisDeviceStateD3

Una richiesta di OID_PNP_SET_POWER può essere preceduta da una richiesta di OID_PNP_QUERY_POWER .

A partire da NDIS 6.30, NDIS non sospende e riavvia i driver NDIS nello stack di driver durante le transizioni di stato di alimentazione se sono vere le condizioni seguenti:

  • Il driver miniport sottostante imposta il flag NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND nella struttura NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . Il driver passa un puntatore a questa struttura nella chiamata alla funzione NdisMSetMiniportAttributes .

  • Tutti i driver di filtro eccessivamente collegati al driver miniport supportano NDIS 6.30 o versioni successive di NDIS.

  • Tutti i driver di protocollo eccessivamente associati al driver miniport supportano NDIS 6.30 o versioni successive di NDIS.

Transizione a uno stato di Low-Power (D1-D3)

Quando il driver miniport gestisce una richiesta set di OID_PNP_SET_POWER per passare a uno stato a basso consumo, deve eseguire le operazioni seguenti:

  • Preparare completamente la scheda di rete per lo stato di alimentazione del dispositivo di rete indicato. L'attività eseguita dal driver miniport per eseguire questa operazione è dipendente dal dispositivo.

  • Attendere che vengano restituite le chiamate alla funzione NdisMIndicateReceiveNetBufferLists .

  • Attendere il completamento delle richieste di invio elaborate dalla scheda di rete. Al termine, il driver miniport deve chiamare la funzione NdisMSendNetBufferListsComplete . Il driver deve impostare il membro Status in ogni struttura NET_BUFFER_LIST sul valore NDIS_STATUS_Xxx appropriato.

  • Completare tutte le richieste di invio in sospeso chiamando la funzione NdisMSendNetBufferListsComplete . Il driver deve impostare il membro Status in ogni struttura NET_BUFFER_LISTsu NDIS_STATUS_LOW_POWER_STATE.

  • Rifiutare immediatamente tutte le nuove richieste di invio inviate alla funzione MiniportSendNetBufferLists chiamando la funzione NdisMSendNetBufferListsComplete . Il driver deve impostare il membro Status in ogni struttura NET_BUFFER_LISTsu NDIS_STATUS_LOW_POWER_STATE.

Anche il driver miniport che supporta NDIS 6.30 e versioni successive di NDIS deve eseguire le operazioni seguenti:

  • Non attendere il completamento della ricezione di indicazioni in sospeso tramite chiamate alla relativa funzione MiniportReturnNetBufferLists . Inoltre, il driver miniport non deve modificare la struttura NET_BUFFER_LIST o i dati per i pacchetti che sono in attesa di essere completati.

  • Gestire la richiesta di OID_PNP_SET_POWER a uno stato a basso consumo dagli stati dell'adattatore Sospeso o In esecuzione. Per altre informazioni su questi stati, vedere Stati e operazioni dell'adapter Miniport.

Prima che la scheda di rete passi allo stato D3, il driver miniport deve disattivare tutto sotto il controllo del driver miniport eseguendo le attività seguenti:

  • Disabilitare gli interrupt e il motore DMA nella scheda di rete.

  • Arrestare il motore di ricezione nella scheda di rete.

  • Non deallocare o modificare i descrittori di ricezione e i buffer di pacchetti associati alle indicazioni di ricezione in sospeso.

  • Annullare tutti i timer NDIS.

Nota Un driver miniport non può accedere alla scheda di rete dopo che il driver del bus ha passato la scheda di rete allo stato D3.

Transizione allo stato Full-Power (D0)

Quando il driver miniport gestisce una richiesta set di OID_PNP_SET_POWER per passare a uno stato di alimentazione completa, deve ripristinare il motore di ricezione della scheda di rete allo stesso stato in cui il motore di ricezione si trovava prima che la scheda sia stata passata allo stato a basso consumo.

Nota Il driver miniport non deve accedere o modificare i buffer di ricezione associati alle indicazioni di ricezione in sospeso.

NDIS chiama la funzione MiniportRestart del driver miniport dopo la transizione a uno stato di alimentazione completa solo se NDIS ha chiamato la funzione MiniportPause del driver prima della transizione a uno stato a basso consumo.

Nota Un driver intermedio deve sempre restituire NDIS_STATUS_SUCCESS a una query di OID_PNP_SET_POWER. Un driver intermedio non deve mai propagare una richiesta di OID_PNP_SET_POWER a un driver miniport sottostante.

Codici di stato restituiti

La funzione MiniportOidRequest del driver miniport restituisce uno dei valori seguenti per questa richiesta:

Termine Descrizione

NDIS_STATUS_SUCCESS

Il driver miniport ha completato correttamente la richiesta.

NDIS_STATUS_PENDING

Il driver miniport completerà la richiesta in modo asincrono. Al termine dell'elaborazione, il driver miniport deve avere esito positivo alla richiesta chiamando la funzione NdisMOidRequestComplete , passando NDIS_STATUS_SUCCESS per il parametro Status .

NDIS_STATUS_NOT_ACCEPTED

Il driver miniport viene reimpostato.

Requisiti

Versione

Supportato per NDIS 5.1 e NDIS 6.0 e versioni successive.

Intestazione

Ntddndis.h (include Ndis.h)

Vedi anche


MiniportInitializeEx

MiniportPause

MiniportRestart

MiniportReturnNetBufferLists

MiniportSendNetBufferLists

NDIS_DEVICE_POWER_STATE

NdisMIndicateReceiveNetBufferLists

NdisMSendNetBufferListsComplete

NET_BUFFER_LIST