Compartir a través de


Opciones de escucha isócrónicas para dispositivos IEEE 1394

En esta sección se describen las distintas opciones de escucha isócrónicas.

Recepción o eliminación de encabezados de paquete

Los controladores de host pueden quitar o no automáticamente los encabezados de un paquete isócrono. El controlador de bus establece la marca HOST_INFO_SUPPORTS_RETURNING_ISO_HDR del miembro HostCapabilities de la estructura GET_LOCAL_HOST_INFO2 si el controlador de host no quita automáticamente los encabezados de los paquetes isócronos.

Además, los controladores de host pueden admitir la eliminación configurable de encabezados. El controlador de bus establece la marca HOST_INFO_SUPPORTS_ISOCH_STRIPPING de HostCapabilities si el controlador de host se puede configurar para quitar encabezados. Para configurar realmente el controlador de host para quitar encabezados, el controlador envía la solicitud de REQUEST_ISOCH_ALLOCATE_RESOURCES con la marca RESOURCE_STRIP_ADDITIONAL_QUADLETS establecida. El miembro nQuadletsToStrip especifica el número de quadlets que se van a quitar del principio de cada paquete. Por ejemplo, nQuadletsToStrip = 1 quitaría el encabezado de paquete isócrono.

Streaming frente a DMA basado en paquetes

Las estrategias de DMA basadas en secuencias y basadas en paquetes requieren compatibilidad con el controlador de host subyacente. Todos los controladores de host admiten al menos una de las estrategias de DMA y los controladores de host compatibles con OHCI admiten ambos.

DMA basado en paquetes y DMA basado en secuencias tienen características similares cuando todos los paquetes tienen el mismo tamaño. Pero los dos tipos de DMA tienen características muy diferentes cuando el tamaño del paquete varía.

En DMA basado en flujos, el controlador de host omite los límites de paquetes a medida que rellena los búferes de E/S, sin espacios en los datos que escribe. Para determinar la ubicación de un paquete determinado, debe conocer las longitudes de todos los paquetes anteriores.

En DMA basado en paquetes, el controlador de host escribe solo un paquete isócrono por búfer. Por lo tanto, en modo de paquete, el controlador de host coloca los datos que escribe, de modo que cada paquete comienza a una distancia desde el principio del búfer de E/S que es un múltiplo entero del tamaño máximo del paquete. Si un paquete determinado es menor que el máximo, los datos ubicados entre el final de ese paquete y el inicio del siguiente paquete no están definidos. Por lo tanto, cuando los paquetes son más pequeños que el tamaño máximo, se desperdicia espacio de búfer. Por ejemplo, un búfer lo suficientemente grande como para contener 10 paquetes siempre contiene exactamente 10 paquetes, incluso si algunos paquetes son más pequeños que el tamaño máximo permitido.

Independientemente del modo DMA que elija, se aplican algunos inconvenientes de diseño. Por ejemplo, la elección del tamaño del búfer afecta al rendimiento del dispositivo, independientemente del modo DMA que use. Los búferes grandes proporcionan eficacia porque se evita parte de la sobrecarga asociada a la inicialización de un gran número de búferes. Además, menos búferes significan que se requieren menos descriptores DMA. Por otro lado, los búferes más grandes aumentan la latencia entre el principio de una operación de E/S y el momento en el que el controlador de bus informa al controlador de función de que el búfer está lleno.

Si el controlador de host admite ambos tipos de DMA, el controlador de bus establece el controlador de host de forma predeterminada en DMA basado en flujos. Para restablecer el controlador de host a DMA basado en paquetes, el controlador debe establecer la marca RESOURCE_USE_PACKET_BASED cuando asigna el identificador de recursos.

Los controladores usan la solicitud de bus de REQUEST_GET_LOCAL_HOST_INFO (con el miembro u.GetLocalHostInformation.nLevel del IRB = GET_HOST_CAPABILITIES) para determinar las características del controlador de host. El controlador de bus devuelve una estructura GET_LOCAL_HOST_INFO2 y establece marcas dentro del miembro HostCapabilities para indicar lo que admite el controlador de host:

Tipo DMA Marca HostCapabilities

basado en secuencias

HOST_INFO_STREAM_BASED

basado en paquetes

HOST_INFO_PACKET_BASED