3.2. Accediendo al dispositivo

La parte de la interface m�s usada por los controladores es la lectura y escritura de los registros mapeados en memoria del dispositivo. Linux suministra interfaces para leer y escribir cantidades de 8-bits, 16-bits, 32-bits y 64-bits. Debido a un accidente hist�rico estos son llamados accesos byte, word, long y quad. Ambos accesos de lectura y escritura son soportados; no hay soporte pre-producido en este momento.

Las funciones tienen los nombres readb, readw, readl, readq, writeb, writew, writel y writeq.

A algunos dispositivos (como los framebuffers) les gustar�a usar transferencias m�s grandes de los 8 bytes cada vez. Para estos dispositivos, son suministradas las funciones memcpy_toio, memcpy_fromio y memset_io. No utilices memset o memcpy en direcciones de E/S; no est� garantizado que copien los datos en orden.

Las funciones de lectura y escritura est�n definidas para ser ordenadas. Esto es, al compilador no le est� permitido reordenar la secuencia de E/S. Cuando el �rden puede ser compilado de forma optimizada, puedes usar __readb y amigos para indicar un �rden relajado. Usa esto con cuidado. La rmb suministra una barrera de lectura de memoria. La wmb suministra una barrera de escritura de memoria.

Mientras las funciones b�sicas son definidas para ser s�ncronas y ordenadas con respecto a las otras, los dispositivos que est�n en los buses quiz�s sean as�ncronos. En particular, algunos autores han sido quemados por el hecho de que las escrituras en el bus PCI son realizadas de forma as�ncrona. El autor de un controlador debe de emitir una lectura para el mismo dispositivo para asegurarse de que la escritura ha tenido lugar en los casos espec�ficos que quiere el autor. Este tipo de propiedad no puede ser escondida por los escritores de los controladores en la API.