Stati e operazioni della coda
Per ogni coda, una scheda di rete deve supportare il seguente set di stati operativi:
Indefinito
La coda non è allocata. Per allocare una coda, un driver overlying invia una richiesta OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE .
Allocata
Lo stato Allocato è lo stato iniziale per una coda. Quando una coda è nello stato Allocato, il driver overlying imposta in genere i filtri nella coda con l'OID OID_RECEIVE_FILTER_SET_FILTER o completa l'allocazione della coda con la richiesta OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE .
Set
Nello stato Imposta , una coda ha almeno un filtro allocato, ma il driver overlying non ha inviato l'OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE .
Corsa
Nello stato In esecuzione la coda include filtri impostati, l'allocazione della coda è completa e l'adattatore miniport indica i pacchetti di ricezione per la coda.
Pausa
Nello stato Sospeso la scheda di rete non indica i dati di rete ricevuti per la coda. Non sono stati impostati filtri nella coda prima della richiesta OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE o tutti i filtri impostati nella coda sono stati cancellati con la richiesta OID OID_RECEIVE_FILTER_CLEAR_FILTER .
DMA arrestato
Nello stato DMA Arrestato , un driver miniport ha ricevuto una richiesta OID OID_RECEIVE_FILTER_FREE_QUEUE . Quando il DMA viene arrestato e il driver ha emesso l'indicazione di stato DMA arrestata (con NDIS_STATUS_RECEIVE_QUEUE_STATE), il driver entra nello stato freeing.
Liberare
Nello stato freeing , un driver miniport completa le operazioni necessarie per arrestare le operazioni di invio e ricezione per la coda e rilascia le risorse associate. Al termine di tutte le indicazioni di ricezione in sospeso, la coda viene eliminata e la coda non è definita.
Nella tabella seguente le intestazioni sono gli stati della coda. Nella prima colonna sono elencati gli eventi principali. Il resto delle voci nella tabella specifica lo stato successivo immesso dalla coda dopo che si verifica un evento all'interno di uno stato. Le voci vuote rappresentano combinazioni di eventi/stato non valide.
Event \ State | Non definito | Allocato | Set | In esecuzione | Paused | Arrestare DMA | Liberare |
---|---|---|---|---|---|---|---|
OID_RECEIVE_FILTER_ALLOCATE_QUEUE - metodo (set) |
Allocato |
||||||
OID_RECEIVE_FILTER_QUEUE_PARAMETERS - richiesta del metodo (query) |
Allocato |
Set |
In esecuzione |
Paused |
|||
OID_RECEIVE_FILTER_QUEUE_PARAMETERS : impostare la richiesta |
Allocato |
Set |
In esecuzione |
Paused |
|||
OID_RECEIVE_FILTER_SET_FILTER - richiesta del metodo (set) |
Set |
Set |
In esecuzione |
In esecuzione |
|||
OID_RECEIVE_FILTER_CLEAR_FILTER : impostare la richiesta (ultimo filtro) |
Allocato |
Paused |
|||||
OID_RECEIVE_FILTER_CLEAR_FILTER : impostare la richiesta (non l'ultimo filtro) |
Set |
In esecuzione |
|||||
OID_RECEIVE_FILTER_ENUM_FILTERS - metodo (richiesta di query) |
Allocato |
Set |
In esecuzione |
Paused |
|||
OID_RECEIVE_FILTER_PARAMETERS - richiesta del metodo (query) |
Set |
In esecuzione |
|||||
OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - richiesta del metodo (set) |
Paused |
In esecuzione |
|||||
Ricevere un pacchetto |
In esecuzione |
||||||
OID_RECEIVE_FILTER_FREE_QUEUE richiesta set |
Arrestare DMA |
Arrestare DMA |
|||||
DMA viene arrestato e NDIS_STATUS_RECEIVE_QUEUE_STATE indicazione dello stato è stata inviata (nota: DMA è stato probabilmente già arrestato in stato Allocato o Sospeso) |
Liberare |
||||||
Tutte le indicazioni di ricezione sono complete e le risorse della coda vengono liberate |
Non definito |
Nota Gli eventi elencati nella tabella precedente includono alcuni eventi secondari che non generano una modifica dello stato. Questi eventi secondari sono inclusi nella tabella per specificare gli stati in cui questi eventi sono validi.
Gli eventi della coda primaria sono definiti come segue:
OID_RECEIVE_FILTER_ALLOCATE_QUEUE - richiesta del metodo (set)
Un driver eccessivamente allocato a una coda. Per altre informazioni sull'allocazione delle code, vedere Allocazione e rilascio di code di macchine virtuali.
OID_RECEIVE_FILTER_SET_FILTER - richiesta del metodo (set)
Un driver overlying imposta un filtro in una coda. Se il driver overlying non ha inviato l'OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE , la coda si trova nello stato Set. In caso contrario, la coda si trova nello stato In esecuzione. Per altre informazioni sull'impostazione dei filtri nelle code, vedere Impostazione e cancellazione dei filtri VMQ.
OID_RECEIVE_FILTER_CLEAR_FILTER : impostare la richiesta
Un driver eccessivamente cancellato un filtro in una coda. Se l'ultimo filtro è stato cancellato in una coda in esecuzione, il DMA può essere arrestato; ricevere indicazioni vengono arrestate e la coda deve essere cancellata dei dati ricevuti, se presenti. Per altre informazioni sulla cancellazione dei filtri nelle code, vedere Impostazione e cancellazione dei filtri VMQ.
OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE - richiesta del metodo (set)
Un driver overlying ha completato l'allocazione della coda. Se sono presenti filtri impostati nella coda, si trova nello stato In esecuzione e può essere avviata l'indicazione di ricezione. Per altre informazioni sul completamento dell'allocazione della coda, vedere Allocazione e rilascio di code di macchine virtuali.
Ricevere un pacchetto
Un driver miniport può indicare solo i pacchetti di ricezione per una coda nello stato In esecuzione. Per altre informazioni sull'indicazione dei dati ricevuti per le code, vedere Operazioni di invio e ricezione VMQ.
OID_RECEIVE_FILTER_FREE_QUEUE richiesta impostata.
Un driver eccessivamente liberato una coda. Il driver rilascia l'indicazione di stato DMA arrestata (con NDIS_STATUS_RECEIVE_QUEUE_STATE), il driver entra nello stato di rilascio. Quando tutte le indicazioni di ricezione in sospeso sono complete e le risorse della coda vengono liberate, la coda non è definita.