Share via


Configuración de la transferencia isócrónica para dispositivos IEEE 1394

Para que los controladores puedan iniciar su dispositivo, deben seguir estos pasos:

Paso 1. Elija la velocidad de transferencia.

El bus IEEE 1394 puede admitir varias velocidades diferentes, limitadas por lo que permite el hardware. Incluso si un dispositivo específico admite una velocidad determinada, puede estar conectado a otro dispositivo que solo admita velocidades más bajas. Los controladores deben determinar en tiempo de ejecución la velocidad de transferencia entre el dispositivo y el equipo. Consultan al controlador de autobús con la solicitud de REQUEST_GET_SPEED_BETWEEN_DEVICES para determinar la velocidad máxima posible entre dos dispositivos en el bus, o el dispositivo y el equipo host.

Paso 2. Asigne ancho de banda.

Antes de que se pueda realizar cualquier transferencia de datos isocrónica, el conductor debe reservar ancho de banda en el autobús. El bus realiza un seguimiento de la cantidad de ancho de banda asignado hasta que alcanza una cantidad fija (según la especificación IEEEE 1394-1995, el ancho de banda máximo que se puede enviar es el 80 % de un ciclo de bus, que es 125 nanosegundos); a continuación, no permite que ningún otro dispositivo adquiera ancho de banda hasta que se libere parte del ancho de banda asignado actualmente. El controlador envía el REQUEST_ISOCH_ALLOCATE_BANDWIDTH solicitud al conductor del autobús para reservar ancho de banda.

Si la solicitud se realiza correctamente, el controlador de bus devuelve un identificador de ancho de banda. El controlador usa este identificador en solicitudes futuras relacionadas con el ancho de banda al controlador de autobús. Por ejemplo, el controlador puede usar REQUEST_ISOCH_SET_CHANNEL_BANDWIDTH en el identificador para ajustar la cantidad de ancho de banda asignado. Cuando el controlador haya terminado con el ancho de banda asignado, debe usar REQUEST_ISOCH_FREE_BANDWIDTH para liberar el ancho de banda, de modo que otros dispositivos del bus puedan usarlo.

Si se produce un error en la solicitud, el controlador no debe intentar ninguna transferencia de datos. Es posible que los controladores que no asignen ancho de banda puedan asignarlo en intentos posteriores, por lo que deben dejarse en un estado en el que puedan intentar asignar ancho de banda más adelante cuando sea necesario. Es probable que los intentos de asignar ancho de banda después de un restablecimiento de bus se realicen correctamente, ya que el sistema libera automáticamente todo el ancho de banda y canales asignados previamente después de un restablecimiento de bus.

Los controladores que tienen éxito en la asignación de ancho de banda, deben reasignar su ancho de banda y canales después de un restablecimiento de bus, por los motivos mencionados. Además, después de un restablecimiento, los identificadores de ancho de banda se vuelven obsoletos y deben liberarse mediante una llamada a REQUEST_ISOCH_FREE_BANDWIDTH, a menos que el ancho de banda se haya asignado con la marca IRB_FLAG_ALLOW_REMOTE_FREE establecida.

Paso 3. Asigne un canal.

Una vez que una solicitud de asignación de ancho de banda se realiza correctamente, el controlador solicita un canal isócrono en el que se van a escribir datos. Varios dispositivos pueden leer paquetes en un canal isócrono, pero solo un dispositivo puede escribir en un canal. Los dispositivos que reciben paquetes isócronos no envían paquetes de confirmación a cambio.

Los conductores solicitan un canal enviando la solicitud de REQUEST_ISOCH_ALLOCATE_CHANNEL al conductor del autobús. El controlador puede solicitar un canal específico o ISOCH_ANY_CHANNEL asignar cualquier canal libre. Si se ejecuta correctamente, el controlador de autobús devuelve el canal asignado. Si el controlador de autobús devuelve un código de error, los controladores no deben intentar ninguna transferencia de datos y deben desasignar el ancho de banda asignado en el paso 2.

Los controladores no deben suponer que, dado que un canal no está disponible actualmente, nunca estará disponible. Los canales pueden liberarse en cualquier momento, por lo que los controladores deben dejarse en un estado en el que puedan intentar asignar un canal más adelante cuando corresponda.

Paso 4. Asigne un identificador de recursos.

Una vez que el controlador asigna un canal, asigna un identificador de recursos para ese canal. En todos los pasos posteriores, el controlador usa el identificador de recursos para especificar el canal.

Los controladores asignan un identificador de recursos para el canal mediante el envío de la solicitud de REQUEST_ISOCH_ALLOCATE_RESOURCES al controlador de autobús.

Cuando el controlador asigna un identificador de recursos, también especifica marcas que indican cómo se usarán los búferes adjuntos al identificador:

  • Si el controlador usará el canal para leer datos de un dispositivo (una operación de REQUEST_ISOCH_LISTEN ), establece la marca de RESOURCE_USED_IN_LISTENING. Si el controlador usará el canal para escribir datos en el dispositivo (una operación de REQUEST_ISOCH_TALK ), establece la marca RESOURCE_USED_IN_TALKING.

  • El controlador usa el identificador para proporcionar búferes de datos para la transacción. (Consulte el paso 5 para obtener más información). El controlador de bus usa los búferes en orden hasta que se agota y, a continuación, pausa la operación hasta que el controlador del dispositivo conecta más búferes. Consulte Búferes de transferencias de DMA isócronos para dispositivos IEEE 1394 para obtener más información.

  • El controlador puede especificar que la operación se sincronice con un determinado valor del reloj del ciclo isócrono. Consulte Opciones de sincronización isócrónicas para dispositivos IEEE 1394 para obtener más información.

  • El controlador puede establecer opciones para escuchas isócrónicas. El controlador puede indicar si los encabezados de paquetes isócronos se quitan de los paquetes de datos. El controlador también puede indicar si los datos de llegada deben copiarse en los búferes de datos en espera un paquete por búfer o si cada búfer debe rellenarse con datos. Consulte Isochronous Listen Options for IEEE 1394 Devices (Opciones de escucha isócrónicas para dispositivos IEEE 1394 ) para obtener más información.

Si se produce un error en esta solicitud, los controladores deben desasignar todos los recursos isócronos asignados en los pasos anteriores.

Paso 5. Adjunte búferes al identificador de recursos.

Una vez que el controlador asigna un identificador de recursos, asocia búferes al identificador. El controlador DMA del host leerá o escribirá datos en los búferes adjuntos.

Con cada búfer, el controlador pasa una estructura de ISOCH_DESCRIPTOR , que describe cómo se usará el búfer. En la estructura ISOCH_DESCRIPTOR del búfer, el controlador puede especificar la siguiente información:

Una vez iniciada la operación, el controlador puede desasociar los búferes que ya no necesita y puede adjuntar búferes adicionales. El controlador puede usar la rutina de devolución de llamada identificada en ISOCH_DESCRIPTOR para indicarse cuando el controlador de autobús ha completado el procesamiento del último búfer conectado. Consulte Almacenamiento en búfer de transferencias de DMA isócronos para dispositivos IEEE 1394 para obtener una descripción de la búfer de DMA para dispositivos IEEE 1394.

Paso 6. Inicio de la transferencia de datos

Para leer desde el dispositivo, el controlador emite la solicitud de REQUEST_ISOCH_LISTEN . Para escribir en el dispositivo, el controlador emite la solicitud de REQUEST_ISOCH_TALK . A continuación, el controlador puede activar el dispositivo para leer o escribir, de la manera específica del dispositivo adecuado.