Compartilhar via


estrutura NET_DMA_DESCRIPTOR (netdma.h)

Nota Não há suporte para a interface NetDMA em Windows 8 e posteriores.
 
A estrutura NET_DMA_DESCRIPTOR especifica as informações de transferência de DMA para cada entrada em uma lista vinculada de descritores de DMA.

Sintaxe

typedef struct _NET_DMA_DESCRIPTOR {
  union {
    ULONG TransferSize;
    struct {
      ULONG DCAContext : 32;
    } DCAContext32;
    struct {
      ULONG DCAContext : 16;
      ULONG Reserved : 16;
    } DCAContext16;
    struct {
      ULONG DCAContext : 8;
      ULONG Reserved : 24;
    } DCAContext8;
  };
  ULONG            ControlFlags;
  PHYSICAL_ADDRESS SourceAddress;
  PHYSICAL_ADDRESS DestinationAddress;
  PHYSICAL_ADDRESS NextDescriptor;
  union {
    ULONG64          Reserved1;
    PHYSICAL_ADDRESS NextSourceAddress;
  };
  union {
    ULONG64          Reserved2;
    PHYSICAL_ADDRESS NextDestinationAddress;
  };
  ULONG64          UserContext1;
  ULONG64          UserContext2;
} NET_DMA_DESCRIPTOR, *PNET_DMA_DESCRIPTOR;

Membros

TransferSize

O tamanho, em bytes, do bloco de memória associado a esse descritor de DMA.

Os drivers de provedor NetDMA 2.0 e posteriores usam os membros DCAContext32, DCAContext16 e DCAContext8 da união com TransferSize para dar suporte ao Acesso direto ao cache (DCA).

DCAContext32

Um contexto DCA de 32 bits.

DCAContext32.DCAContext

Um contexto de DCA.

DCAContext16

Um contexto DCA de 16 bits.

DCAContext16.DCAContext

Um contexto de DCA.

DCAContext16.Reserved

Bits reservados.

DCAContext8

Um contexto DCA de 8 bits.

DCAContext8.DCAContext

Um contexto de DCA.

DCAContext8.Reserved

Bits reservados.

ControlFlags

Um conjunto de sinalizadores que especificam as operações que o mecanismo de DMA deve executar para esse descritor de DMA. Esse membro deve conter um ou mais dos seguintes valores (combinados com uma operação OR bit a bit):

A menos que indicado de outra forma, as descrições se aplicam a quando o bit é definido. Significado
NET_DMA_SOURCE_PAGE_BREAK
Um provedor NetDMA versão 2.0 ou posterior inicia a cópia do endereço físico de origem especificado no membro SourceAddress e, quando chega ao final da primeira página, ele continua a cópia do endereço físico especificado no membro NextSourceAddress .
NET_DMA_DESTINATION_PAGE_BREAK
Um provedor NetDMA versão 2.0 ou posterior inicia a cópia para o endereço físico de destino especificado no membro DestinationAddress e, quando chega ao final da primeira página, ele continua a cópia para o endereço físico especificado no membro NextDestinationAddress .
NET_DMA_OP_TYPE_CONTEXT_CHANGE
O mecanismo de DMA deve identificar o descritor como um descritor de alteração de contexto .

A interface NetDMA envia um descritor de alteração de contexto para provedores NetDMA compatíveis com DCA para definir o processador de destino DCA dos dados de destino para todas as transferências de DMA em um canal NetDMA. A interface NetDMA usa o membro DCAContext8 em um descritor de alteração de contexto para especificar o identificador APIC (controlador de interrupção programável avançado) de 8 bits do processador de destino para o canal.

Um provedor NetDMA compatível com DCA deve manter a afinidade de DCA de um canal DMA com um processador, desde que não tenha recebido um novo descritor de alteração de contexto.

A interface NetDMA envia um descritor de alteração de contexto uma vez após o canal ter sido alocado e novamente quando o NetDMA detecta que o provedor de DMA pode ter perdido o contexto de hardware (por exemplo, após uma operação de suspensão e retomada).

NET_DMA_DESTINATION_DCA_ENABLE
Se o tipo de operação DMA for uma transferência de DMA padrão, o mecanismo de DMA deverá enviar uma dica de DCA para os dados de destino para o processador de destino DCA que foi atribuído ao canal DMA.

Para definir o processador de destino DCA de um canal DMA, a interface NetDMA enviou anteriormente um descritor de alteração de contexto para esse canal.

NET_DMA_INTERRUPT_ON_COMPLETION
O mecanismo de DMA deve gerar uma interrupção para o canal de DMA associado depois de processar esse descritor de DMA.

Quando esse bit é limpo, o mecanismo de DMA não gera uma interrupção.

NET_DMA_SOURCE_NO_SNOOP
O endereço de origem não deve ser bisbilhotado.

Quando esse bit é limpo, o endereço de origem está em um espaço de memória coerente e cada linha de cache da CPU deve ser bisbilhotada. O cliente DMA deve verificar se a espionagem de caches de CPU não é necessária para uma operação de DMA adequada.

NET_DMA_DESTINATION_NO_SNOOP
O endereço de destino não deve ser bisbilhotado.

Quando esse bit é limpo, o endereço de destino está em um espaço de memória coerente e cada linha de cache da CPU deve ser bisbilhotada. O cliente DMA deve verificar se a espionagem de caches de CPU não é necessária para uma operação de DMA adequada.

NET_DMA_STATUS_UPDATE_ON_COMPLETION
Os membros CompletionVirtualAddress e CompletionPhysicalAddress no NET_DMA_CHANNEL_PARAMETERS estrutura referenciar um valor de status de conclusão. O mecanismo de DMA atualiza o valor de status de conclusão quando conclui o processamento desse descritor.

O valor de status de conclusão é uma combinação de 64 bits de largura do endereço físico do descritor de DMA mais recente que o mecanismo de DMA processou e informações adicionais status.

Quando esse bit é limpo, o mecanismo de DMA não usa CompletionVirtualAddress ou CompletionPhysicalAddress.

NET_DMA_SERIALIZE_TRANSFER
O mecanismo de DMA garante que todas as gravações para esse descritor, incluindo dados e status de conclusão, sejam concluídas antes de ler os dados do próximo descritor.

Quando esse bit é limpo, o mecanismo de DMA pode começar a processar o próximo descritor antes de concluir o processamento desse descritor.

NET_DMA_NULL_TRANSFER
Uma transferência de DMA não é necessária para esse descritor. O mecanismo de DMA não é necessário para marcar os membros TransferSize, SourceAddress ou DestinationAddress.

Quando esse bit é limpo, uma transferência de DMA pode ser necessária ou pode ser uma transferência de comprimento zero. O mecanismo de DMA deve marcar os membros TransferSize, SourceAddress ou DestinationAddress.

Nota Se esse bit for definido ou desmarcado, o cliente NetDMA sempre deverá garantir que o descritor defina parâmetros de transferência válidos.
 
 

As máscaras de bits a seguir identificam os bits restantes no membro ControlFlags :

Valor Significado
NET_DMA_OP_TYPE_MASK
Uma máscara de bits que especifica bits reservados para um tipo de operação DMA. A interface NetDMA define esses bits como zero.
NET_DMA_RESERVED_MASK
Uma máscara de bits que especifica bits reservados para aplicativos futuros. A interface NetDMA define esses bits como zero.

SourceAddress

O endereço físico de um bloco de memória que é uma origem para a transferência de DMA.

DestinationAddress

O endereço físico de um bloco de memória que é um destino para a transferência de DMA.

NextDescriptor

O endereço físico do próximo NET_DMA_DESCRIPTOR estrutura na lista vinculada de descritores. Se esse descritor for o último descritor na lista, NextDescriptor será NULL.

Reserved1

Um valor ULONG64 reservado para o mecanismo de DMA ou o driver do provedor de DMA a ser usado. Os drivers de provedor NetDMA 2.0 e posteriores usam o membro NextSourceAddress do sindicato com Reserved1 para dar suporte à Quebra de Página de Origem e Destino.

NextSourceAddress

O endereço físico da segunda página do endereço de origem usado na quebra de página de origem.

Reserved2

Um valor ULONG64 reservado para usar o mecanismo de DMA ou o driver do provedor de DMA a ser usado. Os drivers de provedor NetDMA 2.0 e posteriores usam o membro NextDestinationAddress da união com Reserved2 para dar suporte à Quebra de Página de Origem e Destino.

NextDestinationAddress

O endereço físico da segunda página do endereço de destino usado na quebra de página de destino.

UserContext1

Um valor ULONG64 reservado para a interface NetDMA a ser usada.

UserContext2

Um valor ULONG64 reservado para a interface NetDMA a ser usada.

Comentários

A estrutura NET_DMA_DESCRIPTOR especifica as informações de origem, destino e controle para uma única transferência de DMA em uma lista vinculada de descritores de DMA.

Para iniciar uma transferência de DMA, a interface NetDMA fornece o endereço físico de uma estrutura NET_DMA_DESCRIPTOR no parâmetro DescriptorPhysicalAddress da função ProviderStartDma do driver do provedor de DMA. O parâmetro DescriptorVirtualAddress contém o endereço virtual do descritor.

O membro NextDescriptor de uma estrutura NET_DMA_DESCRIPTOR contém o endereço físico da próxima estrutura NET_DMA_DESCRIPTOR na lista vinculada de descritores.

A interface NetDMA chama a função ProviderAppendDma de um driver de provedor de DMA para acrescentar uma lista vinculada de descritores de DMA após o último descritor em um canal DMA.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte para drivers NetDMA 2.0 no Windows Server 2008. (Adicionados membros NextSourceAddress, NextDestinationAddress, DCAContext32, DCAContext16 e DCAContext8.) Com suporte para drivers NetDMA 1.1 no Windows Server 2008. Com suporte para drivers NetDMA 1.0 no Windows Server 2008 e no Windows Vista.
Cabeçalho netdma.h (inclua Netdma.h)

Confira também

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma