d_cflush Kernel Service

Finalidad

Vacía las memorias caché de datos del procesador y del controlador de canal de E/S (IOCC) al correlacionar el dispositivo de bus DMA con la opción DMA_WRITE_ONLY a largo plazo.

Sintaxis

int d_cflush (channel_id, baddr, count, daddr)
int   channel_id;
caddr_t   baddr;
size_t   count;
caddr_t   daddr;

Parámetros

Elemento Descripción
channel_id Especifica el ID de canal DMA devuelto por el servicio de kernel de d_init .
baddr Designa la dirección del almacenamiento intermedio de memoria.
count Especifica la longitud de la transferencia de almacenamiento intermedio de memoria en bytes.
daddr Designa la dirección del dispositivo correspondiente a la transferencia.

Descripción

Se debe llamar al servicio de kernel de d_cflush después de que se hayan modificado los datos en un almacenamiento intermedio que se someterá al proceso de acceso directo a la memoria (DMA). Mediante el proceso de DMA, estos datos se envían a un dispositivo en el que el servicio de kernel de d_master con la opción DMA_WRITE_ONLY ya ha correlacionado el almacenamiento intermedio del dispositivo DMA. El servicio de kernel de d_cflush no es necesario si no se utiliza la opción DMA_WRITE_ONLY o si el almacenamiento intermedio se correlaciona antes de cada operación DMA llamando al servicio de kernel de d_master .

El servicio de kernel de d_cflush vacía la memoria caché del procesador para las líneas de memoria caché implicadas e invalida los datos recuperados anteriormente que pueden estar en los almacenamientos intermedios de IOCC para el canal designado. Esto se produce con más frecuencia al utilizar la correlación de almacenamiento intermedio a largo plazo para el soporte de DMA a o desde un dispositivo.

Correlación de almacenamiento intermedio DMA a largo plazo

El enfoque de correlación de almacenamiento intermedio DMA a largo plazo se utiliza con frecuencia cuando se define una agrupación de almacenamientos intermedios para enviar mandatos y obtener respuestas de un adaptador utilizando el maestro de bus DMA. Este enfoque también se utiliza con frecuencia en el campo de comunicaciones donde los almacenamientos intermedios pueden proceder de una agrupación común como, por ejemplo, la agrupación mbuf o una agrupación utilizada para cabeceras de protocolo.

Cuando se utiliza una agrupación fija de almacenamientos intermedios, el servicio de kernel de d_master sólo se utiliza una vez para correlacionar la dirección y el rango de la agrupación. A continuación, el controlador de dispositivo modifica los datos en los almacenamientos intermedios. También debe desechar los datos del procesador e invalidar la memoria caché de datos IOCC implicada en las transferencias con el dispositivo. La memoria caché de IOCC se debe invalidar porque los datos de la memoria caché de datos de IOCC pueden estar obsoletos debido a la última operación DMA a o desde el área de almacenamiento intermedio que se acaba de modificar para la siguiente operación.

El servicio de kernel de d_cflush permite el vaciado de la memoria caché del procesador y hacer que la memoria caché de IOCC necesaria no sea válida. El controlador de dispositivo debe utilizar este servicio después de modificar los datos en el almacenamiento intermedio y antes de enviar el mandato al dispositivo para iniciar la operación DMA.

Una vez que se haya completado el proceso de DMA, el controlador de dispositivo debe llamar al servicio d_complete para comprobar si hay errores y asegurarse de que los datos leídos desde el dispositivo se han vaciado en la memoria.

Nota: El servicio de kernel de d_cflush no está soportado en el kernel de 64 bits.

Entorno de ejecución

El servicio de kernel de d_cflush se puede llamar desde el entorno proceso o interrupción .

Valores de retorno

Elemento Descripción
0 Indica que la transferencia se ha completado satisfactoriamente.
EINVAL Indica la presencia de un parámetro no válido.