Share via


estructura de ISOCH_DESCRIPTOR (1394.h)

La estructura de ISOCH_DESCRIPTOR describe un búfer que se va a adjuntar o detallar desde un identificador de recursos, mediante las solicitudes de REQUEST_ISOCH_ATTACH_BUFFERS y REQUEST_ISOCH_DETACH_BUFFERS .

Sintaxis

typedef struct _ISOCH_DESCRIPTOR {
  ULONG                         fulFlags;
  PMDL                          Mdl;
  ULONG                         ulLength;
  ULONG                         nMaxBytesPerFrame;
  ULONG                         ulSynch;
  ULONG                         ulTag;
  CYCLE_TIME                    CycleTime;
  PBUS_ISOCH_DESCRIPTOR_ROUTINE Callback;
  PVOID                         Context1;
  PVOID                         Context2;
  NTSTATUS                      status;
  ULONG_PTR                     DeviceReserved[8];
  ULONG_PTR                     BusReserved[8];
  ULONG_PTR                     PortReserved[16];
} ISOCH_DESCRIPTOR, *PISOCH_DESCRIPTOR;

Miembros

fulFlags

Especifica varias marcas para este descriptor isócrono. Cada búfer adjunto en el canal tiene asociado un descriptor isoch.

Antes de usar un búfer determinado para una operación de E/S, el controlador de host examina las marcas en el descriptor isoch del búfer para obtener instrucciones sobre cómo controlar los datos. En algunos casos, el controlador de host seguirá observando el comportamiento especificado por estas marcas durante las operaciones de E/S con búferes posteriores. Por ejemplo, si las marcas del descriptor isoch indican que el controlador de host debe filtrar los paquetes que no tienen un determinado valor Sy registrado en ulSynch, el controlador de host continuará esta operación de filtrado con los datos de los búferes que siguen, incluso si los descriptores isoch asociados a estos búferes no tienen establecidas las mismas marcas.

En la tabla siguiente se describen las marcas que se pueden asignar a este miembro.

Marca Transacción isócrónica Descripción
DESCRIPTOR_SYNCH_ON_SY Escuchar A partir de los datos del búfer actual, el controlador de host omite todos los paquetes que no contienen un valor Sy determinado incrustado en el paquete isócrono. El valor Sy se especifica en ulSynch. Si se establece la marca DESCRIPTOR_USE_SY_TAG_IN_FIRST, el controlador de host reanuda la lectura de todos los paquetes después de encontrar el primer paquete con el valor Sy especificado en ulSynch. Si no se establece la marca de DESCRIPTOR_USE_SY_TAG_IN_FIRST, el controlador de host continúa filtrando, leyendo paquetes con el valor Sy indicado e ignorando a todos los demás.
DESCRIPTOR_SYNCH_ON_TAG Escuchar A partir de los datos del búfer actual, el controlador de host omite todos los paquetes que no contienen un valor de etiqueta determinado incrustado en el paquete isócrono. El valor de etiqueta se especifica en ulTag. Si se establece la marca DESCRIPTOR_USE_SY_TAG_IN_FIRST, el controlador de host reanuda la lectura de todos los paquetes después de encontrar el primer paquete con el valor de etiqueta especificado en ulTag. Si no se establece la marca de DESCRIPTOR_USE_SY_TAG_IN_FIRST, el controlador de host continúa filtrando, leyendo paquetes con el valor de etiqueta indicado e ignorando a todos los demás.
DESCRIPTOR_SYNCH_ON_TIME Escuchar, Hablar El controlador de host espera un tiempo de ciclo isócrono determinado antes de continuar con la operación. El tiempo de ciclo se especifica en el miembro CycleTime . A partir de los datos del búfer actual, el controlador de host omite todos los paquetes que no contienen un período de ciclo de CycleTime. Después de encontrar un paquete con el tiempo de ciclo indicado, el controlador de host reanuda el procesamiento de todos los paquetes.
DESCRIPTOR_USE_SY_TAG_IN_FIRST Escuchar El filtrado en los miembros Sy o Tag solo se produce hasta que se recibe el primer paquete coincidente. Esta marca se usa junto con las marcas DESCRIPTOR_SYNCH_ON_SY y DESCRIPTOR_SYNCH_ON_TAG. Estas dos marcas inician una operación de filtrado basada en los valores de Sy o Tag, a menos que también se establezca DESCRIPTOR_USE_SY_TAG_IN_FIRST, en cuyo caso estas marcas inician una sincronización en lugar de una operación de filtrado. En esta operación de sincronización, el controlador de host omite todos los paquetes hasta que detecta un paquete con el valor correcto Sy o Tag . Después de detectar un paquete con el valor de Sy o Tag indicado, el controlador host reanuda el procesamiento de todos los paquetes.
DESCRIPTOR_TIME_STAMP_ON_COMPLETION Escuchar, Hablar Una vez que el controlador de host completa su DMA hacia o desde este búfer, almacene el tiempo de ciclo en el miembro CycleTime del ISOCH_DESCRIPTOR.
DESCRIPTOR_PRIORITY_TIME_DELIVERY Hablar Si el controlador de host local no está listo para una escritura, no vuelva a intentar la escritura más adelante. (El comportamiento predeterminado es reintentar hasta que el controlador de host esté listo).
DESCRIPTOR_HEADER_SCATTER_GATHER Hablar El controlador de host trata los datos de este búfer como una secuencia de encabezados. El controlador de host antepone un encabezado de este búfer a cada paquete que ensambla a partir de los datos del siguiente búfer adjunto.

Mdl

Especifica la MDL que representa un búfer en el que se incluirán o contendrán los datos.

ulLength

Especifica la longitud de Mdl.

nMaxBytesPerFrame

Especifica el número máximo de bytes contenidos en cada fotograma isócrono. En las escrituras, los datos del búfer se dividen en paquetes isócronos de este tamaño.

ulSynch

Para las solicitudes de IsochTalk, si se establece la marca de DESCRIPTOR_SYNCH_ON_SY, este miembro especifica el campo Sy del paquete saliente. Para REQUEST_ISOCH_LISTEN solicitudes, si se establece la marca de DESCRIPTOR_SYNCH_ON_SY, este miembro especifica el valor que el controlador de host coincidirá con el campo Sy en los encabezados de paquetes isócronos.

ulTag

Para las solicitudes de IsochTalk, este miembro especifica el campo Tag del paquete saliente. Para REQUEST_ISOCH_LISTEN solicitudes, si se establece la marca de DESCRIPTOR_SYNCH_ON_TAG, este miembro especifica el valor que el controlador de host coincidirá con el campo Tag en encabezados de paquete isócronos.

CycleTime

Si se establece la marca DESCRIPTOR_SYNCH_ON_TIME, este miembro especifica el tiempo de ciclo isócrono en el que se va a sincronizar. (La resolución de tiempo es por ciclo isócrono. No se usa el miembro CycleOffset del tiempo de ciclo). Si se establece la marca DESCRIPTOR_TIME_STAMP_ON_COMPLETION, el controlador de autobús rellena este miembro con el tiempo de ciclo isócrono al finalizar la operación que usó este búfer.

Callback

Puntero a una rutina de devolución de llamada. Si no es NULL, el controlador de bus llama a esta rutina para indicar que los búferes adjuntos asociados están listos para desasociarse. La devolución de llamada se ejecuta en irQL DISPATCH_LEVEL. La devolución de llamada es del tipo siguiente:

void Callback(IN PVOID Context1, IN PVOID Context2);

Context1

Especifica el primer parámetro cuando el controlador de bus llama a la rutina pasada en Devolución de llamada.

Context2

Especifica el segundo parámetro cuando el controlador de bus llama a la rutina pasada en Devolución de llamada.

status

Para REQUEST_ISOCH_ATTACH_BUFFERS solicitudes, este miembro especifica el estado de la operación de asociación en este búfer. Si se produce un error durante el procesamiento de la solicitud de REQUEST_ISOCH_ATTACH_BUFFERS , el controlador de bus rellena el miembro de estado con un código de error adecuado.

Nota El miembro de estado debe inicializarse para STATUS_SUCCESS antes de que se realice la solicitud de REQUEST_ISOCH_ATTACH_BUFFERS .

DeviceReserved[8]

Reservado.

BusReserved[8]

Reservado.

PortReserved[16]

Reservado.

Comentarios

No todas las marcas de DESCRIPTOR_XXX se admiten en todo el hardware. El controlador de dispositivo puede usar la solicitud de REQUEST_GET_LOCAL_HOST_INFO, con nLevel = GET_HOST_CAPABILITIES, para determinar qué marcas de DESCRIPTOR_XXX se admiten. El controlador de bus devuelve un puntero a una estructura de GET_LOCAL_HOST_INFO2, cuyo miembro HostCapabilities contiene marcas que determinan qué marcas admite el controlador de host. En la tabla siguiente se enumeran los DESCRIPTOR_XXX marcas que requieren compatibilidad con hardware y la marca HostCapabilities correspondiente que debe comprobar el controlador.

marcas de DESCRIPTOR_XXX HostCapabilities
DESCRIPTOR_SYNCH_ON_TIME HOST_INFO_SUPPORTS_START_ON_CYCLE
DESCRIPTOR_HEADER_SCATTER_GATHER HOST_INFO_SUPPORTS_ISO_HDR_INSERTION

Si el controlador establece la marca DESCRIPTOR_HEADER_SCATTER_GATHER, el controlador de host combina los datos del búfer especificado en Mdl con los datos del siguiente búfer adjunto. (Los búferes posteriores no se ven afectados). Cada fotograma del búfer se antepone a un marco del siguiente búfer (en el orden en que los datos del búfer se dividen en fotogramas) y se envían como los datos del siguiente paquete isócrono. El número de fotogramas de cada búfer debe coincidir o el controlador de bus devuelve STATUS_INVALID_PARAMETER para la siguiente solicitud de REQUEST_ISOCH_ATTACH_BUFFER.

Requisitos

Requisito Valor
Header 1394.h (incluya 1394.h)

Consulte también

GET_LOCAL_HOST_INFO2

REQUEST_ISOCH_ALLOCATE_RESOURCES

REQUEST_ISOCH_ATTACH_BUFFERS

REQUEST_ISOCH_DETACH_BUFFERS

REQUEST_ISOCH_LISTEN

REQUEST_ISOCH_TALK