|
BUS - DISPOSITIVO DE ACCESO INDEPENDIENTE
Capitulo I. INTRODUCCION
Linux provee una API la cual tiene un ejecucion en las
entradas y
salidas (E/S) abstractas a traves de todos los buses y
dispositivos,
permitiendo que los instaladores de los dispositivos se escriban
independientemente del tipo de bus.
Capitulo II. CONOCIENDO
BUGS (FALLOS EN EL SISTEMA) Y SUPOSICIONES.
Capitulo III. MAPEADO
DE E/S DE LA MEMORIA
Obteniendo Acceso
al Dispositivo
La forma de soporte mas amplia de E/S es el mapeado E/S
de la memoria.
Esto es una parte del campo de direcciones de la CPU la cual es
interpretada no como un acceso a la memoria sino como un acceso al
dispositivo. Algunas arquitecturas definen los dispositivos para ser
como direcciones fijas, pero muchas tienen algunos métodos
de
descubrimiento de dispositivos. El bus PCI es un buen ejemplo de una
clase de esquema. Este documento no cubre Como recibir una clase de
direccion, pero asume que usted esta comenzando con
alguna. Las
direcciones basicas son de tipo €œlargo no definidos
Estas direcciones no deben de ser usadas directamente. En lugar de eso,
para obtener una dirección apropiada para pasar a las
funciones de
acceso descritas abajo, usted debe llamar a ioremap. Una
dirección
apropiada para acceso al dispositivo le debe de ser retornada a usted.
Después de que usted halla terminado de utilizar el
dispositivo
(diciendo, en sus modulos de salida de rutina), llame iounmap en orden
de retornar el campo de la dirección al kernel. Muchas
arquitecturas
alojan nuevos campos de direcciones cada vez que usted llama a ioremap
y ellos lo pueden correr a menos que usted llame a iounmap. Accediendo
al Dispositivo
La parte de la interface más usada por los instaladores
es leer y
escribir registros mapeados de la memoria sobre el dispositivo.
Las funciones son llamadas: readb, readw, readl, readq, writeb, writew,
writel and writeq.
Alguos dispositivos (como son los framebuffers) les
gustarÃa usar
transferencias largas de 8 bytes al tiempo. Para estos dispositivos,
las funciones memcpy_toio, memcpy_fromio y memset_io estan
suministradas. No use memset or memcpy sobre direcciones de E/S; estas
no garantizan la copia de datos en orden.
Las funciones de lectura y escritura son definidas para ser ordenadas.
Esto es que la compilación no es permitida para reordenar
la secuencia
de E/S. Cuando el ordenamiento puede ser compilado optimizadamente,
usted puede usar __readb y parecidos para indicar el suave
ordenamiento. Use este con cuidado. El rmb provee y lee una
“barrera� en la memoria. El wmb provee y escribe una
“barrera�
en la memoria
Mientras las funciones básicas son definidas para ser
sÃncronas con
respecto a cada una y ordenadas con respecto a cada uno de los buses de
los dispositivos situados en ellos mismos para tener asincronidad. En
particular muchos autores son quemados por el hecho de que el bus PCI
escribe como en un cartel asincronamente. Un instalador de un autor
debe editar y leer del mismo dispositivo para asegurar que la escritura
tiene ocurrencia en casos especÃficos que el autor lo
solicita. Esta
clase de propiedad no se puede ocultar cuando el instalador escribe en
la API.
ISA. Funciones de Herencia
En kernels anteriores (2.2 y menores) el bus ISA podÃa ser
leido o
escrito con estas funciones y sin comenzar a usar ioremap. Este no es
un verdadero “longer� en Linux 2.4. Un conjunto de
funciones
equivalentes existen para instaladores de herencia de puertos. Las
funciones son pre-fijadas con 'isa_' y son: isa_readb, isa_writeb,
isa_readw, isa_writew, isa_readl, isa_writel, isa_memcpy_fromio y
isa_memcpy_toio Estas funciones no deben de ser usadas en nuevos
instaladores y ser eventualmente extraidas.
Capitulo IV. ACCEDIENDO AL
CAMPO DEL PUERTO
Explicando
el Campo del Puerto
Otra forma común de soporte para la E/S es el campo del
puerto. Este
es un rango de direcciones separadas del campo de direcciones normales
de la memoria. Acceder a estas direcciones no es generalmente tan
rápido como acceder a direcciones de mapeado de memoria y
esto
también tiene un pequeño campo potente de
direcciones.
No semejante al mapeado de E/S de la memoria, la no
preparación es
requerida para acceder al campo del puerto.
Accediendo al Campo del Puerto
Acceder a este campo es pensar proveer un conjunto de funciones las
cuales permiten 8-bits, 16-bits y 32-bits de acceso;
también se
conocen como byte, word y long. Estas funciones son: inb, inw, inl,
outb, outw y outl. Algunas variantes son proveedoras para estas
funciones. Algunos dispositivos requiren que el acceso a estos puertos
sean bien lentos. Esta funcionalidad esta dada por adicionar una _p al
final de la función. Hay también equivalentes
a memcpy. Las funciones
ins y outs copian bytes, palabras o longs para darle a los puertos.
Capitulo V. SUMINISTRANDO FUNCIONES PÚBLICASo
también(canal en ingles) |