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.