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.
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de