estructura NET_DMA_DESCRIPTOR (netdma.h)

Nota La interfaz NetDMA no se admite en Windows 8 y versiones posteriores.
 
La estructura NET_DMA_DESCRIPTOR especifica la información de transferencia de DMA para cada entrada de una lista vinculada de descriptores DMA.

Sintaxis

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;

Miembros

TransferSize

Tamaño, en bytes, del bloque de memoria asociado a este descriptor DMA.

Los controladores de proveedor netDMA 2.0 y versiones posteriores usan los miembros DCAContext32, DCAContext16 y DCAContext8 de la unión con TransferSize para admitir el acceso directo a caché (DCA).

DCAContext32

Contexto DCA de 32 bits.

DCAContext32.DCAContext

Contexto DCA.

DCAContext16

Contexto DCA de 16 bits.

DCAContext16.DCAContext

Contexto DCA.

DCAContext16.Reserved

Bits reservados.

DCAContext8

Contexto DCA de 8 bits.

DCAContext8.DCAContext

Contexto DCA.

DCAContext8.Reserved

Bits reservados.

ControlFlags

Conjunto de marcas que especifican las operaciones que el motor DMA debe realizar para este descriptor DMA. Este miembro debe contener uno o varios de los siguientes valores (combinados con una operación OR bit a bit):

A menos que se indique lo contrario, las descripciones se aplican a cuando se establece el bit. Significado
NET_DMA_SOURCE_PAGE_BREAK
Un proveedor netDMA versión 2.0 o posterior inicia la copia desde la dirección física de origen especificada en el miembro SourceAddress y cuando llega al final de la primera página, continúa la copia desde la dirección física especificada en el miembro NextSourceAddress .
NET_DMA_DESTINATION_PAGE_BREAK
Un proveedor netDMA versión 2.0 o posterior inicia la copia en la dirección física de destino especificada en el miembro DestinationAddress y cuando llega al final de la primera página, continúa la copia en la dirección física especificada en el miembro NextDestinationAddress .
NET_DMA_OP_TYPE_CONTEXT_CHANGE
El motor DMA debe identificar el descriptor como descriptor de cambio de contexto .

La interfaz NetDMA envía un descriptor de cambio de contexto a proveedores netDMA compatibles con DCA para establecer el procesador de destino DCA de los datos de destino para todas las transferencias DMA en un canal NetDMA. La interfaz NetDMA usa el miembro DCAContext8 en un descriptor de cambio de contexto para especificar el identificador de controlador de interrupción programable (APIC) avanzado de 8 bits del procesador de destino para el canal.

Un proveedor de NetDMA compatible con DCA debe mantener la afinidad DCA de un canal DMA con un procesador siempre que no haya recibido un nuevo descriptor de cambio de contexto.

La interfaz NetDMA envía un descriptor de cambio de contexto una vez después de asignar el canal y otra vez cuando NetDMA detecta que el proveedor DMA podría haber perdido el contexto de hardware (por ejemplo, después de una operación de suspensión y reanudación).

NET_DMA_DESTINATION_DCA_ENABLE
Si el tipo de operación DMA es una transferencia DMA estándar, el motor DMA debe enviar una sugerencia DCA para los datos de destino al procesador de destino DCA que se ha asignado al canal DMA.

Para establecer el procesador de destino DCA de un canal DMA, la interfaz NetDMA envió previamente un descriptor de cambio de contexto a ese canal.

NET_DMA_INTERRUPT_ON_COMPLETION
El motor DMA debe generar una interrupción para el canal DMA asociado después de procesar este descriptor DMA.

Cuando se borra este bit, el motor DMA no genera una interrupción.

NET_DMA_SOURCE_NO_SNOOP
No se debe posponer la dirección de origen.

Cuando se borra este bit, la dirección de origen se encuentra en un espacio de memoria coherente y cada línea de caché de CPU debe estar desactivada. El cliente DMA debe comprobar que no es necesario realizar operaciones DMA adecuadas para la operación de DMA adecuada.

NET_DMA_DESTINATION_NO_SNOOP
La dirección de destino no se debe posponer.

Cuando se borra este bit, la dirección de destino se encuentra en un espacio de memoria coherente y cada línea de caché de CPU debe estar desactivada. El cliente DMA debe comprobar que no es necesario realizar operaciones DMA adecuadas para la operación de DMA adecuada.

NET_DMA_STATUS_UPDATE_ON_COMPLETION
Miembros CompletionVirtualAddress y CompletionPhysicalAddress en NET_DMA_CHANNEL_PARAMETERS estructura hace referencia a un valor de estado de finalización. El motor DMA actualiza el valor de estado de finalización cuando completa el procesamiento de este descriptor.

El valor de estado de finalización es una combinación de 64 bits de toda la dirección física del descriptor DMA más reciente que procesó el motor DMA e información de estado adicional.

Cuando se borra este bit, el motor DMA no usa CompletionVirtualAddress ni CompletionPhysicalAddress.

NET_DMA_SERIALIZE_TRANSFER
El motor DMA garantiza que todas las escrituras de este descriptor, incluidos los datos y el estado de finalización, se completan antes de leer los datos para el siguiente descriptor.

Cuando se borra este bit, el motor DMA puede iniciar el procesamiento del siguiente descriptor antes de completar el procesamiento de este descriptor.

NET_DMA_NULL_TRANSFER
No se requiere una transferencia DMA para este descriptor. El motor DMA no es necesario para comprobar los miembros TransferSize, SourceAddress o DestinationAddress .

Cuando se borra este bit, es posible que se requiera una transferencia DMA o que sea una transferencia de longitud cero. El motor DMA debe comprobar los miembros TransferSize, SourceAddress o DestinationAddress .

Nota Si este bit se establece o se borra, el cliente netDMA siempre debe asegurarse de que el descriptor define parámetros de transferencia válidos.
 
 

Las máscaras de bits siguientes identifican los bits restantes en el miembro ControlFlags :

Valor Significado
NET_DMA_OP_TYPE_MASK
Máscara de bits que especifica bits reservados para un tipo de operación DMA. La interfaz NetDMA establece estos bits en cero.
NET_DMA_RESERVED_MASK
Máscara de bits que especifica bits reservados para futuras aplicaciones. La interfaz NetDMA establece estos bits en cero.

SourceAddress

Dirección física de un bloque de memoria que es un origen para la transferencia DMA.

DestinationAddress

Dirección física de un bloque de memoria que es un destino para la transferencia DMA.

NextDescriptor

Dirección física de la siguiente estructura NET_DMA_DESCRIPTOR en la lista vinculada de descriptores. Si este descriptor es el último descriptor de la lista, NextDescriptor es NULL.

Reserved1

Valor de ULONG64 que está reservado para el motor DMA o el controlador del proveedor DMA que se va a usar. Los controladores de proveedor netDMA 2.0 y versiones posteriores usan el miembro NextSourceAddress de la unión con Reserved1 para admitir saltos de página de origen y destino.

NextSourceAddress

Dirección física de la segunda página de la dirección de origen que se usa en el salto de página de origen.

Reserved2

Valor de ULONG64 que está reservado para usar el motor DMA o el controlador del proveedor DMA que se va a usar. NetDMA 2.0 y los controladores de proveedor posteriores usan el miembro NextDestinationAddress de la unión con Reserved2 para admitir saltos de página de origen y destino.

NextDestinationAddress

Dirección física de la segunda página de la dirección de destino que se usa en el salto de página de destino.

UserContext1

Valor de ULONG64 que está reservado para la interfaz NetDMA que se va a usar.

UserContext2

Valor de ULONG64 que está reservado para la interfaz NetDMA que se va a usar.

Comentarios

La estructura NET_DMA_DESCRIPTOR especifica la información de origen, destino y control de una única transferencia DMA en una lista vinculada de descriptores DMA.

Para iniciar una transferencia DMA, la interfaz NetDMA proporciona la dirección física de una estructura de NET_DMA_DESCRIPTOR en el parámetro DescriptorPhysicalAddress de la función ProviderStartDma del controlador del proveedor DMA. El parámetro DescriptorVirtualAddress contiene la dirección virtual del descriptor.

El miembro NextDescriptor de una estructura de NET_DMA_DESCRIPTOR contiene la dirección física de la siguiente estructura NET_DMA_DESCRIPTOR en la lista vinculada de descriptores.

La interfaz NetDMA llama a una función ProviderAppendDma del controlador DMA para anexar una lista vinculada de descriptores DMA después del último descriptor en un canal DMA.

Requisitos

Requisito Value
Cliente mínimo compatible Compatible con controladores netDMA 2.0 en Windows Server 2008. (Se agregaron miembros NextSourceAddress, NextDestinationAddress, DCAContext32, DCAContext16 y DCAContext8). Compatible con controladores netDMA 1.1 en Windows Server 2008. Compatible con controladores netDMA 1.0 en Windows Server 2008 y Windows Vista.
Encabezado netdma.h (incluya Netdma.h)

Consulte también

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma