ISOCH_DESCRIPTOR estructura (1394.h)
La ISOCH_DESCRIPTOR describe un búfer que se va a adjuntar o detallar desde un identificador de recursos, mediante el uso de REQUEST_ISOCH_ATTACH_BUFFERS y REQUEST_ISOCH_DETACH_BUFFERS solicitudes.
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ócrónico. Cada búfer asociado en el canal tiene un descriptor isoc asociado.
Antes de usar un búfer determinado para una operación de E/S, el controlador host examina las marcas del descriptor isoc del búfer para obtener instrucciones sobre cómo controlar los datos. En algunos casos, el controlador 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 isoc indican que el controlador host debe filtrar los paquetes que no tienen un determinado valor sy registrado en ulSynch, el controlador host continuará esta operación de filtrado con los datos de los búferes siguientes, incluso si los descriptores de isócronos 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ócrona | 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 que está incrustado en el paquete isócrónico. El valor sy se especifica en ulSynch. Si se DESCRIPTOR_USE_SY_TAG_IN_FIRST marca, el controlador host reanuda la lectura de todos los paquetes después de encontrar el primer paquete con el valor sy especificado en ulSynch. Si no DESCRIPTOR_USE_SY_TAG_IN_FIRST marca, el controlador host continúa filtrando, leyendo paquetes con el valor sy indicado y omitiendo 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 que se incrusta en el paquete isócrónico. El valor de etiqueta se especifica en ulTag. Si se DESCRIPTOR_USE_SY_TAG_IN_FIRST marca, el controlador 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 DESCRIPTOR_USE_SY_TAG_IN_FIRST marca, el controlador host continúa filtrando, leyendo paquetes con el valor de etiqueta indicado y omitiendo todos los demás. |
| DESCRIPTOR_SYNCH_ON_TIME | Escuchar, hablar | El controlador de host espera un tiempo de ciclo isócrónico 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 host omite todos los paquetes que no contienen un tiempo de ciclo de CycleTime. Después de encontrar un paquete con el tiempo de ciclo indicado, el controlador 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 correspondiente. 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 host omite todos los paquetes hasta que detecta un paquete con el valor correcto de Sy o Tag . Después de detectar un paquete con el valor 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 host complete 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 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 asociado. |
Mdl
Especifica el MDL que representa un búfer en el que los datos están o estarán contenidos.
ulLength
Especifica la longitud del Mdl.
nMaxBytesPerFrame
Especifica los bytes máximos contenidos en cada marco isócrónico. 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 DESCRIPTOR_SYNCH_ON_SY marca, este miembro especifica el campo Sy del paquete saliente. Para REQUEST_ISOCH_LISTEN solicitudes, si se establece la marca DESCRIPTOR_SYNCH_ON_SY, este miembro especifica el valor que el controlador host coincidirá con el campo Sy en los encabezados de paquete isócronos.
ulTag
Para las solicitudes de IsochTalk, este miembro especifica el campo Etiqueta del paquete saliente. Para REQUEST_ISOCH_LISTEN solicitudes, si se establece la marca DESCRIPTOR_SYNCH_ON_TAG, este miembro especifica el valor que el controlador host coincidirá con el campo Etiqueta en los encabezados de paquete isócronos.
CycleTime
Si se DESCRIPTOR_SYNCH_ON_TIME marca, este miembro especifica el tiempo de ciclo isócrónico en el que se va a sincronizar. (La resolución de tiempo es por ciclo isócrónico. No se usa el miembro CycleOffset del tiempo de ciclo). Si se DESCRIPTOR_TIME_STAMP_ON_COMPLETION marca, el controlador de bus rellena este miembro con el tiempo de ciclo isócrónico 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 asociados asociados están listos para desasociarse. La devolución de llamada se ejecuta en IRQL DISPATCH_LEVEL. La devolución de llamada es del siguiente tipo:
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 la devolución de llamada.
Context2
Especifica el segundo parámetro cuando el controlador de bus llama a la rutina pasada en la 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 REQUEST_ISOCH_ATTACH_BUFFERS, el controlador de bus rellena el miembro de estado con un código de error adecuado.
DeviceReserved
Reservado.
BusReserved
Reservado.
PortReserved
Reservado.
Observaciones
No todas las DESCRIPTOR_XXX se admiten en todo el hardware. El controlador de dispositivo puede usar la REQUEST_GET_LOCAL_HOST_INFO, con nLevel = GET_HOST_CAPABILITIES, para determinar qué DESCRIPTOR_XXX se admiten. El controlador de bus devuelve un puntero a una estructura GET_LOCAL_HOST_INFO2, cuyo miembro HostCapabilities contiene marcas que determinan qué marcas admite el controlador host. En la tabla siguiente se enumeran DESCRIPTOR_XXX que requieren compatibilidad con hardware y la marca HostCapabilities correspondiente que el controlador debe comprobar.
| DESCRIPTOR_XXX marcas | 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 host combina los datos del búfer especificado en Mdl con los datos del búfer siguiente asociados. (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ía como los datos del siguiente paquete isócrónico. El número de fotogramas de cada búfer debe coincidir o el controlador de bus devuelve STATUS_INVALID_PARAMETER para la siguiente REQUEST_ISOCH_ATTACH_BUFFER solicitud.
Requisitos
| Encabezado | 1394.h (incluido 1394.h) |
Consulte también
Comentarios
Enviar y ver comentarios de