Estados e operações da fila

Para cada fila, um adaptador de rede deve dar suporte ao seguinte conjunto de estados operacionais:

Indefinido
A fila não está alocada. Para alocar uma fila, um driver sobreposto envia um OID_RECEIVE_FILTER_ALLOCATE_QUEUE solicitação OID.

Alocado
O estado Alocado é o estado inicial de uma fila. Quando uma fila está no estado Alocado, o driver sobreposto geralmente define filtros na fila com o OID_RECEIVE_FILTER_SET_FILTER OID ou conclui a alocação de fila com o OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE solicitação OID.

Definir
No estado Definir , uma fila tem pelo menos um filtro alocado, mas o driver sobreposto não enviou o OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID.

Executando
No estado Em execução, a fila tem filtros definidos, a alocação da fila é concluída e o adaptador de miniporto indica pacotes de recebimento para a fila.

Pausado
No estado Pausado , o adaptador de rede não indica os dados de rede recebidos para a fila. Não havia filtros definidos na fila antes da solicitação OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE ou todos os filtros que foram definidos na fila foram limpos com a solicitação OID OID_RECEIVE_FILTER_CLEAR_FILTER .

DMA Parado
No estado DMA Parado , um driver de miniporto recebeu uma solicitação OID OID_RECEIVE_FILTER_FREE_QUEUE . Quando o AMD é interrompido e o driver emitiu a indicação de status interrompida por DMA (com NDIS_STATUS_RECEIVE_QUEUE_STATE), o driver entra no estado Liberação.

Libertar
No estado Freeing , um driver de miniporto conclui as operações necessárias para interromper as operações de envio e recebimento para a fila e libera os recursos associados. Depois que todas as indicações de recebimento pendentes forem concluídas, a fila será excluída e a fila será Indefinida.

Na tabela a seguir, os títulos são os estados da fila. Os principais eventos são listados na primeira coluna. O restante das entradas na tabela especifica o próximo estado que a fila insere após um evento ocorrer dentro de um estado. As entradas em branco representam combinações de evento/estado inválidas.

Evento \ Estado Indefinido Alocado Definir Executando Em Pausa Parar DMA Libertar

OID_RECEIVE_FILTER_ALLOCATE_QUEUE – método (set)

Alocado

OID_RECEIVE_FILTER_QUEUE_PARAMETERS – solicitação de método (consulta)

Alocado

Definir

Executando

Em Pausa

OID_RECEIVE_FILTER_QUEUE_PARAMETERS – definir solicitação

Alocado

Definir

Executando

Em Pausa

OID_RECEIVE_FILTER_SET_FILTER – solicitação de método (set)

Definição

Definição

Executando

Executando

OID_RECEIVE_FILTER_CLEAR_FILTER – definir solicitação (último filtro)

Alocado

Em Pausa

OID_RECEIVE_FILTER_CLEAR_FILTER – definir solicitação (não último filtro)

Definir

Executando

OID_RECEIVE_FILTER_ENUM_FILTERS – método (solicitação de consulta)

Alocado

Definir

Executando

Em Pausa

OID_RECEIVE_FILTER_PARAMETERS – solicitação de método (consulta)

Definir

Executando

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE – solicitação do método (set)

Em Pausa

Executando

Receber pacote

Executando

OID_RECEIVE_FILTER_FREE_QUEUE definir solicitação

Parar DMA

Parar DMA

O AMD foi interrompido e NDIS_STATUS_RECEIVE_QUEUE_STATE status indicação foi enviada (Observação: o AMD provavelmente já foi interrompido no estado Alocado ou Pausado)

Libertar

Todas as indicações de recebimento estão concluídas e os recursos da fila são liberados

Indefinido

Nota Os eventos listados na tabela anterior incluem alguns eventos secundários que não resultam em uma alteração de estado. Esses eventos secundários são incluídos na tabela para especificar os estados em que esses eventos são válidos.

Os eventos da fila primária são definidos da seguinte maneira:

OID_RECEIVE_FILTER_ALLOCATE_QUEUE – solicitação do método (set)
Um driver de sobreposição alocou uma fila. Para obter mais informações sobre como alocar filas, consulte Alocando e liberando filas de VM.

OID_RECEIVE_FILTER_SET_FILTER – solicitação de método (set)
Um driver de sobreposição define um filtro em uma fila. Se o driver sobreposto não tiver enviado o OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID, a fila estará no estado Definir. Caso contrário, a fila estará no estado Em execução. Para obter mais informações sobre como definir filtros em filas, consulte Configurando e limpando filtros VMQ.

OID_RECEIVE_FILTER_CLEAR_FILTER – definir solicitação
Um driver de sobreposição limpou um filtro em uma fila. Se o último filtro tiver sido limpo em uma fila em execução, o AMD poderá ser interrompido; as indicações de recebimento são interrompidas e a fila deve ser limpa dos dados recebidos, se houver. Para obter mais informações sobre como limpar filtros em filas, consulte Configurando e limpando filtros VMQ.

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE – solicitação do método (set)
Um driver de sobreposição concluiu a alocação da fila. Se houver filtros definidos na fila, ele estará no estado Em execução e as indicações de recebimento poderão ser iniciadas. Para obter mais informações sobre como concluir a alocação de fila, consulte Alocando e liberando filas de VM.

Receber pacote
Um driver de miniporta só pode indicar pacotes de recebimento para uma fila que está no estado Em execução. Para obter mais informações sobre como indicar dados recebidos para filas, consulte Operações de envio e recebimento de VMQ.

OID_RECEIVE_FILTER_FREE_QUEUE definir solicitação.
Um driver de sobreposição liberou uma fila. O driver emite a indicação de status interrompida por DMA (com NDIS_STATUS_RECEIVE_QUEUE_STATE), o driver entra no estado Liberação. Quando todas as indicações de recebimento pendentes forem concluídas e os recursos da fila forem liberados, a fila será indefinida.