estructura NET_DMA_DESCRIPTOR (netdma.h)
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 |
---|---|
|
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 . |
|
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 . |
|
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). |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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 :
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) |